WordPressでは、特定のカスタム投稿タイプの一覧ページ(アーカイブページ)でのみ処理を実行したいケースがよくあります。例えば、特定の投稿タイプに専用のスタイルを適用したり、表示内容やクエリを独自にカスタマイズしたりといった用途です。
本記事では、カスタム投稿タイプのアーカイブページでのみ処理を行うための方法を、条件分岐・クエリのカスタマイズ・テンプレートの記述に分けて詳しく解説します。
カスタム投稿の一覧ページかどうかを判定する方法
一覧ページかどうかを判別するには、is_post_type_archive()
関数を使用します。この関数は、指定したカスタム投稿タイプのアーカイブページであれば true
を返し、それ以外では false
になります。
if ( is_post_type_archive('your_custom_post_type') ) {
// カスタム投稿の一覧ページでのみ実行したい処理
}
your_custom_post_type
の部分には、対象の投稿タイプのスラッグを指定してください。これにより、他の投稿タイプや通常の投稿ではこの処理が実行されることはありません。
一覧ページの表示件数や並び順を変更する方法
表示件数やソート順などを変更したい場合は、pre_get_posts
フックを使ってメインクエリをカスタマイズします。これは、表示前のクエリに対して条件を追加したり変更したりするための強力な手段です。
function modify_custom_post_type_query( $query ) {
if ( is_post_type_archive('your_custom_post_type') && $query->is_main_query() && !is_admin() ) {
$query->set( 'posts_per_page', 10 ); // 1ページに表示する件数
$query->set( 'orderby', 'date' ); // 日付順に並び替え
$query->set( 'order', 'DESC' );
}
}
add_action( 'pre_get_posts', 'modify_custom_post_type_query' );
is_main_query()
によって、管理画面やサブクエリではなく、実際にページ表示に使われるメインクエリだけを対象にすることができます。
テンプレートファイルで専用の処理を追加する
テンプレートファイル内で、特定のカスタム投稿の一覧ページにのみ表示したいメッセージや要素を追加することも可能です。こちらも is_post_type_archive()
を使って判定できます。
if ( is_post_type_archive('your_custom_post_type') ) {
echo '<div class="custom-message">このページはカスタム投稿の一覧ページです。</div>';
}
このように記述することで、共通テンプレート内でもページ種別によって柔軟に出力内容を変えることができます。
まとめ
カスタム投稿タイプの一覧ページでのみ処理を実行したい場合は、以下の方法を活用することで柔軟なカスタマイズが可能になります。
is_post_type_archive()
を使った条件分岐pre_get_posts
フックによるクエリの制御- テンプレート内での出力調整
これらを組み合わせることで、ユーザー体験を向上させたり、不要な処理を減らしてパフォーマンスを改善したりといったカスタマイズが実現できます。カスタム投稿の特性に合わせて、適切な制御を行ってみてください。