2026年5月20日
2026年5月20日
AJAX処理でWordPress500エラーが出る場合の解決方法
はじめに
WordPressのAJAX処理(/wp-admin/admin-ajax.php への通信)で500エラーが発生すると、フォームの送信・カートへの追加・動的コンテンツの読み込みなどが機能しなくなります。ブラウザの開発者ツールでネットワークを確認することで、AJAXエラーを特定できます。
AJAX 500エラーの特徴
- ページは表示されるが特定の操作(ボタンクリック等)が機能しない
- ブラウザの開発者ツール(F12)のネットワークタブで
/admin-ajax.phpが500を返している - 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切れ・フック設定漏れ・メモリ不足が主な原因です。
関連記事: