テーマのget_template_partとアクションフック


15

どちらも、エンドユーザーがテーマファイルを実際に編集することなく(子テーマを介して)テーマを変更する機会を与えてくれるように思えます。

私の質問は、他の方法よりも好ましい方法です。

たとえば、現在取り組んでいるテーマを取り上げます。フックのテンプレート部分を使用するかどうかを決定しようとしています。

<?php get_template_part('before_sitecontainer' ); ?>
<div id="sitecontainer" class="sitecontainer" <?php //closed in footer ?>>

<?php get_template_part( 'before_topcontainer' ); ?>
<div id="topcontainer ">

    <?php get_template_part( 'before_topedge_navigation' ); ?>
    <?php get_template_part( 'topedge_navigation' ); ?>

    <?php get_template_part( 'before_site_header' ); ?>
    <?php get_template_part( 'site_header' ); ?>

    <?php get_template_part( 'before_second_navigation' ); ?>
    <?php get_template_part( 'second_navigation' ); ?>

    <?php get_template_part( 'after_second_navigation' ); ?>

</div><!-- end topcontainer div -->
<?php get_template_part( 'after_topcontainer' ); ?>

上記により、テーマのユーザーは、子テーマフォルダーに適切な名前のファイルを作成するだけでなく、同じ方法で既存の各セクションの前後に新しいコードを追加することで、既存のコードのセクションを置き換えることができます-before / afterテンプレートパーツファイルは親テーマにはまったく存在せず、単にコードを挿入できるようにするためだけに存在します。この方法では、フック/フィルターを理解してこれを実現する必要はありません。

もちろん、フックとフィルターを使用して同じことを達成できます。

代わりにフック/フィルターを使用する利点はありますか?これを使用するターゲットオーディエンスは、明らかにコードに精通しているわけではありません。テンプレートメソッドを使用するために従うことができる比較的基本的な指示を与えることができますが、フックで悪魔を混乱させることはほぼ確実です。

または、同じテーマ内で一方が他方より優れている状況はありますか?

回答:


8

フックは柔軟性が高いため、フックが好きです。テーマのfunctions.phpファイルからだけでなく、プラグインからもフックできます。私はプラグインにできるだけ多くのロジックを入れて、テーマのほとんどがレイアウトのものを含むようにします。

アクションフックを使用する場合でもget_template_part() 、そのフックハンドラーで使用することは可能です。これにより、両方の長所が得られます。おそらくを呼び出すデフォルトのフックを作成して、get_template_part()コーディングの経験があまりない人でも追加のファイルを追加できるようにすることもできます。

パフォーマンスに関して:get_template_part()inlocate_template()file_exists()を1、2、または4回使用します(呼び出し方に応じて)。これfile_exists()は非常に高速でPHPおよびOSでもキャッシュ使用しているようです。おそらくそれは問題ではないでしょう。


それは理にかなっている。私のデザインの目的は、ほとんどの一般的な使用状況でプラグインの必要性を排除しながら、必要な場合にプラグインを使用する能力を維持することです。私のターゲットクライアントは、WordPressまたはプラグインについてほとんど知らないため、良いプラグインを悪いプラグイン(IMOの主要な弱点)から区別する資格がなく、複数のソフトウェアの更新と管理に対処する必要はありません。そのため、テーマに必要なものを提供するために、テーマに多くの機能を構築する必要があります。使いやすく、保守しやすく、ワンストップソリューションです。
アシュリーG

4

主な違いは読みやすさです。いくつかの適切な名前のテンプレートパーツが表示されている場合、何が起きているのかを簡単に把握できます。フックが表示されている場合は、テーマの残りの部分を検索して、フックにアタッチされているものを確立する必要があります。


1
ええ、それは理にかなっており、サンプルコードで達成しようとしていたことの一部です。
アシュリーG

4

(比較的)子テーマのフックから関数を削除するのは簡単ですが、不要な親テンプレートを無視するのははるかに困難です。

基本的にフックでの作業はPHP側により近く、テンプレートでの作業はHTML側により近くなります。私は非常にフック指向のハイブリッド親テーマを使用します。親のテンプレートを取り除く必要があるまで、それは至福です。

技術に精通していないユーザーにとっても、どちらも非常に良いオプションではありません。とにかくそのようなテーマの内部をいじる必要があるのでしょうか?

PSはパフォーマンスの問題にも注意します。フックのあるものはメモリ内で発生し、テンプレートのあるものは大量のディスク検索を行います。特にあなたの例のようなものを書いている場合。

PPSはみんなの好みではありません...しかし、親のテーマをゼロから書く代わりに、既存の親のテーマを取り、ユーザーに簡単な子のテーマを提供してみませんか?


親テンプレートを無視すると、空のテンプレートファイルを作成して置き換えるのと同じくらい簡単になります。技術に詳しくないユーザーにとっては、フック(およびそのためのPHP)をいじるよりもはるかに簡単です。経験のある人にとっては、フックははるかに簡単でしょう。理由については、カスタマイズしたい人が常にいます、あなたはあなたもそうだと認めました。テーマを作成する理由については、それが私のビジネスを取りたい方向です。他の誰かのビジネスを中心に構築することは、私にとって非常に将来的な証拠とは思えません。もっとうまくやれると思います。
アシュリーG

ただし、パフォーマンスの問題についての良い点。しかし、wordpressはget_template_partで動作するように設計されているので、それほどパフォーマンスに影響はないと思っていたでしょう。誰もこれに関するベンチマークを持っていますか?
アシュリーG

テンプレートパーツを無視することについてあなたが何を言っているかわかります。私が思ったほど簡単ではない
アシュリーG

実際には、フォルダのルートにある空のテンプレートファイルを子フォルダに配置するのと同じくらい簡単です。困難になるのは、テンプレートファイルが親/子テーマフォルダーのサブフォルダーにあるときです
アシュリーG

実際、サブフォルダーでさえ問題ありません。私はちょうど間違った名前のフォルダを持っていました(私は遅すぎるLOLに取り組んでいる確かな兆候)。親にあったように、それが唯一の子で同じパスに同じ名前のファイルが必要テンプレート部分を上書きする
アシュリーG
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.