WordPressプラグイン「Widget Logic」のよく使う条件分岐まとめ
ウィジェットの表示・非表示を自由にカスタマイズできるプラグイン「Widget Logic」の、主要な条件分岐をまとめました。
「is_category」や「is_tag」など、個人的につまずいたポイントの解決策も記載しています。
「Widget Logic」の条件分岐
is_single() | 投稿で表示 |
is_single(1) | 特定の投稿で表示 |
is_single(array(1,2,3)) | 複数の投稿で表示 |
is_page() | 固定ページで表示 |
is_page(1) | 特定の固定ページで表示 |
is_page(array(1,2,3)) | 複数の固定ページで表示 |
in_category(1) | 特定のカテゴリーで表示(スラッグ名でも可) |
in_category(array(1,2,3)) | 複数のカテゴリーで表示(スラッグ名でも可) |
has_tag(1) | 特定のタグで表示(スラッグ名でも可) ※ウィジェットエリアによって表示されたり、されなかったり |
has_tag(array(1,2,3)) | 複数のタグで表示(スラッグ名でも可) ※ウィジェットエリアによって表示されたり、されなかったり |
is_category(1) | 特定のカテゴリー一覧ページで表示(スラッグ名でも可) |
is_category(array(1,2,3)) | 複数のカテゴリー一覧ページで表示(スラッグ名でも可) |
is_tag(1) | 特定のタグ一覧ページで表示(スラッグ名でも可) |
is_tag(array(1,2,3)) | 複数のタグ一覧ページで表示(スラッグ名でも可) |
is_single(array(1,2,3)) || is_page(array(1,2,3)) | 特定の投稿と特定の固定ページで表示 |
in_category(1) && has_tag(1) | 特定のカテゴリーかつ特定のタグで表示 |
is_home() | トップページで表示 |
is_front_page() && !is_paged() | フロントページで表示 |
is_archive() | アーカイブページで表示 |
is_search() | 検索結果ページで表示 |
is_404() | 404ページで表示 |
is_paged() | 2ページ目以降に表示(アーカイブや分割記事) |
wp_is_mobile() | スマホ・タブレットで表示 |
!wp_is_mobile() | PCで表示 |
先頭に「!」を付ければ非表示
is_single(1) | IDが1の投稿ページで表示 |
!is_single(1) | IDが1の投稿ページで非表示 IDが1の投稿ページ以外で表示 |
便利な機能ですが、指定範囲が狭い条件に付与すると、広域に反映されるので注意。デフォルトで表示されているウィジェットを、特定のページに表示させたくない場合によく使用します。
例えば「!is_404()」で、404ページには広告を表示したくない場合など。
「&&」と「||」で条件を絞り込む
★★ && ◆◆ | ★★かつ◆◆の場合に表示 |
★★ || ◆◆ | ★★もしくは◆◆の場合に表示 |
「&&」はより厳しい条件に絞ることができ、「||」はより柔軟な条件に広げることができる。
is_category()とin_category()の違い
カテゴリーで表示・非表示させる場合、「is_category()」だと機能しなかった。プラグイン(Widget Logic)のバグかと思ったけど、PHPの条件分岐には「is」と「in」があったことを思い出して、「in_category() 」で試すと成功。
以下でも解説していますが、「is」と「in」は「どこのページに表示するウィジェットなのか?」で使用シーンが異なり、「is」を使う場合はアーカイブページ、「in」は投稿ページや固定ページとなります。
is_category() とは?
is_category(‘blog’);
タグの種類:条件分岐タグ
戻り値:tureかfalse
機能:表示されている「アーカイブ」が、引数で指定されたカテゴリかどうかチェックする。
この引数のとき、表示されている「アーカイブ」のカテゴリスラッグが「blog」の場合、trueを返す。
「このページはカテゴリ◯◯のアーカイブページですか?」と尋ねたとき、YesかNoかで返答をくれるのが、is_category()。
in_category() とは?
in_category(‘1’);
タグの種類:条件分岐タグ
戻り値:tureかfalse
機能:現在の「投稿(記事)」が、引数で指定されたカテゴリに属しているかどうかをチェックする。
この引数のとき、現在の「投稿(記事)」がカテゴリID「1」に属している場合、trueを返す。
「この記事はカテゴリ◯◯に属していますか?」と尋ねたとき、YesかNoかで返答をくれるのが、in_category()。
is_tag()とhas_tag()の使い分け
上記で説明した「is_category()とin_category()の違い」と同様に、タグ(tag)に関してもちょっと変則的になっている。
カテゴリーの応用で「is_tag()」はタグ一覧ページでの表示の条件分岐ですが、投稿ページや固定ページに表示させる場合は「in_tag()」ではなく「has_tag()」を使う。
ただ、この「has」がちょっと厄介で、ウィジェットエリアによっては制御できなくなる。
ウィジェットのサイドバーで「has_tag()」を使用すると、指定したタグを含むページ以外に、指定したタグ一覧ページ、指定したタグ以外の一覧ページに表示される。また、IDかスラッグかでも表示が異なる。
ただ、ウィジェットエリアが「記事内」であれば、正常に機能する。
おそらく、サイドバーやフッターは共通パーツとして読み込まれ、記事内は投稿ページや固定ページなので特定パーツとして読み込まれている、という違いによるものかと。あとは、使用テーマの影響もあると思われる。
「Widget Options」の利用でもOK
「Widget Logic」はシンプルで余計な機能がなく使いやすいのですが、開発者による更新が数年行われていないし、謎のスペースが入るなどのバグもあります。
ですので、同様のウィジェットの条件分岐が可能な「Widget Options」の利用がおすすめです。
機能が多い点があまり好きではありませんが、視覚的にチェックボックスで設定できる他、「Widget Logic」と同じように条件分岐の記述でも設定可能。