2026年9月2日

2026年9月2日

WordPress管理画面が重い・遅い問題を解決する方法【高速化対策】

はじめに

WordPressの管理画面が遅くなる原因は多岐にわたります。プラグインの増加・ヒートビートAPIの頻繁な実行・不要なダッシュボードウィジェット・重いメディアライブラリなどが主な原因です。

症状・原因

  • 管理画面のページ読み込みに5秒以上かかる
  • 投稿一覧や固定ページ一覧の表示が極端に遅い
  • ダッシュボードを開くとブラウザがフリーズする
  • プラグインを増やすほど管理画面が遅くなる

解決手順

ステップ1:原因を特定する

// 管理画面の読み込み時間をログに記録
add_action('shutdown', function(): void {
    if (!is_admin() || !current_user_can('manage_options')) return;

    $time  = timer_stop(0, 3);
    $memory = round(memory_get_peak_usage() / 1024 / 1024, 1);
    $queries = get_num_queries();

    error_log(sprintf(
        '[Admin Speed] URL: %s | Time: %ss | Memory: %sMB | Queries: %d',
        $_SERVER['REQUEST_URI'] ?? '',
        $time,
        $memory,
        $queries
    ));
});

// Query Monitorプラグインで詳細分析
// add_action で debug log に遅いクエリを記録
add_filter('query', function(string $query): string {
    if (!defined('SAVEQUERIES') || !SAVEQUERIES) return $query;

    // 1秒以上かかるクエリをログ
    static $timer;
    if (!$timer) $timer = microtime(true);

    return $query;
});
# プラグイン別の読み込み時間を確認
wp profile hook --all --spotlight --url=/wp-admin/
wp profile stage --all --spotlight --url=/wp-admin/

# 管理画面で重いリクエストをcurlで確認
curl -s -w "\n%{time_total}s" -o /dev/null \
  -b "wordpress_logged_in_xxx=COOKIE" \
  https://example.com/wp-admin/edit.php

ステップ2:ヒートビートAPIを最適化する

// ヒートビートAPIの間隔を調整(デフォルト60秒→120秒)
add_filter('heartbeat_settings', function(array $settings): array {
    // 管理画面では120秒間隔
    $settings['interval'] = 120;
    return $settings;
});

// ヒートビートAPIを特定ページでのみ有効化
add_action('init', function(): void {
    global $pagenow;

    // 投稿編集ページ以外ではヒートビートを無効化
    if (is_admin() && !in_array($pagenow, ['post.php', 'post-new.php'], true)) {
        add_action('wp_enqueue_scripts', function(): void {
            wp_dequeue_script('heartbeat');
        });

        add_action('admin_enqueue_scripts', function(): void {
            wp_dequeue_script('heartbeat');
        });
    }
});

// WP-Cronの代わりにサーバーCronを使う(管理画面のWP-Cron処理を軽減)
// wp-config.php に追加:
// define('DISABLE_WP_CRON', true);
// サーバーCronに追加: */5 * * * * wget -q -O - https://example.com/wp-cron.php

ステップ3:不要なダッシュボードウィジェットを削除する

// 不要なダッシュボードウィジェットを削除
add_action('wp_dashboard_setup', function(): void {
    // WordPress.orgからのニュース(外部接続が遅い原因になることがある)
    remove_meta_box('dashboard_primary',      'dashboard', 'side');
    remove_meta_box('dashboard_secondary',    'dashboard', 'side');

    // プラグインが追加するウィジェット
    remove_meta_box('dashboard_right_now',    'dashboard', 'normal');
    remove_meta_box('dashboard_quick_press',  'dashboard', 'side');
    remove_meta_box('dashboard_activity',     'dashboard', 'normal');

    // WooCommerceのウィジェット(大量データがある場合に重い)
    remove_meta_box('woocommerce_dashboard_status',         'dashboard', 'normal');
    remove_meta_box('woocommerce_dashboard_recent_reviews', 'dashboard', 'normal');
});

// 管理画面メニューから不要なメニューを削除(管理者以外)
add_action('admin_menu', function(): void {
    if (current_user_can('administrator')) return;

    // 投稿者・編集者に不要なメニューを非表示
    remove_menu_page('tools.php');
    remove_menu_page('options-general.php');
}, 999);

ステップ4:管理画面の不要なリソースを削除する

// 管理画面で読み込まれる不要なスクリプト・スタイルを削除
add_action('admin_enqueue_scripts', function(string $hook): void {
    // 投稿編集ページ以外でTinyMCEを読み込まない
    if (!in_array($hook, ['post.php', 'post-new.php'], true)) {
        wp_dequeue_script('editor');
        wp_dequeue_style('editor-buttons');
    }

    // プラグインが全ページで読み込むスクリプトを制限
    if ($hook !== 'settings_page_myplugin') {
        wp_dequeue_style('myplugin-admin-style');
        wp_dequeue_script('myplugin-admin-script');
    }
});

// 管理画面の外部フォント読み込みをブロック(Google Fontsなど)
add_filter('style_loader_src', function(string $src): string {
    if (!is_admin()) return $src;

    // Googleフォントを管理画面で読み込まない
    if (str_contains($src, 'fonts.googleapis.com')) {
        return '';
    }

    return $src;
});

ステップ5:メディアライブラリを最適化する

# メディアライブラリの画像数を確認
wp post list --post_type=attachment --format=count

# 孤立した添付ファイルを確認(投稿なし)
wp eval '
$query = new WP_Query([
    "post_type"      => "attachment",
    "post_status"    => "inherit",
    "post_parent"    => 0,
    "posts_per_page" => -1,
    "fields"         => "ids",
]);
echo "Orphaned attachments: " . count($query->posts) . "\n";
'

# 未使用の画像サイズを削除(要プラグイン: Media Cleaner)
# メディアライブラリをページネーションで高速化
wp option set media_grid_view_per_page 20
// メディアライブラリのAJAXクエリを最適化
add_filter('ajax_query_attachments_args', function(array $query): array {
    // 一度に表示する件数を制限
    $query['posts_per_page'] = 20;

    // 必要なフィールドのみ取得
    $query['fields'] = ['ID', 'post_title', 'post_mime_type', 'post_date'];

    return $query;
});

注意事項

  • プラグインの無効化テスト: 管理画面が遅い場合、プラグインを1つずつ無効化して原因を特定することが最も確実です
  • ヒートビートの完全無効化: ヒートビートを完全に無効化すると自動保存機能も無効になります。間隔延長に留めることを推奨します
  • データベースインデックス: wp_postmetawp_optionsに適切なインデックスがあるか確認してください

まとめ

管理画面高速化の手順は「原因特定(Query Monitor/wp profile)→ヒートビートAPI最適化→不要ウィジェット削除→不要スクリプト除外→メディアライブラリ最適化」の5ステップです。プラグインの増加が原因の場合は不要なプラグインを削除することが最も効果的です。関連記事:フロントエンドの表示速度を改善する方法

お気軽にご相談ください

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