カスタム投稿タイプの操作

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

カスタム投稿タイプ用にカスタムテンプレートを作成できます。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 アクションフックを使います。

次の例では、投稿タイプ postpagemovie の投稿をホームページに表示します:

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');

原文 / 日本語訳

s
検索
c
新規投稿を作成する
r
返信
e
編集
t
ページのトップへ
j
次の投稿やコメントに移動
k
前の投稿やコメントに移動
o
コメントの表示を切替
esc
投稿やコメントの編集をキャンセル