web-dev-qa-db-ja.com

カスタム投稿タイプの特定の投稿用のテンプレート

CPTの "イベント"があります。私はsingle-event.phpを作成しました。

あるイベントでシングルイベントとは異なるテンプレートを使用したいのですが。

私はこれをシングルイベント - [slug] .phpを作成することによって行うことができると他の所で読みましたが、私はそれを試みましたがうまくいきません。 WPはsingle-event.phpを使います。 (私はWordPressのドキュメントでこれを見つけることができないので、多分私は誤解していると思いますか?)

これを行う方法はありますか?

5
spiral

WordPressが使用するテンプレートについては、Codexの テンプレート階層構造 を常に参照してください。

ご覧のとおり、single-{$posttype}-{$slug}.phpは存在せず、single-{$posttype}.phpしかありません。

あなたが望むことをするために、フィルタ'single_template'を見てください:

add_filter( 'single_template', function( $template ) {
    global $post;
    if ( $post->post_type === 'event' ) {
        $locate_template = locate_template( "single-event-{$post->post_name}.php" );
        if ( ! empty( $locate_template ) ) {
            $template = $locate_template;
        }
    }
    return $template;
} );

これをあなたのfunctions.phpに追加した後、あなたはファイルsingle-event-{$slug}.phpを作成することができ、そしてそれはWordPressによってロードされます。

9
gmazzap

このテーマを自分の関数ファイルで子テーマに使用し、8をカスタムシングルCPTテンプレートを使用したい投稿i.Dに変更します。

function get_custom_post_type_template($single_template) {
     global $post;

     if ( is_single('8') ) {
          $single_template = get_stylesheet_directory() . '/custom-cpt-template.php';
     }
     return $single_template;
}
add_filter( 'single_template', 'get_custom_post_type_template' );
1
Brad Dalton