【wordpress】「is_single()」と「is_singular()」の条件分岐について
「is_single()」と「is_singular()」の違いについて今までなんとなく認識していたら上手く条件分岐できなかったので調べたときの備忘録
「is_single()」と「is_singular()」について
「is_single()」とは
添付ファイルや固定ページを除く個別の投稿記事(シングルページ)を表示しているかどうかを判別してくれる関数
if( is_single() ) {
// シングルページが表示されてるかチェック
}
あくまでシングルページ(投稿やカスタム投稿)かその他(固定ページ・添付ファイルページ)かどうかを判別するだけで「is_single()」では「投稿」か「カスタム投稿」かは判別できないっぽい
// × 「投稿(post)」かは判別はできない
if( is_single('post') ) {
...
}
// × カスタム投稿「sample」かは判別はできない
if( is_single('sample') ) {
...
}
// ○ 投稿記事のidやスラッグで判別できる
if( is_single('11') ) {
...
}
// ○ 投稿記事のidやスラッグを複数選択
if( is_single( array( 11, 'open', '15' ) ) ) {
...
}
シングルページの詳細情報(idやスラッグ)を使うのが「is_single()」みたいっすね
「is_singular()」とは
個別の投稿記事(シングルページ)・固定ページ・添付ファイルページを表示しているかどうかを判別
と
投稿の記事が「投稿(post)」「カスタム投稿」かどうか判別してくれる
// ○ 「投稿(post)」か判別できる
if( is_singular('post') ) {
...
}
// ○ カスタム投稿「sample」か判別できる
if( is_singular('sample') ) {
...
}
// ○ 複数の投稿タイプで判別できる
if( is_singular( array( 'post', 'sample' ) ) ) {
...
}
記事がどの投稿タイプ(投稿やカスタム投稿)に属するかどうか判別するのが「is_singular()」みたいっす
添付ファイルページはギャラリーの「リンク先」で選択できるやつ(あんま使わないからメモ)
「is_single()」と「is_singular()」はどう使う
なんか調べていると「is_single()」と「is_singular()」はどっちもシングルページ(投稿記事)かどうかは判別してくれているようだけど「is_singular()」は固定ページと添付ファイルページとかも含まれるっぽいので使うときは以下のようにするのがいいっぽい
<?php
if ( is_singular() ){
// 投稿・カスタム投稿・固定ページ・添付ファイルのシングルページに表示する内容
if ( is_single() ){
// 投稿・カスタム投稿のシングルページに表示する内容
if ( is_singular( 'post' ) ){
// 投稿(post)のシングルページに表示する内容
}elseif ( is_singular( 'sample' ) ){
// カスタム投稿「sample」のシングルページに表示する内容
}else{
// その他カスタム投稿のシングルページに表示する内容
}
}elseif ( is_page() ){
// 固定ページのシングルページに表示する内容
}
elseif ( is_attachment() ){
// 添付ファイルのシングルページに表示する内容
}
}
?>
参考
▼is_single()とis_singular()の使い分け
http://do-wp.com/suitable-conditional-tags-is_single-vs-is_singular/
▼is_singleはカスタム投稿タイプの条件分岐には効かない
https://php1st.com/2021
▼is_single()とis_singular()の条件のちょっとした勘違いと、各テンプレート条件を付ける際の個人的な決定版
http://www.cattlemute.com/2018/04/23/851/
一応まとめ
- is_single()
- 投稿・カスタム投稿とかの判別はできないけどシングルページのidやスラッグを指定できる
- is_singular()
- シングルページが投稿・カスタム投稿か判別できる。
添付ファイルページ・固定ページが含まれるので使うときは注意
Codexに書いてあった、しらなかった…(使わないけど)