[WordPress] 管理バーの不要な項目を削除する

環境

  • WordPress 3.4.1

元々の追加処理

wp-includes/class-wp-admin-bar.phpで定義されている、WP_Admin_Barクラスのadd_menuメソッドを使って項目が追加されています。デフォルトでどのような項目が追加されているかは、wp-includes/admin-bar.phpを見ると分かります。例えば、管理バーの一番左に表示されている W のロゴは admin-bar.php の 75 ~ 82 行目で追加されています。

$wp_admin_bar->add_menu( array(
	'id'    => 'wp-logo',
	'title' => '<span class="ab-icon"></span>',
	'href'  => self_admin_url( 'about.php' ),
	'meta'  => array(
		'title' => __('About WordPress'),
	),
) );

これと同じような書き方で、他の項目も追加されています。もし、オリジナルの項目を追加したい場合は、同じように書くことで追加できます。

項目の削除

WP_Admin_Barクラスのremove_menuメソッドを使います。remove_menu 自体は中で remove_node メソッドを読んでいるだけなので、直接 remove_node を使ってもいいのですが、追加には add_menu が使われているのでそれに合わせておきます。

アクションフック

管理バーの表示前にあるadmin_bar_menuというアクションフックを使います。これは以下のように書かれています。wp-includes/admin-bar.php の 58 行目

do_action_ref_array( 'admin_bar_menu', array( &$wp_admin_bar ) );

引数として WP_Admin_Bar クラスのオブジェクトが受け取れるので、受け取ったオブジェクトから remove_menu メソッドが使えます。

全部消してみる

remove_menuには引数として消したい項目の id を渡すことで消せるようになっています。例えば W ロゴの id は wp-admin-bar-wp-logo です。しかし wp-admin-bar- の部分は共通で付加されるものなので指定するのは wp-logo の部分のみになります。では、wp-logo 含め、全部の項目を消してみます。

function remove_bar_menus( $wp_admin_bar ) {
	$wp_admin_bar->remove_menu('wp-logo'); // W ロゴ
	$wp_admin_bar->remove_menu('site-name'); // サイト名
	$wp_admin_bar->remove_menu('view-site'); // サイト名 -> サイトを表示
	$wp_admin_bar->remove_menu('comments'); // コメント
	$wp_admin_bar->remove_menu('new-content'); // 新規
	$wp_admin_bar->remove_menu('new-post'); // 新規 -> 投稿
	$wp_admin_bar->remove_menu('new-media'); // 新規 -> メディア
	$wp_admin_bar->remove_menu('new-link'); // 新規 -> リンク
	$wp_admin_bar->remove_menu('new-page'); // 新規 -> 固定ページ
	$wp_admin_bar->remove_menu('new-user'); // 新規 -> ユーザー
	$wp_admin_bar->remove_menu('updates'); // 更新
	$wp_admin_bar->remove_menu('my-account'); // マイアカウント
	$wp_admin_bar->remove_menu('user-info'); // マイアカウント -> プロフィール
	$wp_admin_bar->remove_menu('edit-profile'); // マイアカウント -> プロフィール編集
	$wp_admin_bar->remove_menu('logout'); // マイアカウント -> ログアウト
}
add_action('admin_bar_menu', 'remove_bar_menus', 201);

削除前

削除後

参考

Trackbacks & Pingbacks

Comments

  • 名無しの通りすがり
    2012.11.17  00:19:02
    Reply

    私自身、今現在、ワードプレスでポータルサイトを構築中なのですが、
    寄稿者ユーザーのAdminバーの不要な部分を削除したいと思っています。
    コードを書けない者なので、上記の内容を理解するのが難しくコメントさせていただきました。

    具体的には、今、Adminバーには4つのボタン(Wロゴ、サイトへのリンク、コメント、新規)がありますが、サイトへのリンクボタン以外をすべて削除したいと思っています。

    どのようなコードをどのファイルに書き込めばよろしいでしょうか。
    お手数ですが、ご教示いただけますと幸いです。

    • Noiretaya
      2012.11.18  17:26:46

      記事内のコードに寄稿者のみという条件を加えてやるといいかと思います。試してはないですが、以下のような感じでいけるんじゃないでしょうか。

      // 記事内の remove_bar_menus のやつを全部コピー
      function remove_bar_menus( $wp_admin_bar ) {
      	// 「サイト名」「サイトを表示」の 2 行を削除
      	// 略
      }
      
      // ユーザーが寄稿者か判定
      if (current_user_can('Contributor')) {
      	add_action('admin_bar_menu', 'remove_bar_menus', 201);
      }
      
  • さわみ
    2012.12.06  18:13:45
    Reply

    すごく助かりました!
    ありがとうございます!

    ズバリ探していたネタでした。
    感謝しております!

    • Noiretaya
      2012.12.07  08:50:02

      お役に立ったようで何よりです。

Name
Mail(任意) 公開されません
Web Site(任意)
Comment

日本語が含まれない投稿は無視されますのでご注意ください