get_template_part()の使用方法は?


25

誰かがこの機能がどのように機能するか説明してくれますか?私はそれが何をするか知っていますが、twenty_tenテンプレートのソースコードを見ると、すべてのループが1つのloop.phpでどのように収集されているかわかりません(そのファイルも見ました)。

では、たとえば、テンプレートの特定の共通部分を抽象化して、他のテンプレートで再利用するにはどうすればよいでしょうか?


回答:


25

ここにいくつかの非常に良い入門的な答えがあります。

基本的に、get_template_part()テーマ開発者はテンプレートファイルの特異性の順序を設定できます。CSSセレクターに適用される特異性と同様に考えてください。何かを設計するとき、個々の注意を必要とする設計の部分で簡単に上書きできるように、最低限の特異性から始めたいと思います。

たとえば、ブログをスタイリングして、投稿をマークアップするのに適しloop.phpファイルを作成します。ただし、事前に計画し、後で追加のコンテキスト指定子を使用してテンプレートファイルで呼び出します。たとえば、インデックスページでget_template_part( 'loop', 'index' );、単一のテンプレートでを呼び出しget_template_part( 'loop', 'single' );、アーカイブページでを呼び出しget_template_part( 'loop', 'archive' );、などを呼び出します。これにより、アーカイブページのループをホームページとは異なる方法でマークアップすることを決定したときに、非常に簡単になります。一般的なloop.phpではなくloop-archive.phpテンプレートを作成するだけで使用できます。

しかし、背後にある魔法get_template_part()は、locate_template()最初にテーマディレクトリをチェックし、次に指定されたファイルの親ディレクトリ(存在する場合)をチェックする関数にあります。これはプラグイン開発に非常に役立ちます。プラグインの1つで、カスタム投稿タイプを定義し、プラグインディレクトリにそのカスタム投稿タイプのループテンプレートファイルを作成しました。しかし...プラグインを使用してテーマを選択し、マークアップをオーバーライドできるようにします。これはlocate_template()本当に素晴らしい作品です。

locate_template($template_names, $load = false, $require_once = true )

スタイルシートディレクトリ内の$ template_names配列内の各名前を探し、次にテンプレートディレクトリ内を探します。$ load引数として「true」を渡す、最初に見つかったファイルが必要になり、テンプレートファイルが見つからなかった場合は空の文字列が返されます。プラグインで次のようなことができます:

if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) )
    include( 'loop-mycustomposttype.php' );

...これにより、テーマ開発者がloop-mycustomposttype.phpというファイルをテーマに含めるだけでプラグインをカスタマイズできるようになります。


2
Locate_templateをこれに置き換えてください。include(locate_template( 'loop-mycustomposttype.php')) この方法で変数を渡すことができます。こちらのリンクを見つけました。とても便利です!
パブロSGパチェコ14年

1
そうする場合、これも変更する必要があります。このようにif ( false === include(locate_template( 'loop-mycustomposttype.php')) )
パブロSGパチェコ14年

1
ああ、良い点。私が与えた式では、requireor require_once呼び出し(からlocate_template)は関数内にあるため、現在のスコープにアクセスできません。
ゴールデンアップル14年

5

すべてのループではなく、メインループ。;-)フロントページ、カテゴリ、または誰が何を知っていても、常にメインループがあります。そのメインループの内容は、テンプレートがまったく呼び出される前に実行されたクエリによって決まります。

loop.phpテンプレートは、ループ内の項目に対して単に実行され、それらをフォーマットします。Codexのドキュメントを参照してください。

Twenty-Tenのloop.phpを見ると、Twenty-Tenはその単一のテンプレートファイルで多様化ていることがわかります。

get_template_part()単にテンプレートパーツを読み込んで実行するだけです。同様に、loop.phpの一部を別のファイルに抽出し、a get_template_part('loop', 'category')などの呼び出しに置き換えることができます。

または、ループ内の個々の投稿ごとにパートテンプレートを作成し、loop.phpを句get_template_part('loop','post');内でのみ呼び出すことができますwhile...。すべてあなた次第。


3

get_template_part codexから:

<?php get_template_part( 'loop', 'index' ); ?>

存在する最初のファイルに対してPHP require()を実行します...

したがって、別のphpファイルが必要であるかのように効果的に機能します。

更新: 'require'にはわずかな違いがあります -関数内にラップされているためglobal、テンプレートからテンプレートパーツに変数を渡す必要がある場合に必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.