カスタム投稿タイプの詳細ページ判別は is_singular()
カスタム投稿タイプの詳細ページで条件分岐を行うための最も信頼性が高く、推奨される関数はis_singular()です。この関数は、単一記事のページ(詳細ページ)かどうかをチェックするもので、引数にカスタム投稿タイプ(CPT)のスラッグを指定することで、そのCPTの詳細ページであるかを正確に判断できます。
この方法は、テンプレートの構造(
single-カスタム投稿スラッグ.phpというファイル名でなくても)に依存せず、WordPressのコアなロジックに基づいて動作するため、非常に安定性が高いという特長があります。古いコードをずるずる引きずっていると、いつか思わぬ落とし穴にドボン!とハマってしまいますよ。カスタム投稿タイプ詳細ページでの正しい条件分岐コード
以下のコードを、例えばfunctions.php や汎用テンプレートファイル(single.phpなど)内に記述することで、特定のカスタム投稿タイプでのみ実行したい処理を確実に隔離できます。|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php // カスタム投稿タイプ 'review' の詳細ページでのみ特定の処理を実行する例 if ( is_singular('review') ) : ?> <div class="special-review-layout"> <p>このページはレビュー投稿の詳細ページです。専用のカスタムフィールド情報を表示します。</p> <?php the_post_thumbnail('large'); ?> </div> <?php // 💡 もし、他のカスタム投稿タイプ 'news' でも処理を分けたい場合 elseif ( is_singular('news') ) : ?> <div class="news-specific-element">お知らせ専用のヘッダーを表示。</div> <?php else : ?> <?php endif; ?> |
is_singular()の引数には、必ずカスタム投稿タイプを登録した時のスラッグ(register_post_type()の第一引数)を指定してください。これで動作は万全でしょう。
複数スラッグ指定や汎用テンプレートファイルでの適用事例
複数のカスタム投稿タイプを一括で判別したい場合
制作するCPTが増えてきた場合、「CPT-AとCPT-Bの詳細ページどちらでもこの処理を走らせたい」というケースも出てきます。そんな時は、is_singular()の引数に配列を用いることで、コードをすっきりとまとめることが可能です。これは非常に生産性の高い記述方法であり、テーマ制作の効率を格段に向上させます。
|
1 2 3 4 5 6 7 8 |
<?php // カスタム投稿タイプ 'cat_surgery' または 'dog_surgery' の詳細ページで共通処理を行う if ( is_singular( array('cat_surgery', 'dog_surgery') ) ) : ?> <div class="surgery-common-box"> 専門家監修のフッターバナーを表示。 </div> <?php endif; ?> |
シングルテンプレートのファイル名に依存しない柔軟な対応
もし、詳細ページテンプレートをsingle.php一つに集約している場合でも、is_singular()を使えば、ファイルの命名規則に縛られずに詳細な条件分岐を実現できるため、テーマ設計の柔軟性が格段に高まるでしょう。single-カスタム投稿スラッグ.php というファイル名でテンプレートを作成している場合、原則としてそのテンプレート内では分岐処理は不要ですが、例えばそのファイル内で特定のCPTの親テンプレートを読み込ませるなど、より複雑なロジックを組む際に
is_singular()が役立つ場面もあるはずです。


コメント