web-dev-qa-db-ja.com

Get_template_part( 'partials/post'、 'sidebar')をオーバーライドします。プラグインなし

私は別の開発者によって彼らのために作られたテーマを持っているクライアントのためのサイトに取り組んでいます。彼らは私にサイトに変更を加えるように頼みました、そして私はオリジナルのテーマ開発者のために私のすべての変更をプラグインに入れたいと思います。これまでのところ、これは関数とCSSで簡単です。今度はテーマファイルを変更する必要があります。基本的には、あるテーマファイルを、私が多大に編集した別のものと置き換えたいのです。

テーマの中で、置き換えたいファイルはこれで呼ばれます。

get_template_part( 'partials/post', 'sidebar' );

私がやりたいことは、どういうわけか私のプラグインに上記のステートメントを捕らえてそして私のプラグインディレクトリにあるファイルにそのテンプレートリクエストをリダイレクトする関数を書くことです。

私はこれを行う方法を全く知らないし、検索はこれまでのところほとんど助けにならなかった。これは可能ですか?

5

TL; DR:子テーマ代わりに:)


get_template_part()のコード を調べると、そこにアクションがあります-get_template_part_{$slug}-フックできます。

さらに掘り下げて、get_template_part()は locate_template() を呼び出し、これは load_template() を呼び出します。残念ながら、これらの関数のいずれにもプラグイン可能と思われるものはないため、フックして何も変更することはできません(load_template()のextract()の呼び出しを介して変数を設定できることを除く)。ただし、呼び出されているテンプレートファイルをオーバーライドすることはできないため、とにかくあまり役​​に立ちません!)

したがって、これをキャッチする唯一のオプションは、get_template_part_partials/postアクションでコードを実行することです。問題は、これはあなたが呼ばれたテンプレートをフィルタリングすることを許可しないことです-それはあなたがいくつかのコードを実行できるようにするだけですwhenテンプレートが呼び出されます。出力を追加するだけの場合aboveテンプレートコードを使用すると、これは完全に適合しますが、それだけでいいとは思いません。

これをすべて回避する方法は、子テーマを使用することです

元のテーマ開発者を尊重するために、コードをプラグインに入れたいと言っていました。まず第一に、その点は素晴らしいです-多くの開発者はそれほど気にしませんので、私はあなたを称賛します!

しかし、プラグインが最良の選択ですか?プラグインは通常、サイトの外観を変更するためではなく、サイトにモジュール機能を追加するために使用されます。それがテーマの領域です。

実際に 子テーマを作成する を使用すると、サイトで使用するテーマを変更できますwithout親テーマに変更を加えます。ここですでに行ったすべての変更を適用できるはずです。さらに、get_template_part()は、存在する場合は子テーマ内のファイルを自動的に使用しますに戻ってから、親テーマ。

3
Tim Malone