web-dev-qa-db-ja.com

Content.phpとcontent-single.phpは同じですか?

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ページが必要ですか。私が知らない他の機能はありますか?

6
Emad Aldeen

いいえ、content.phpcontent-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をロードしようとします。

  1. get_post_format()は(例えば)videoを返します。

  2. しかし、あなたは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ファイルを代替テンプレートパーツファイルとして使用するためです。

2
Fayaz

あなたはたった一つのテンプレート(content.php)で得ることができました。それは通常理想的ではありません。

teamtreehouse のブログからあなたの質問をクリアしてください。

私にとって、そのアプローチは代替方法です。

0