カスタム投稿タイプのテンプレート
カスタム投稿タイプ用にカスタムテンプレートを作成できます。single.php
と archive.php
を使用して投稿とそのアーカイブを表示できるのと同じように、テンプレートを作成できます:
single-{post_type}.php
– カスタム投稿タイプの個別投稿用archive-{post_type}.php
– アーカイブ用
{post_type}
は投稿タイプ識別子で、register_post_type()
関数の引数 $post_type
として使用されます。
過去に学んだことをもとに、個別の商品投稿とアーカイブ用に、テンプレートファイル single-wporg_product.php
と archive-wporg_product.php
を作成できます。
あるいは、任意のテンプレートファイルで is_post_type_archive()
関数を使用して、クエリーが指定された投稿タイプのアーカイブページを表示しているかどうかをチェックし、post_type_archive_title()
関数を使用して投稿タイプのタイトルを表示できます。
投稿タイプによるクエリー
WP_Query
クラスのコンストラクタの引数配列に キー post_type
を渡すことで、特定の型の投稿をクエリーできます。
<?php
$args = array(
'post_type' => 'product',
'posts_per_page' => 10,
);
$loop = new WP_Query($args);
while ( $loop->have_posts() ) {
$loop->the_post();
?>
<div class="entry-content">
<?php the_title(); ?>
<?php the_content(); ?>
</div>
<?php
}
これは、最新の10件の商品投稿をループし、タイトルと内容を1件ずつ表示します。
メインクエリーの変更
カスタム投稿タイプを登録しても、それが自動的にメインクエリーに追加される訳ではありません。
カスタム投稿タイプの投稿を標準のアーカイブに表示させたり、他の投稿タイプに混じってトップページに表示させたい場合は、pre_get_posts
アクションフックを使います。
次の例では、投稿タイプ post
、page
、movie
の投稿をホームページに表示します:
function wporg_add_custom_post_types($query) {
if ( is_home() && $query->is_main_query() ) {
$query->set( 'post_type', array( 'post', 'page', 'movie' ) );
}
return $query;
}
add_action('pre_get_posts', 'wporg_add_custom_post_types');