テンプレートファイルをカスタム投稿タイプに割り当てることはできますか?
私はitems
と呼ばれるカスタム投稿タイプを作成しました、そして私はあなたがページでできるようにアイテムにテンプレートを割り当てたいと思います。
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-typeshttps://make.wordpress.org/ core/2016/11/03/post-type-templates-in-4-7/
これが私のために働くものです:
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
テンプレートがあればそれをロードします。
Googleを介してこのスレッドにアクセスする人のために、WP 4.7はすべての投稿タイプ用のテンプレートを導入しました。詳しいチュートリアルについては Make WP Core を参照してください。すべてのCPTに対して1つのテンプレートに制限されることはなくなりました。Pagesと同じように、投稿ごとに個別のテンプレートを割り当てることができます。
以下のように1つのテンプレートファイルを作成してそのtemplate-itemsという名前を付けるよりも、まず最初に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>
これは少し古いですが、あなたもこれを試すことができます:
カスタム投稿タイプのテンプレートを作成します。
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
これは非常に簡単です。
テーマのルートディレクトリに新しい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();?>