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

WordPressのウィジェット画面を開いたとき

ウィジェット多すぎ…

と思ったことはないでしょうか。

WordPressにプラグインを多数インストールしていたりすると、プラグインの生成するウィジェットもどんどん加算されていくため「ウィジェット画面」は「使用しないウィジェット」で埋め尽くされるなんてことがあります。

例えば、Jetpackプラグインをインストールしている場合は、「Jetpackが作成するウィジェット」だけでも14個もあり、それだけで「ウィジェット画面」のこれだけのエリアを占有してしまいます。

Jetpackが生成するウィジェット

その他にもプラグインを入れていると、

ウィジェットの数が多すぎて、操作性が悪い…

なんてこともあるかと思います。

今回はこの「ウィジェットの数多すぎて操作しづらい問題」を解消する方法の紹介です。

スポンサーリンク
レクタングル(大)広告

主な手順

今回、使用しないウィジェットを非表示にするには、以下の手順が必要です。

  1. ウィジェットのクラス名を取得
  2. 取得したクラス名からウィジェットを解除

ウィジェットを非表示(登録解除)させるには、ウィジェットのクラス名が必要になります。

そのために、ウィジェットクラス名を取得し、そのクラス名を元にウィジェット登録を解除するコードを書いて非表示にします。

    ウィジェットのクラス名を取得

    まずは、ウィジェットを非表示にするために必要な「ウィジェットのクラス名」を取得します。

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

    //フッター部分に現在利用しているウィジェットのクラス名を出力
    add_action( 'wp_footer', function(){
      if ( empty ( $GLOBALS['wp_widget_factory'] ) )
          return;
    
      $widgets = array_keys( $GLOBALS['wp_widget_factory']->widgets );
      print '<pre>$widgets = ' . esc_html( var_export( $widgets, TRUE ) ) . '</pre>';
    });
    本番環境で上記コードを実行すると、出力が公開ページにも出てしまいます。なので、ローカル環境で実行することをおすすめします。

    すると、サイトフッター部分に以下のような「現在使用中のウィジェットクラス名」が表示されます。

    $widgets = array (
      0 => 'WP_Widget_Pages',
      1 => 'WP_Widget_Calendar',
      2 => 'WP_Widget_Archives',
      3 => 'WP_Widget_Media_Audio',
      4 => 'WP_Widget_Media_Image',
      5 => 'WP_Widget_Media_Gallery',
      6 => 'WP_Widget_Media_Video',
      7 => 'WP_Widget_Meta',
      8 => 'WP_Widget_Search',
      9 => 'WP_Widget_Text',
      10 => 'WP_Widget_Categories',
      11 => 'WP_Widget_Recent_Posts',
      12 => 'WP_Widget_Recent_Comments',
      13 => 'WP_Widget_RSS',
      14 => 'WP_Widget_Tag_Cloud',
      15 => 'WP_Nav_Menu_Widget',
      16 => 'WP_Widget_Custom_HTML',
    )

    ウィジェットのクラス名は英語でありますが、大体意味はわかると思うので、非表示にすべきクラス名をメモっておきます。

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

    参考 Get a list of all Widgets registered in WordPress admin widgets-area – WordPress Development Stack Exchange

    取得したクラス名からウィジェットを解除

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

    add_action('widgets_init', 'my_widgets_init_cotrol', 11);
    function my_widgets_init_cotrol() {
      unregister_widget('WP_Widget_Pages');//固定ページ
      unregister_widget('WP_Widget_Calendar');//カレンダー
      unregister_widget('WP_Widget_Archives');//アーカイブ
      unregister_widget('WP_Widget_Media_Audio');//音声
      unregister_widget('WP_Widget_Media_Image');//画像
      unregister_widget('WP_Widget_Media_Gallery');//ギャラリー
      unregister_widget('WP_Widget_Media_Video');//動画
      unregister_widget('WP_Widget_Meta');//メタ情報
      unregister_widget('WP_Widget_Search');//検索
      unregister_widget('WP_Widget_Text');//テキスト
      unregister_widget('WP_Widget_Categories');//カテゴリー
      unregister_widget('WP_Widget_Recent_Posts');//最近の投稿
      unregister_widget('WP_Widget_Recent_Comments');//最近のコメント
      unregister_widget('WP_Widget_RSS');//RSS
      unregister_widget('WP_Widget_Tag_Cloud');//タグクラウド
      unregister_widget('WP_Nav_Menu_Widget');//ナビゲーションメニュー
      unregister_widget('WP_Widget_Custom_HTML');//カスタムHTML
    }

    上記は、デフォルトウィジェット全て(WordPress5.0時点)を解除するコードを書きました。

    上記コードから、必要なものだけ実行すると良いでしょう。

    また、「デフォルトウィジェット」以外に「プラグインで追加されたウィジェット」も「クラス名」さえわかれば非表示(登録解除)することも可能です。

    widgets_initフックの優先度は、10より多くしておくことをおすすめします。でないと、上記コード出現以降に「ウィジェット登録コード」が書かれていた場合は、そちらが優先されて表示されてしまいます。

    動作確認

    とりあえず、以下のように全てのウィジェットを非表示にすることも可能です。

    すべてのウィジェットを非表示にした状態

    不要なものを非表示にするだけでも、ウィジェット画面がかなりスッキリします。

    まとめ

    プラグインをインストールすればするほど、不要なウィジェットは増えていき「ウィジェット管理画面」での操作性はどんどん損なわれてきます。

    ウィジェットの数が多すぎると「ええっと、設定するウィジェットはどれだっけ…?」と考える時間も増えます。

    加えて、設定するウィジェットが決まっても、D&Dで移動する距離も長くなり、移動時間もかかります(※D&D操作の場合)。

    今回のカスタマイズを行うことで、不要なウィジェットの整理整頓ができます。

    ウィジェット管理画面で「使用するウィジェットのみ」表示させて、設定画面の利便性を上げることにより、サイトも管理しやすくなるかと思います。

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

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