2026年5月20日
2026年5月20日
WordPressのダッシュボードウィジェットを追加する方法
はじめに
WordPressの管理画面ダッシュボードにはデフォルトでいくつかのウィジェットが表示されます。クライアント向けに重要な情報をダッシュボードに表示したり、不要なウィジェットを非表示にする方法を解説します。
解決手順
ステップ1:カスタムダッシュボードウィジェットを追加する
// functions.php
add_action('wp_dashboard_setup', function() {
wp_add_dashboard_widget(
'my_custom_widget', // ウィジェットID(一意)
'サイト統計', // ウィジェットのタイトル
'render_my_dashboard_widget' // コールバック関数
);
});
function render_my_dashboard_widget(): void {
$post_count = wp_count_posts('post')->publish;
$comment_count = wp_count_comments()->approved;
$user_count = count_users()['total_users'];
?>
<ul>
<li>公開済み記事数:<strong><?php echo (int)$post_count; ?></strong> 件</li>
<li>承認済みコメント:<strong><?php echo (int)$comment_count; ?></strong> 件</li>
<li>登録ユーザー数:<strong><?php echo (int)$user_count; ?></strong> 名</li>
</ul>
<?php
}
ステップ2:特定ロールのみに表示するウィジェットを追加する
add_action('wp_dashboard_setup', function() {
// 管理者のみ表示
if (current_user_can('manage_options')) {
wp_add_dashboard_widget('admin_only_widget', '管理者情報', function() {
$memory = size_format(memory_get_usage());
$db_ver = $GLOBALS['wpdb']->db_version();
echo "<p>PHPメモリ使用量: <strong>{$memory}</strong></p>";
echo "<p>MySQLバージョン: <strong>{$db_ver}</strong></p>";
echo '<p><a href="' . esc_url(admin_url('site-health.php')) . '">サイトヘルスを確認</a></p>';
});
}
// 編集者以上に表示
if (current_user_can('edit_others_posts')) {
wp_add_dashboard_widget('editor_widget', '下書き記事', function() {
$drafts = get_posts(['post_status' => 'draft', 'posts_per_page' => 5]);
if (!$drafts) { echo '<p>下書きはありません。</p>'; return; }
echo '<ul>';
foreach ($drafts as $post) {
printf('<li><a href="%s">%s</a></li>', esc_url(get_edit_post_link($post->ID)), esc_html($post->post_title));
}
echo '</ul>';
});
}
});
ステップ3:デフォルトウィジェットを削除する
add_action('wp_dashboard_setup', function() {
// WordPressニュースを削除
remove_meta_box('dashboard_primary', 'dashboard', 'side');
// クイックドラフトを削除
remove_meta_box('dashboard_quick_press', 'dashboard', 'side');
// アクティビティを削除
remove_meta_box('dashboard_activity', 'dashboard', 'normal');
// WordPressへようこそを削除
remove_action('welcome_panel', 'wp_welcome_panel');
});
ステップ4:ウィジェットにコントロール(設定フォーム)を追加する
add_action('wp_dashboard_setup', function() {
wp_add_dashboard_widget(
'my_configurable_widget',
'お知らせ',
'render_notice_widget',
'render_notice_widget_control' // コントロールコールバック
);
});
function render_notice_widget_control(): void {
if (isset($_POST['notice_text'])) {
update_option('dashboard_notice_text', sanitize_textarea_field($_POST['notice_text']));
}
$text = get_option('dashboard_notice_text', '');
?>
<p><label>お知らせ内容</label></p>
<p><textarea name="notice_text" rows="3" style="width:100%"><?php echo esc_textarea($text); ?></textarea></p>
<?php
}
function render_notice_widget(): void {
$text = get_option('dashboard_notice_text', 'お知らせを入力してください。');
echo '<p>' . esc_html($text) . '</p>';
}
注意事項
wp_add_dashboard_widgetはwp_dashboard_setupアクション内で呼び出してください- ウィジェット内で外部APIを呼び出す場合はキャッシュ(
get_transient/set_transient)を使い、ページロードのたびにリクエストしないようにしてください remove_meta_boxのコンテキスト引数('side'や'normal')はウィジェットごとに異なります
まとめ
ダッシュボードウィジェットは wp_dashboard_setup アクション内で wp_add_dashboard_widget を使って追加します。不要なデフォルトウィジェットは remove_meta_box で削除でき、クライアント向けにすっきりとした管理画面を実現できます。