カスタム投稿タイプテンプレート
カスタム投稿タイプ用のカスタム テンプレート を作成できます。投稿とそのアーカイブが single.php
と archive.php
を使用して表示されるのと同様に、次のテンプレートを作成できます:
single-{post_type}.php
– カスタム投稿タイプの単一投稿用archive-{post_type}.php
– アーカイブ用
ここで {post_type}
は投稿タイプ識別子で、$post_type
引数として register_post_type()
関数で使用されます。
以前に学んだことを基に、単一製品投稿とアーカイブ用の single-wporg_product.php
と archive-wporg_product.php
テンプレートファイルを作成できます。
また、任意のテンプレートファイルで is_post_type_archive() 関数を使用して、クエリが特定の投稿タイプのアーカイブページを表示しているかどうかを確認し、post_type_archive_title() 関数を使用して投稿タイプのタイトルを表示できます。
投稿タイプによるクエリ
特定のタイプの投稿をクエリするには、post_type
キーを WP_Query
クラスコンストラクタの引数配列に渡します。
<?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');