「特定の条件でウィジェットを出したい」
あーそうですねー WordPressの質問でこういうものがありました。
そういうときにいつも紹介しているプラグインはこれです。
Get Better Control over your Widgets. Easily show or hide WordPress widgets on specified pages & devices and/or assign custom alignment.
こちらは、特定のカテゴリーや「トップページだけ」とか「404ページだけ」とか「それ以外」みたいな指定ができるので重宝しています。
とくにカテゴリーを指定して特定のカテゴリーにあった広告を出すっていう感じに使えるので便利なんですよね。
「特定の固定ページでウィジェットを出したい」
…ところが、質問者の方の今回のご要望は「特定のカテゴリー」や「特定の投稿タイプ」といった比較的抽象的なものではなく「特定の固定ページ」という具体的な指定をしたいということでした。
前述のプラグインには「有料版」があり、そちらではもしかしたらできるかもしれないのですが…
今回は他のものを探してみました。
で、見つけたのがこちら
Wiget Logic
Widget Logic lets you control on which pages widgets appear using WP's conditional tags.
こちらのプラグインのページに「例」というのが載っていました。
例
https://ja.wordpress.org/plugins/widget-logic/
is_home() — just the main blog page
!is_page(‘about’) — everywhere EXCEPT this specific WP ‘page’
!is_user_logged_in() — shown when a user is not logged in
is_category(array(5,9,10,11)) — category page of one of the given category IDs
is_single() && in_category(‘baked-goods’) — single post that’s in the category with this slug
current_user_can(‘level_10’) — admin only widget
strpos($_SERVER[‘HTTP_REFERER’], “google.com”)!=false — widget to show when clicked through from a google search
is_category() && in_array($cat, get_term_children( 5, ‘category’)) — category page that’s a descendent of category 5
global $post; return (in_array(77,get_post_ancestors($post))); — WP page that is a child of page 77
global $post; return (is_page(‘home’) || ($post->post_parent==”13″)); — home page OR the page that’s a child of page 13
Note the extra ‘;’ on the end where there is an explicit ‘return’.
要するに PHP で条件分岐を書くように設定できる…ということなんだと理解しました。
実際にやってみた
この記事だけ…に表示するように設定してみました。
プレビューするとURLに p=xxxxx という部分があります。
それが投稿IDです。
この記事の場合 22496 だということがわかりました。
Widget Logic インストール
公式プラグインですので普通に入れてください。
Widget Logic で検索してインストールできました。
「有効化」を忘れずに。
なにを入れるか迷いましたが(笑)
とりあえず 「Twitter タイムライン(Jetpack)」というのを入れてみます。
こんな感じで設定します。
「ウィジェットのロジック」という項目が見えますね。
これに「このページだけ」という条件を入れてみます。
こんな条件を入れました。
今回は「22496」(この記事)だけにしますが、今後「この記事とこの記事」のように複数になることを想定して array で指定しています。
追加例: in_array( get_the_ID(), array( ‘22496’, ‘22497’, ‘22498’ )
条件式は PHPで記述
条件式は functions.php で記述するようにPHPで記述しますが、注意があります。
Note the extra ‘;’ on the end where there is an explicit ‘return’.
https://ja.wordpress.org/plugins/widget-logic/
最後に ‘;’ セミコロンを最後につけないで…とのこと
やるとどうなるかは…やってみてください(笑)※一切責任は負いませんので自己責任でお願いします。
このページの最後に「Twitterでフォロー」が表示されている…はず
関連記事より下に出ているはずなのでよろしければご覧ください。
そして他のページだと出ていないことも確認してみてください。
※今後、さまざまな理由で当該プラグインを外した場合は表示されていないかすべてのページで表示されていることがあるかもしれませんのでご了承ください。
今回紹介したようなプラグインを複数多用するとあとで管理が大変になる恐れがありますので導入はご検討の上でお願いいたします。
…とはいえ
…と紹介した上で、本来なら…というお話しも。
この場合正解は、その表示のためにテンプレートを独自に作るべきと考えます。
この手の対応はどうもページID決まってからだとブサイクだと思ってまして。
まず、設計ありきでページテンプレートを作り、スラッグなどでテンプレート出し分けるようにするようにします。
紹介してるのになんだけど(笑)
各種バージョンアップでプラグインに引っ張られたくないという思いもあります。
制作で気になることは軽々しく質問してください!
気が向いたらちゃんと答えます!