WordPressのテンプレートで特定のカスタム投稿タイプのときだけ処理を実行したい場合、is_singleを使った条件分岐を思い付きますがうまく利きません。
次の例では、「おすすめ店」を管理する「shops」というカスタム投稿タイプのときだけ何かを表示するため、is_singleで条件分岐を作成しています。
if (is_single('shops')) { …何かを表示する… }
非常に紛らわしいので注意してください。is_single自体には投稿とカスタム投稿が含まれますが、「is_single(カスタム投稿タイプ)」という書式ではありません。「is_single(ID・スラッグまたはタイトル)」になります。
if (is_single(ID・スラッグまたはタイトル)) { …何かを表示する… }
この使い方は、特定の投稿を識別する用途になります。
次の使い方はうまくいきません。
if (is_single(カスタム投稿タイプ)) { …何かを表示する… }
特定のカスタム投稿タイプを条件に分岐させたい場合はis_singleの代わりにis_singularを使います。
if (is_singular('shops')) { …何かを表示する… }
つまり、
- is_singular(投稿タイプ) — 指定した投稿タイプかどうか調べる
- is_single(投稿ID) — 指定した投稿(ID・スラッグ・タイトル)かどうか調べる
のように異なります。
最後にさらに紛らわしいことを書きますが、パラメータなしで呼び出した場合、それぞれの関数は次のデータにヒットします。
- is_singular() — 投稿・カスタム投稿の個別記事および固定ページ・添付ファイル
- is_single() — 投稿・カスタム投稿の個別記事
詳しくは、以下のページも参考にしてください。
関数リファレンス/is_single – WordPress Codex 日本語版
関数リファレンス/is_singular – WordPress Codex 日本語版