2026年5月20日

2026年5月20日

WordPressのAJAX処理が遅い場合の解決方法【admin-ajax.php高速化】

はじめに

WordPressのAJAX処理はwp-admin/admin-ajax.phpを経由します。このファイルへのリクエストが多すぎる場合、WordPressのコアを毎回フルで読み込むため、サーバー負荷が高くなります。特にページビューが多いサイトや複数のプラグインがAJAXを多用する場合に問題になります。

症状の確認

# サーバーのアクセスログでadmin-ajax.phpへのリクエストを確認
grep 'admin-ajax.php' /var/log/nginx/access.log | wc -l

# リクエスト内容を確認
grep 'admin-ajax.php' /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn

Query Monitorプラグインで「HTTP API Calls」を確認することでもAJAXリクエスト数を把握できます。

主な原因

  • WooCommerce:カートの更新・在庫チェックなど頻繁なAJAXリクエスト
  • Contact Form 7:フォームのバリデーション
  • ハートビートAPI:管理画面の自動保存
  • 不要なプラグイン:不要なAJAXポーリング処理

解決手順

ステップ1:REST APIに移行する(根本解決)

WordPress 4.7以降はREST APIが推奨されます。REST APIはよりキャッシュしやすく効率的です:

// 旧来のAJAXハンドラ(admin-ajax.php経由)
add_action('wp_ajax_my_action', 'my_ajax_handler');
add_action('wp_ajax_nopriv_my_action', 'my_ajax_handler');

// ↓ REST APIに移行
add_action('rest_api_init', function() {
    register_rest_route('myplugin/v1', '/data', [
        'methods'  => 'GET',
        'callback' => 'my_rest_handler',
        'permission_callback' => '__return_true',
    ]);
});

ステップ2:不要なAJAXハンドラを削除

// functions.phpに追加
// 不要なプラグインのAJAXアクションを無効化
add_action('init', function() {
    remove_action('wp_ajax_nopriv_heartbeat', 'wp_ajax_nopriv_heartbeat');
}, 1);

ステップ3:admin-ajax.phpをキャッシュする(Nginx)

# Nginx設定(一部のAJAXレスポンスをキャッシュ)
location = /wp-admin/admin-ajax.php {
    # ログインしていないユーザーのGETリクエストのみキャッシュ
    if ($request_method = POST) {
        proxy_no_cache 1;
    }
    # キャッシュ設定...
}

ステップ4:WP-CronのAJAXを分離

// wp-config.phpでWP-CronのAJAXリクエストを削減
define('DISABLE_WP_CRON', true);
// → サーバーCronに移行することでCron経由のadmin-ajax.phpリクエストを削減

ステップ5:Object Cacheでデータベースクエリを削減

// wp-config.phpに追加(Redis使用の場合)
define('WP_CACHE', true);
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);

Redisオブジェクトキャッシュで繰り返しのDBクエリをキャッシュしてAJAX処理を高速化します。

まとめ

admin-ajax.phpの負荷軽減は①REST APIへの移行(新規開発)→②不要なAJAXハンドラの無効化→③WP-Cronのサーバー移行→④Redisオブジェクトキャッシュの導入の順で対処します。WooCommerceサイトではWooCommerce専用のキャッシュプラグインも有効です。

関連記事:

お気軽にご相談ください

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