特定のウィジェットを非表示にするコード【ワードプレス】
ワードプレスでとっても便利なウィジェットですが、特定の条件で特定のウィジェットだけを非表示にしたいという事はないでしょうか。私は結構あります。
モバイル端末で見た時だけ非表示とか、トップページだけ非表示なんてケースです。CSSで消してしまう事も可能ですが、最初から表示しなければソースコードも綺麗ですよね。SEO的にも、HTMLで表示しておいてCSSで消すというのは、なんとなくブラックな感じで嫌です。広告コードなどの外部リソースを使用している場合は、そのサービスのポリシーに抵触してしまう事もあるかもしれません。
という事で、今回は特定の条件で特定のウィジェットだけを非表示にするコードを紹介します。
~ 目次 ~
特定のウィジェットを非表示にするコード
モバイル端末で見た時だけ、ウィジェットIDが「custom_html-10」のカスタムHTMLウィジェットを消す例です。5行目のifで、消したいウィジェットのIDを指定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function remove_specific_widget($sidebars_widgets){ if(!is_admin() && wp_is_mobile()){ foreach($sidebars_widgets as $widget_area => $widget_list){ foreach($widget_list as $pos => $widget_id){ if($widget_id=='custom_html-10'){ unset($sidebars_widgets[$widget_area][$pos]); } } } } return $sidebars_widgets; } add_filter('sidebars_widgets','remove_specific_widget'); |
ウィジェットIDがわからないという場合はこちらのページもご覧下さい。
コードの解説
sidebars_widgetsフィルターフックはウィジェットの全リストを編集できるフックです。
各ウィジェットエリアと、その中に配置されたウィジェットをforeachでループさせて、ウィジェットIDが一致した場合だけunset関数でリストから削除します。そして最後に、不要なウィジェットを取り除いたリストを元に戻しています。
!is_admin()
利用しているsidebars_widgetsフィルターフックは、ワードプレス管理画面の「ウィジェット」を表示する際にも通ります。上のような、ページを限定しない条件分岐で使用する場合は、!is_admin()を使って管理画面を除外しておきましょう。除外しない場合「ウィジェット」画面を開くたびに「使用停止中のウィジェット」に変更されてしまい、ウィジェットが無効になってしまいます。
最後に
ウィジェットが自由に操作できると、ワードプレスのカスタマイズの幅が広がりますね。
テーマによっては、サイドバーの他にフッター等にもウィジェットエリアがある場合があります。こういったサイドバー以外に配置されたウィジェットも、このコードで操作できます。
ワードプレスにおける「sidebar」はウィジェットの配置エリアと考えると理解しやすいかもしれません。
参考サイト
以下のサイトの記事が参考になりました。英語ですが気になる方はどうぞ。
3 Ways To Remove Sidebar Widgets