WordPressのツールバー(管理メニューバー)の項目をカスタマイズする方法

管理人の備忘録として、WordPressのカスタマイズ方法を連載します。今回は、WordPressログイン中に上部に表示されるツールバー(管理メニューバー)のカスタマイズ方法です。

ソニートニュースは複数人で運営するブログメディアですが、ある時とても危険なものを発見しました。それが「コメント」の表示。

ただコメントが表示されるだけなら問題ありませんが、コメントをした人のIPアドレスや登録ユーザーの場合にはメールアドレスまで表示されてしまい、それを全登録ユーザーが見られるようになっていました。

WordPressは歴史のある良く出来たCMSですが、先日の簡単にハッキング可能なバグしかり、結構抜けたところがあります。

登録ユーザーからコメントを隠すために、まずログイン中に上部に表示されるツールバーからコメントを非表示にしました。

ツールバーから項目を削除する(非表示にする)には、wp-content/themes/使用中のテーマのフォルダ/functions.phpに以下のコードを追加することで実現出来ます。

function remove_bar_menus( $wp_admin_bar ) {
    $wp_admin_bar->remove_menu( 'wp-logo' );      // ロゴ
    $wp_admin_bar->remove_menu( 'site-name' );    // サイト名
    $wp_admin_bar->remove_menu( 'view-site' );    // サイト名 -> サイトを表示
    $wp_admin_bar->remove_menu( 'dashboard' );    // サイト名 -> ダッシュボード (公開側)
    $wp_admin_bar->remove_menu( 'themes' );       // サイト名 -> テーマ (公開側)
    $wp_admin_bar->remove_menu( 'customize' );    // サイト名 -> カスタマイズ (公開側)
    $wp_admin_bar->remove_menu( 'comments' );     // コメント
    $wp_admin_bar->remove_menu( 'updates' );      // 更新
    $wp_admin_bar->remove_menu( 'view' );         // 投稿を表示
    $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( 'my-account' );   // マイアカウント
    $wp_admin_bar->remove_menu( 'user-info' );    // マイアカウント -> プロフィール
    $wp_admin_bar->remove_menu( 'edit-profile' ); // マイアカウント -> プロフィール編集
    $wp_admin_bar->remove_menu( 'logout' );       // マイアカウント -> ログアウト
    $wp_admin_bar->remove_menu( 'search' );       // 検索 (公開側)
}
add_action('admin_bar_menu', 'remove_bar_menus', 201);

ツールバーにそれ程色々な機能を持たせる必要はないので、サイト表示(管理画面からサイトに移動)とサイトからダッシュボードに移動、マイアカウント関連だけ残して非表示にしました。

独自メニューを追加するのは結構面倒で、以下のコードを使用します。

 function customize_admin_bar_menu($wp_admin_bar){
  //バーにメニューを追加
  $title = sprintf(
      '<span class="ab-label">%s</span>',
      'オプション'//親メニューラベル
  );
  $wp_admin_bar->add_menu(array(
      'id'    => 'dashboard_menu',
      'meta'  => array(),
      'title' => $title
  ));
  //サブメニューを追加
  $wp_admin_bar->add_menu(array(
      'parent' => 'dashboard_menu', // 親メニューID
      'id'     => 'dashboard_menu-forum', // 子メニューID
      'meta'   => array(),
      'title'  => 'フォーラム', // ラベル
      'href'   => 'https://www.2ch.work/topic/001' // ページURL
  ));
  $wp_admin_bar->add_menu(array(
      'parent' => 'dashboard_menu', // 親メニューID
      'id'     => 'dashboard_menu-help', // 子メニューID
      'meta'   => array(),
      'title'  => 'ヘルプ', // ラベル
      'href'   => 'https://www.2ch.work/help' // ページURL
  ));
}
add_action('admin_bar_menu', 'customize_admin_bar_menu', 9999);

上記はツールバーに「フォーラム」と「ヘルプ」へのリンクを追加するコードです。

親メニューというのはバーに表示される名前。子メニューというのがリンクです。

WordPressは元々一人でブログを運営するためのCMSなので、例えばコーポレートサイトを作ったり、会員制のサイトを構築するためには、色々なプラグインを併用しカスタマイズを施す必要があるようです。