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

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

コメント

codex.wordpress.org/Function_Reference/get_template_part

回答

ここにいくつかの非常に優れた入門的な回答があります。

基本的に、get_template_part()を使用すると、テーマ開発者はテンプレートファイルの特異性の順序を設定できます。 CSSセレクターに適用される特異性。何かを設計するときは、最小限の特異性から始めて、個別の注意が必要な設計の部分で簡単にオーバーライドできるようにします。

たとえば、 、「ブログのスタイルを設定し、ループを作成します.php ファイル。投稿のマークアップに適しています。ただし、事前に計画を立て、後で追加のコンテキスト指定子を使用してテンプレートファイルで呼び出します。たとえば、インデックスページでget_template_part( "loop", "index" );を呼び出し、単一のテンプレートで

、アーカイブページでは、get_template_part( "loop", "archive" );などを呼び出します。これにより、アーカイブページのループをホームページとは異なる方法でマークアップする場合に非常に簡単になります。 loop-archive.php テンプレートとそれ」は一般的な loop.php ではなく使用されます。

しかし、get_template_part()の背後にある魔法は関数locate_template()にあります。この関数は、最初にテーマディレクトリをチェックし、次に親ディレクトリをチェックします(ifこれはプラグインの開発に非常に便利です。私のプラグインの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 というファイル。

コメント

  • locate_templateをこれに置き換えてください。 include(locate_template( 'loop-mycustomposttype.php'))この方法で変数を渡すことができます。 'これはリンクで見つかりました。 'は非常に便利です!
  • そうすることで'これも変更する必要があります。このようにif ( false === include(locate_template( 'loop-mycustomposttype.php')) )
  • ああ、良い点です。私が与えた式では、requireまたはrequire_once呼び出し(locate_templateから)が内部にあります関数など'は現在のスコープにアクセスできません。

回答

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

loop.phpテンプレートは、ループ内のアイテムを実行してフォーマットするだけです。 コーデックスのドキュメントを参照してください。

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

get_template_part()は、テンプレートパーツをロードして実行するだけです。同様に、抽出することもできます。 loop.phpの一部を個別のファイルに分割し、それらをget_template_part("loop", "category")などの呼び出しに置き換えます。

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

回答

get_template_partコーデックスから:

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

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

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

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