WordPress:プラグイン有効時に追加される各種メニューを非表示にする方法

WordPress:プラグイン有効時に追加される各種メニューを非表示にする方法

WordPressでプラグインをインストール・有効化するとプラグインによってはアドミンバーや管理画面でメニューが追加されますが、それらを非表示にする方法です。
ほとんどのプラグインが管理者以外の権限のときにメニューを非表示にしてくれたりはしますが、非表示にならないものとか管理者権限を与えるけど設定はいじってほしくないのでメニューを非表示にしたいというときなどに使えます。

そんなに頻繁に使うということもないですが、非表示にしたい場合にいちいち消す方法を探してコード追うのが面倒なので、個人的によく利用されていると思うプラグインのメニューの非表示方法をひと通りまとめてみました。

ここでは下記プラグインを有効化しているという想定で、これらのプラグインによって追加されたメニューを非表示にしていきます。

※プラグイン名横にある括弧はテスト時のバージョンになります。

  • Contact Form 7(v4.7)
  • MW WP Form(v3.2.1)
  • All In One SEO Pack(v2.3.12.5)
  • Yoast SEO(v4.7.1)
  • Jetpack by WordPress.com(v4.9)
  • Advanced Custom Fields(v4.4.11)
  • WordPress Popular Posts(v3.3.4)
  • Yet Another Related Posts Plugin(v4.4)
  • Broken Link Checker(v1.11.2)
  • AddQuicktag(v2.5.1)
  • Breadcrumb NavXT(v5.7.0)
  • TinyMCE Advanced(v4.5.6)
  • WP-PageNavi(v2.91)
  • Duplicate Post(v3.2)
  • Table of Contents Plus(v1601)
  • BackWPup(v3.3.7)

アドミンバーのメニューを非表示

functions.php

add_action( 'wp_before_admin_bar_render', 'remove_admin_bar_menu', 999 );
function remove_admin_bar_menu() {
  global $wp_admin_bar;

  // MW WP Form
  $wp_admin_bar->remove_node( 'new-mw-wp-form' );

  // All In One SEO Pack
  $wp_admin_bar->remove_node( 'all-in-one-seo-pack' );

  // Yoast SEO
  $wp_admin_bar->remove_node( 'wpseo-menu' );
}

サイドのメニューを非表示

functions.php

add_action( 'admin_menu', 'remove_admin_menu', 999 );
function remove_admin_menu() {
  global $submenu;

  // MW WP Form
  remove_menu_page( 'edit.php?post_type=mw-wp-form' );

  // Contact Form 7
  remove_menu_page( 'wpcf7' );

  // All In One SEO Pack
  remove_menu_page( 'all-in-one-seo-pack/aioseop_class.php' );
  // All In One SEO Pack (ツール > SEO データインポート)
  remove_submenu_page( 'tools.php', 'aiosp_import' );

  // Yoast SEO
  remove_menu_page( 'wpseo_dashboard' );

  // Jetpack by WordPress.com
  remove_menu_page( 'jetpack' );

  // Advanced Custom Fields
  remove_menu_page( 'edit.php?post_type=acf' );

  // WordPress Popular Posts (設定 > WordPress Popular Posts)
  remove_submenu_page( 'options-general.php', 'wordpress-popular-posts' );

  // Yet Another Related Posts Plugin (設定 > YARPP)
  remove_submenu_page( 'options-general.php', 'yarpp' );

  // Broken Link Checker (ツール > リンクエラー)
  remove_submenu_page( 'tools.php', 'view-broken-links' );
  // Broken Link Checker (設定 > リンクチェッカー)
  remove_submenu_page( 'options-general.php', 'link-checker-settings' );

  // AddQuicktag (設定 > AddQuicktag)
  remove_submenu_page( 'options-general.php', 'addquicktag/inc/class-settings.php' );

  // Breadcrumb NavXT (設定 > Breadcrumb NavXT)
  remove_submenu_page( 'options-general.php', 'breadcrumb-navxt' );

  // TinyMCE Advanced (設定 > TinyMCE Advanced)
  remove_submenu_page( 'options-general.php', 'tinymce-advanced' );

  // WP-PageNavi (設定 > PageNavi)
  remove_submenu_page( 'options-general.php', 'pagenavi' );

  // Duplicate Post (設定 > Duplicate Post)
  remove_submenu_page( 'options-general.php', 'duplicatepost' );

  // Table of Contents Plus (設定 > TOC+)
  remove_submenu_page( 'options-general.php', 'toc' );

  // BackWPup
  remove_menu_page( 'backwpup' );
}

上記をそのまま記述すると権限関係なく全ユーザーの管理画面上でメニューが非表示になってしまうので、すべて表示されていても問題ない特定のユーザーにはこれらを適用したくないというときは、例えばget_current_user_id()を使って特定のID以外に適用といった条件分岐を組み合わせるなどして実装できます。
また、remove_node()remove_menu_page()の引数に指定する値は、大体リンク先に指定されてるURLだとかメニューを表示している要素に指定されているIDやclassを見ると何となくわかったりするんですが、ちゃんと確認したい場合はアドミンバーであればglobal $wp_admin_bar;の下にvar_dump( $wp_admin_bar );を、サイドであればglobal $submenu;の下にvar_dump( $submenu );を記述するなどして確認する方法もあります。

Close the search window,
please press close button or esc key.