回答:
WordPressバージョン4.7から、カスタムページテンプレートをページとともに他の投稿タイプに割り当てることができるようになりました。
テンプレート名ファイルのヘッダーに加えてこれを実現するために、テンプレートでサポートされる投稿タイプは、次のようにテンプレート投稿タイプを使用して指定できます。
<?php
/*
Template Name: Full-width page layout
Template Post Type: post, page, product
*/
詳細については、次のページで入手できます。
https://wptavern.com/wordpress-4-7-brings-custom-page-template-functionality-to-all-post-types https://make.wordpress.org/core/2016/11/03/post -type-templates-in-4-7 /
次のようなファイルを作成して、カスタム投稿タイプのテンプレートを作成できます。
single-mycustomposttype.php
コーデックスのテンプレート階層を参照してください。
PS:これはすでに回答済みです。
ここに私のために働くものがあります:
add_filter('single_template', function($original){
global $post;
$post_name = $post->post_name;
$post_type = $post->post_type;
$base_name = 'single-' . $post_type . '-' . $post_name . '.php';
$template = locate_template($base_name);
if ($template && ! empty($template)) return $template;
return $original;
});
したがって、カスタム投稿タイプの投稿foobar
とhello-world
上記のコードのスラッグが与えられた場合、single-foobar-hello-world.php
テンプレートが存在する場合はロードされます。
これは少し古いですが、これを試すこともできます:
カスタム投稿タイプのテンプレートを作成します。
single-*custom-post-type-slug*.php
ファイルはスラッグをチェックし、ファイルが存在するかどうかを確認し、存在しない場合はデフォルトのテンプレートファイルにフォールバックします。
<?php
$slug = get_post_field( 'post_name', get_post() );
$slug = ( locate_template( 'templates/*custom-post-type-slug*/' . $slug . '.php' ) ) ? $slug : 'default';
get_template_part( 'templates/*custom-post-type-slug*/' . $slug );
?>
custom-post-type-slugのすべてのインスタンスを、カスタム投稿タイプの実際のスラッグに置き換えます。
これは使いやすさと組織化の目的で行います。テーマのルートフォルダーにすべてのファイルを置くよりも、私にはわかりやすいようです。
フォルダー構造の例:
themeroot
| |single-cases.php
|-templates
| --cases
| |default.php
| |case-one.php
| |case-two.php
以下のようにテンプレートファイルを1つ作成し、そのtemplate-itemsという名前を付けるよりも、最初に、アイテムの投稿タイプのコンテンツを表示する、必要に応じてItemsという名前のページに作成します。作成したページのテンプレートを選択します。
<div class="container">
<div class="row">
<div class="col-md-9">
<div class="panel panel-default text-center">
<?php $loop = new WP_Query( array( 'post_type' => 'items', 'posts_per_page' => 5 ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<?php the_title();?>
<?php if(has_post_thumbnail() ) { the_post_thumbnail(); } ?>
<?php the_content();?>
<?php endwhile; ?>
<?php wp_reset_query(); ?>
</div>
</div>
</div>
</div>
これは非常に簡単です。
テーマルートディレクトリに新しいPHPファイルを作成し、これを一番上に追加します。
<?php /*
* Template Name: My custom view
* Template Post Type: Post_typename // here you need to add the name of your custom post type
*/ ?>
完全な例は次のとおりです。
<?php /*
* Template Name: My custom view
* Template Post Type: Post_typename // here you need to add the name of your custom post type
*/ ?>
<?php get_header();?>
<div class="container pt-5 pb-5">
<?php if (has_post_thumbnail()):?>
<img src="<?php the_post_thumbnail_url('largest');?>" class="img-fluid">
<?php endif;?>
<?php if (have_posts()) : while (have_posts()) : the_post();?>
<?php the_content();?>
<?php endwhile; endif;?>
</div>
<?php get_footer();?>
カスタム投稿テンプレートプラグインを使用して別のソリューションを作成しました