私が遭遇したすべてのドキュメントは、プラグインを介してプラグイン可能な関数をオーバーライドすることについて説明しています。
代わりにテーマ開発を行っている場合はどうなりますか?
私のfunctions.phpにはget_user_by()
、で定義されている関数をオーバーライドする別のファイルが必要ですpluggable.php
。
if( function_exists() )
呼び出しを省略すると、「再宣言できません...」というエラーが表示されます。
if( function exists() )
呼び出しを含めると、エラーは発生しませんが、プラグイン可能なバージョンが存在するため、もちろん、関数は無視されます。
WordPressの起動順序に関するDominicのすばらしい投稿に基づいて、テーマなどの前にpluggable.php
読み込まれることが明らかであるfunctions.php
ため、エラーが説明されています。
だから問題は-テーマと一緒にバンドルまたはインストールする必要のあるプラグインを作成することに頼らずに、テーマ内からその優れたプラグイン可能なアーキテクチャをどのように利用できるかということです。
追記:だから、議論はテーマがプラグインがすることをしようとするべきではないということだと思われます。しかし、その議論は(4桁のトラック番号によると)4年以上前のものです。今日のテーマ開発風景の複雑なトポロジーを考えると、この哲学がまだ当てはまるかどうか、何人かのヘビーヒッターから聞いてみたいです。それ以来、私たちが進化してきたと信じたいです。
コンテキスト:多くのカスタムメタデータ、管理バックエンドのカスタマイズ、ログイン/認証プロセス、機能を備えた、お客様向けの1回限りのCMSソリューションを開発しています。そしてもちろん、設計コンポーネントがあります- 。テーマ部分の出番だ事実は、これらは単純にしているされていない再利用可能なコンポーネント-彼らは別のクライアントに適用されることはありません、彼らはGPLの下に置かれることはありませんし、オープンソース化し、彼らが最もあり確かに他のWordPressデプロイメントに配布/インストールしないでください。せいぜい、将来のプロジェクトで活用するいくつかのベストプラクティスがありますが、それは厳密には参照/コピーアンドペーストジョブです。
これは私にとってプラグインの使用例のようには聞こえません。テーマがインストールされ、おそらくTwenty Elevenの子テーマ、スタンドアロンである可能性があります。そのfunctions.phpは、インクルードのボートロードで呼び出し、それぞれが問題のCMSの異なる側面を処理します。次に、テーマテンプレートファイルは、インクルードで定義されているカスタムの「テンプレートタグ」を使用します。プラグインなどの依存関係がアクティブ化されているテーマファイルを使用したくありません。システムに複雑さを組み込むのは意味がありません。もちろん、私はそれを必須プラグインフォルダに入れることができますが、それでもハックのように感じられます-現在、このプロジェクト用に行われたカスタマイズに関係するすべてのものがに含まれていwp-content/themes/my-theme/
ます。また、一部のプラグインフォルダーでコンテンツを検索することも検討する必要はありません。
誤解しないでください。プラグインが大好きで、プラグインを使用して作成しています。そして、プラグインがサードパーティであり、妥当な期間内に展開できる可能性のあるベストプラクティスをはるかに超えている場合、私はプラグインをこのような高度にカスタマイズされたテーマ開発と組み合わせて使用します。ただし、1回限りのシナリオでコア機能を変更する必要がある場合は、アクションフック、フィルターフックに切り替え、ユーザーおよびプラグイン可能な機能に依存して、ユーザー側と認証側の両方にも対応できるようにしたいと考えています。