get_template_part('content', get_post_format());
を使うとき、投稿フォーマットに従って特定のページのためにpost format
を選ぶのを助けることを私は理解します。
投稿形式が「標準」でない場合は、content.php
にフォールバックします。
しかし、content-single.php
を次のようなロジックで使用した場合はどうなりますか。
if (get_post_format() == false) {
get_template_part('content', 'single');
} else {
get_template_part('content', get_post_format());
}
まだcontent.php
ページが必要ですか。私が知らない他の機能はありますか?
いいえ、content.php
とcontent-single.php
は同じものではありません。
あなたの例のコードでは:
if (get_post_format() == false) {
get_template_part('content', 'single');
} else {
get_template_part('content', get_post_format());
}
get_post_format()
がfalse
の場合、WordPressはcontent-single.php
をロードします。ただし、 get_template_part( $slug, $name )
は、次の例でget_template_part('content', get_post_format());
を指定して呼び出すと、まだcontent.php
をロードしようとします。
get_post_format()
は(例えば)video
を返します。
しかし、あなたはcontent-video.php
テンプレートパートファイルを持っていません。
そのため、基本的に、get_post_format()
がfalse
ではない場合でも、対応する投稿フォーマット関連のテンプレートパーツが作成されていない場合、content.php
はデフォルトのテンプレートパーツを提供します。
一番下の行:メインの
$slug
がなんであれ、常にデフォルトのテンプレートパートファイルを最後のフォールバックテンプレートパートとして保持することをお勧めします(あなたの場合はcontent.php
がデフォルトのフォールバックテンプレートパートです)ファイル)。 そうはい、あなたはまだそれを必要とするかもしれません 。削除しないで、そのままにしてください。
以下は、コア関数get_template_part
からのCODEの一部です。ご覧のとおり、コアは常に$templates[] = "{$slug}.php";
を最後のフォールバックテンプレートファイルとしてロードします。
function get_template_part( $slug, $name = null ) {
// ... more CODE from WP core
$templates = array();
$name = (string) $name;
if ( '' !== $name )
$templates[] = "{$slug}-{$name}.php";
$templates[] = "{$slug}.php";
locate_template($templates, true, false);
}
次に、 locate_template
関数で、次のコードを使用して、対応するファイルが見つかるまで$templates
配列をループ処理します。
function locate_template($template_names, $load = false, $require_once = true ) {
$located = '';
foreach ( (array) $template_names as $template_name ) {
if ( !$template_name )
continue;
if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
$located = STYLESHEETPATH . '/' . $template_name;
break;
} elseif ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
$located = TEMPLATEPATH . '/' . $template_name;
break;
} elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) {
$located = ABSPATH . WPINC . '/theme-compat/' . $template_name;
break;
}
}
if ( $load && '' != $located )
load_template( $located, $require_once );
return $located;
}
あなたがcontent.php
を削除し、あなたがテンプレートパートファイルを持っていない投稿フォーマットを持っているなら、あなたが上記のCODEから分かるように、WordPressはそれにフォールバックするテンプレートファイルを見つけません。その場合は何もロードしません。最後の試みとして、WordPressはwp-includes/theme-compat/
コアディレクトリからテンプレートパートファイルをロードしようとしますが、WP coreにcontent.php
テンプレートパートファイルはありません。
注:ただし、子テーマを作成していて、親テーマにすでに
content.php
ファイルが含まれている場合は、子テーマにcontent.php
ファイルは必要ありません(インストールしない場合)。その場合は、WordPressは親テーマのcontent.php
ファイルを代替テンプレートパーツファイルとして使用するためです。
あなたはたった一つのテンプレート(content.php)で得ることができました。それは通常理想的ではありません。
teamtreehouse のブログからあなたの質問をクリアしてください。
私にとって、そのアプローチは代替方法です。