【WordPress】ユーザーごとのカスタムダッシュボードを作る方法

【WordPress】ユーザーごとのカスタムダッシュボードを作る方法 WordPress

WordPressではログインユーザーに対して管理画面(ダッシュボード)を自由にカスタマイズできます。特定の権限を持つユーザーごとに表示内容を切り替えることで、編集者・寄稿者・管理者それぞれに最適な操作環境を提供できます。この記事では、ユーザー権限やユーザーIDに応じてダッシュボードの表示内容を切り替える方法を紹介します。

スポンサーリンク

標準のWelcome Panelを非表示にする

WordPressの管理画面トップには標準で「ようこそ」パネル(Welcome Panel)が表示されます。これを非表示にするには、専用のアクションフックを使います。

functions.php:Welcome Panelの非表示化
// 標準の「ようこそ」パネルを非表示にする
remove_action('welcome_panel', 'wp_welcome_panel');
wp_clear_scheduled_hook()ではWelcome Panelは消せない
wp_clear_scheduled_hook()はWP-Cronの**スケジュール済みイベント**を解除するための関数で、Welcome Panelとは無関係です。’welcome_panel’という名前のCronイベントは存在しないため、この関数を呼んでも何も起こりません。Welcome Panelはwelcome_panelという名前のアクションフックとして実装されているため、remove_action('welcome_panel', 'wp_welcome_panel')で正しく非表示にできます。

ダッシュボードウィジェットをカスタマイズする

WordPressの管理画面トップに表示されるウィジェットは、wp_dashboard_setupアクションを使ってカスタマイズできます。以下の例では、ユーザー権限に応じて異なるウィジェットを表示し、さらに特定のユーザーIDにだけ専用ウィジェットを追加しています。

functions.php:権限・ユーザーID別のウィジェット表示
function custom_dashboard_widgets() {
  global $wp_meta_boxes;

  // すべてのウィジェットを一度削除
  unset($wp_meta_boxes['dashboard']['normal']['core']);
  unset($wp_meta_boxes['dashboard']['side']['core']);

  $current_user = wp_get_current_user();

  if (current_user_can('manage_options')) {
    wp_add_dashboard_widget('admin_dashboard_widget', '管理者向け情報', function () {
      echo '<p>ようこそ管理者様!システム設定はこちらから行えます。</p>';
    });
  } elseif (current_user_can('edit_others_posts')) {
    wp_add_dashboard_widget('editor_dashboard_widget', '編集者用パネル', function () {
      echo '<p>新しい投稿を作成するには左メニューの「投稿」へ進んでください。</p>';
    });
  } else {
    wp_add_dashboard_widget('general_user_widget', 'ようこそ', function () {
      echo '<p>ご利用いただきありがとうございます。</p>';
    });
  }

  // 特定のユーザーID(たとえば社内メンバーやクライアント担当者など)ごとに専用ウィジェットを追加
  if ($current_user->ID === 5) {
    wp_add_dashboard_widget('user5_widget', '担当者A向けメッセージ', function () {
      echo '<p>現在のキャンペーンページの更新期限は○月○日です。</p>';
    });
  }
}
add_action('wp_dashboard_setup', 'custom_dashboard_widgets');

ロールの判定にはin_array('administrator', $current_user->roles)のようなロール名の直接比較ではなく、current_user_can('manage_options')のような権限(capability)ベースの判定を使うのがおすすめです。カスタムロールを追加した場合でも、権限さえ揃っていれば正しく判定できます。

CSSでダッシュボードをさらに調整する

不要な項目をCSSで非表示にすることも可能です。以下のコードは管理画面にCSSを追加する例です。

functions.php:不要な項目をCSSで非表示
function custom_dashboard_css() {
  echo '<style>
    #dashboard_right_now, .update-nag {
      display: none;
    }
  </style>';
}
add_action('admin_head', 'custom_dashboard_css');

関連記事

よくある質問(FAQ)

QWordPressのダッシュボードに独自ウィジェットを追加するには?
Awp_add_dashboard_widgetでダッシュボードウィジェットを登録します。wp_add_dashboard_widget(‘widget_id’, ‘タイトル’, ‘callback’)の形で実装し、コールバックでHTMLを出力します。
Qロールごとに異なるダッシュボードウィジェットを表示するには?
Awp_add_dashboard_widgetをcurrent_user_can()の条件と組み合わせます。また不要なデフォルトウィジェットは$wp_meta_boxesの直接操作またはremove_meta_box()で削除してロールに応じた最適化されたダッシュボードを作れます。
Qダッシュボードウィジェットに動的なデータ(最近の活動・売上等)を表示するには?
Aコールバック関数内でWP_QueryやwpdbのSQLでデータを取得し、HTMLとして出力します。定期的な更新が必要な場合はTransients APIでキャッシュして、数分おきに最新データに更新する実装が効率的です。

まとめ

ユーザーごとにカスタマイズされたダッシュボードを提供することで、操作性の向上だけでなく、管理ミスや混乱の防止にもつながります。企業サイトやメディアサイトなど、多人数運営を行うWordPressサイトでは非常に有効なカスタマイズです。必要に応じて、ウィジェットだけでなくメニューや権限設定も連携させると、さらに使いやすい管理環境が整います。