WordPressの使用しないウィジェットエリアを非表示にするカスタマイズ方法

最近は、WordPressのウィジェットエリアが数多くWordPressテーマも結構あります。

かくいう自作のWordPressテーマCocoonも25ヶ所あります。

Cocoonのウィジェットエリアは25ヶ所

正直、ここまで必要ない部分もあるかもしれません。けれど、ある程度目的の場所に手軽にアイテムを挿入するには、ウィジェットで手軽に挿入できた方が楽なので、このような仕様になっています。

少なくとも、初心者の方がテンプレート編集をするよりは安全に変更できるようにはなっていると思います。

ただ、「使わないウィジェットエリア」は不要な人には不要だと思います。数があるとそれだけ設定変更時に迷う可能性も高いわけで。

ということで、以下では「WordPressテーマ等が設定しているウィジェットエリアの表示/非表示を切り替える方法」を紹介したいと思います。

Cocoonの場合は、テーマ設定からチェックボックスを選択するだけで切り替えができるようになっているので、このカスタマイズは不要です。Simplicity等、他テーマでウィジェットエリアの表示切り替えをしたい場合等にご利用ください。
スポンサーリンク
レクタングル(大)広告

主な手順

ウィジェットエリアの表示切り替えを行うには、以下の手順を行います。

  1. ウィジェットエリアのIDを取得する
  2. 取得したIDでウィジェットエリアの登録解除を行う

まずは、ちょっとしたコードをfunctions.phpに貼り付けて、ウィジェットエリアのIDを取得します。

その取得したIDを元に、ウィジェットエリアの登録解除を行うだけです。

ウィジェットエリアのIDを取得する

まずは、ウィジェットエリアを非表示にするために必要な「ウィジェットエリアID」を取得します。

IDを取得するには、functions.phpに以下のように書いて、トップページを一旦読み込んで「現在利用しているウィジェット情報」を取得します。

//フッター部分に現在利用しているウィジェットエリアのIDを出力
add_action( 'wp_footer', function(){
  if ( empty ( $GLOBALS['wp_registered_sidebars'] ) )
      return;

  $widget_areas = array_keys($GLOBALS['wp_registered_sidebars']);
  print '<pre>$widget_areas = ' . esc_html( var_export( $widget_areas, TRUE ) ) . '</pre>';
});
本番環境で上記コードを実行すると、出力が公開ページにも出てしまいます。なので、ローカル環境で実行することをおすすめします。

すると、テーマフッター部分に以下のように「現在使用中のウィジェットエリアID」が表示されます。

$widget_areas = array (
  0 => 'sidebar',
  1 => 'sidebar-scroll',
  2 => 'main-scroll',
  3 => 'above-single-content-title',
  4 => 'below-single-content-title',
  5 => 'single-content-top',
  6 => 'single-content-middle',
  7 => 'single-content-bottom',
  8 => 'above-single-sns-buttons',
  9 => 'below-single-sns-buttons',
  10 => 'below-single-related-entries',
  11 => 'below-single-comment-form',
  12 => 'page-content-top',
  13 => 'page-content-middle',
  14 => 'page-content-bottom',
  15 => 'above-page-sns-buttons',
  16 => 'below-page-sns-buttons',
  17 => 'index-top',
  18 => 'index-middle',
  19 => 'index-bottom',
  20 => 'footer-left',
  21 => 'footer-center',
  22 => 'footer-right',
  23 => 'footer-mobile',
  24 => '404-page',
)

このウィジェットエリアIDは、ウィジェットエリアを識別するためのものなので、大抵のテーマであればある程度分かりやすい名前が付けられていると思います。

このIDから、不要なものと思われるものをメモっておきます。

メモが済んだら、functions.phpの記述は削除してください。

取得したIDでウィジェットエリアの登録解除を行う

あとは、widgets_initフックから以下のようにunregister_sidebarを用いて、ウィジェットエリア登録を解除するだけです。

add_action('widgets_init', 'my_widget_areas_init_cotrol', 11);
function my_widget_areas_init_cotrol() {
  unregister_sidebar('sidebar');
  unregister_sidebar('sidebar-scroll');
  unregister_sidebar('main-scroll');
  unregister_sidebar('above-single-content-title');
  unregister_sidebar('below-single-content-title');
  unregister_sidebar('single-content-top');
  unregister_sidebar('single-content-middle');
  unregister_sidebar('single-content-bottom');
  unregister_sidebar('above-single-sns-buttons');
  unregister_sidebar('below-single-sns-buttons');
  unregister_sidebar('below-single-related-entries');
  unregister_sidebar('below-single-comment-form');
  unregister_sidebar('page-content-top');
  unregister_sidebar('page-content-middle');
  unregister_sidebar('page-content-bottom');
  unregister_sidebar('above-page-sns-buttons');
  unregister_sidebar('below-page-sns-buttons');
  unregister_sidebar('index-top');
  unregister_sidebar('index-middle');
  unregister_sidebar('index-bottom');
  unregister_sidebar('footer-left');
  unregister_sidebar('footer-center');
  unregister_sidebar('footer-right');
  unregister_sidebar('footer-mobile');
  unregister_sidebar('404-page');
}

前項目で出力した「ウィジェットエリアID」を非表示にしたいものだけunregister_sidebarしてください。

ここでのポイントは、widgets_initフックの優先度を11としている所です。デフォルトの優先度10(未記入)のままだと、親テーマでウィジェットエリア登録があった場合、それが表示されてしまいます。

優先度を下げて、親テーマの処理より後に解除処理を行うことによって、親テーマ側でのウィジェットエリア登録を打ち消します。

動作確認

すべてのウィジェットエリアを非表示にすることも可能です。

実際に行ってみると、本来ウィジェットエリアがある場所に全くウィジェットエリアが表示されていないようにもできます。

ウィジェットエリアをすべて非表示にした場合

実際は、不要なウィジェットエリアのみ削除してみてください。

まとめ

仕事の作業台は、不要な物が散乱しているよりも、必要な物だけあるほうが作業はしやすいと思います。

とりあえず、今回の方法でウィジェットエリアの整理整頓はできるので、

ウィジェットエリアが多くて使いづらいな…

なんて普段から思っている場合は、この機会に不要なものを整理してみるのも良いかもしれません。

ウィジェット自体の表示切り替え方法はこちら。

WordPressのウィジェット画面を開いたとき ウィジェット多すぎ… と思ったことはないでしょうか。 WordPress...