is_singleはカスタム投稿タイプの条件分岐には効かない

スポンサーリンク

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 日本語版

PHPの基礎が身に付いたかチェックするなら

PHP「直す力」養成ドリル
スポンサーリンク