icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【WordPress条件分岐】is_singleとis_singularって違うの?→idやスラッグ指定、投稿タイプ指定の面で違いが

更新: 2024/02/11 2563文字

【WordPress条件分岐】is_singleとis_singularって違うの?

今回は、WPの条件分岐などに使うファンクションで、名前が超似ているものを取り上げます(is_singleとis_singular)。これも、『名前が似ててややこしいけど挙動が違うというパターン』です。以前もこのサイトに書いた『is_home()とis_front_page()は挙動が違う』みたいなものです。さっそく、確認してみましょう。

is_singleはどのように使う?活用方法は?

通常は、個別の投稿記事を判定するのにつかう

管理人は『is_page()』を使うことが多いんですけど、この機会に『is_single()』も挙動をまとめておきたいと思います。通常はこんな感じで、条件分岐に使います。『:>』で終わっているのは『phpのコロン構文』で、間にhtmlやテキスト書くときは便利です。『echo 引用符 文字列 引用符 文字列結合演算子 出力したい変数 ;』みたいに書かなくて良いからです。 試しにこのサイトのフッターに出力させてみます。

『トップページ・カテゴリ/タグのアーカイブ・固定ページ』では表示しないけど『個別の投稿ページ』で表示させることができます。このような感じで条件分岐させるときに使われます。

このほか、『mp3など添付ファイルのページ』でも条件判定がtrueになるので、細かく制御したい場合は、添付ファイルページ判定の『is_attachment』を組み合わせましょう。

投稿idを指定して、個別に出力させることも可能

is_single()のカッコの中には、パラメーターを指定することができます(配列arrayにして複数入れるのもok)。使用頻度が高そうなものは、『記事のid番号を指定して条件分岐』でしょうか。例えば、こんなふうに『id1番』を指定すると・・・

『id1番記事のときだけ表示』ができます。特定の記事だけ広告やスクリプト出力みたいな用途には便利です。カテゴリで一括指定のときは『in_category』を使いましょう。

スラッグ・タイトルでも指定できる

そのほか、スラッグでも指定できます。引用符でくくってスラッグを記載。

ただし、『id違いで同じスラッグの記事が複数ある場合』は、そのすべてに出てしまうので、個別にやりたいときはid指定がよいでしょう。

is_singleでは、カスタム投稿タイプなど、投稿タイプの指定は不可能

ちょっと他のテストもしてみましょうか。どっかで見た『投稿タイプ』の指定。以前このサイトに『wp-webという別の投稿タイプ』を作っておいたので、それを使ってみます。

そして、is_single()のカッコの中に投稿タイプwp-webを指定してみます。

これは出ません(id/スラッグで判定すれば、この記事に適応させることはできます)。 投稿タイプごとの切り替えができると、『プラグインCustom Post Type UI(カスタム投稿タイプを設定するプラグイン)』などを使っている場合有効ですが、方法はないのでしょうか。

is_singularも似た挙動だが、『投稿タイプ指定』ができるという点はポイント

通常は、個別投稿・固定ページ・添付で判定

次は『is_singular』の挙動をチェックしてみます。

codexでしらべたところ、is_singularがtrueになる条件として『is_single()、is_page()、is_attachment()のいずれかがtrue』というのがあるそうです。このように『個別投稿・固定ページ・添付ファイルのページ』でtrueとなり、表示されます。この用途ならあまり使わないでしょう(笑)

カスタム投稿タイプのスラッグ指定して判定できた

次は『is_singular()』のカッコ内に、パラメーターとして『カスタム投稿タイプ』を指定してみます。先ほど使ったカスタム投稿『wp-web』のスラッグを記載。

投稿タイプによる判定ができました。タイプごとに表示を切り替えたいときはコレを使っても良さそうです。 なお、投稿タイプ指定ということで、固定ページ判定に『is_singular(‘page’)』と書いてもよいのですが、すでにWPには『is_page』で固定ページを判定するファンクションがあるので、カスタム投稿専用に使っていく感じになりそうです。

また、『is_singular()』のカッコ内に『1』と書いても、id1番の記事で判定されるわけではありません(スラッグも同様)ので、一応すみわけはできています。

参考リンク(WordPress codex日本語版)

あとがき・まとめ

  • WordPressの組み込み関数is_singleとis_singularは似ているが、挙動が異なる
  • is_singleはidやスラッグなども指定できるが、カスタム投稿名では判定できない
  • is_singularはidやスラッグなど指定できないが、カスタム投稿を指定できる

名前や機能は似ていましたが、カスタム投稿・id・スラッグに関わる面では挙動が異なる点が確認できたかと思います。Custom Post Type UIやショッピングカート系・機能追加されているテーマで別のカスタム投稿タイプが入ってくることはあるので、そういうときの条件分岐の一案として押さえておくとよいでしょう。


【カテゴリ】- WordPressファンクションetc
【タグ】- ,

関連記事