2026年5月20日

2026年5月20日

AJAX処理でWordPress500エラーが出る場合の解決方法

はじめに

WordPressのAJAX処理(/wp-admin/admin-ajax.php への通信)で500エラーが発生すると、フォームの送信・カートへの追加・動的コンテンツの読み込みなどが機能しなくなります。ブラウザの開発者ツールでネットワークを確認することで、AJAXエラーを特定できます。

AJAX 500エラーの特徴

  • ページは表示されるが特定の操作(ボタンクリック等)が機能しない
  • ブラウザの開発者ツール(F12)のネットワークタブで /admin-ajax.php500 を返している
  • WooCommerceのカート追加・チェックアウトが動かない
  • お問い合わせフォームの送信が失敗する

ステップ1:ブラウザの開発者ツールで確認する

1. F12キーで開発者ツールを開く

2. 「ネットワーク」タブ を選択

3. 問題の操作を実行

4. admin-ajax.php へのリクエストを確認

5. レスポンス内容でエラーの詳細を確認する

ステップ2:WP_DEBUGを有効にしてエラーを記録する

// wp-config.php に追加
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

wp-content/debug.log にAJAXリクエスト処理中のエラーが記録されます。

ステップ3:プラグインの競合を確認する

AJAX処理に関わるプラグイン(フォームプラグイン・ECプラグイン等)を個別に無効化して確認します。

ステップ4:nonceの有効期限切れを確認する

WordPressのAJAXは nonce(一時的なセキュリティトークン)を使います。nonceが期限切れになると500エラーが返ることがあります:

// JavaScriptでのAJAXリクエスト(正しい例)
jQuery.ajax({
    url: ajaxurl,
    type: 'POST',
    data: {
        action: 'my_action',
        nonce: myPlugin.nonce, // ← wp_create_nonce() で生成したもの
        data: formData
    }
});
// PHP側のnonce検証(正しい例)
function my_ajax_handler() {
    check_ajax_referer( 'my-nonce', 'nonce' );
    // 処理...
    wp_send_json_success( $result );
}
add_action( 'wp_ajax_my_action', 'my_ajax_handler' );
add_action( 'wp_ajax_nopriv_my_action', 'my_ajax_handler' );

ステップ5:PHPメモリと実行時間を確認する

AJAX処理が重い場合(画像処理・大量データ等)、メモリや時間が足りなくなります:

// wp-config.php
define( 'WP_MEMORY_LIMIT', '256M' );
@ini_set('max_execution_time', 120);

ステップ6:Ajaxアクションのフックが正しいか確認する

// ログインユーザー向け
add_action( 'wp_ajax_my_action', 'my_function' );

// 未ログインユーザー向け(フロントのフォーム等)
add_action( 'wp_ajax_nopriv_my_action', 'my_function' );
// ↑ これを忘れると未ログイン時だけ500エラーになる

注意事項

  • AJAXのデバッグには必ずブラウザの開発者ツールを使ってください。通常のページエラーとは異なりネットワークタブで確認します。
  • wp_send_json_success() / wp_send_json_error() の後には必ず wp_die() を呼ぶか、die() で終了させてください。

まとめ

AJAXの500エラーはブラウザの開発者ツール+WP_DEBUGでエラー内容を確認するのが最初の一手です。nonce切れ・フック設定漏れ・メモリ不足が主な原因です。

関連記事:

お気軽にご相談ください

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