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_widgetwp_dashboard_setup アクション内で呼び出してください
  • ウィジェット内で外部APIを呼び出す場合はキャッシュ(get_transient/set_transient)を使い、ページロードのたびにリクエストしないようにしてください
  • remove_meta_box のコンテキスト引数('side''normal')はウィジェットごとに異なります

まとめ

ダッシュボードウィジェットは wp_dashboard_setup アクション内で wp_add_dashboard_widget を使って追加します。不要なデフォルトウィジェットは remove_meta_box で削除でき、クライアント向けにすっきりとした管理画面を実現できます。

お気軽にご相談ください

お見積りへ お問い合わせへ