概要
check_ajax_referer
関数は、AJAXリクエスト時にnonceパラメータを検証するために使用されます。これにより、セキュリティ上の脅威から保護でき、悪意のあるリクエストを防止することができます。この関数は、以下のような機能を実装する際によく使用されます。
- フォームの送信処理
- カスタムAJAXエンドポイントの作成
- プラグインによるデータの取得/更新
- ユーザーアクションの記録
- セッションの管理
- ゲームやコンテストのスコアボード更新
- 動的コンテンツのローディング
- リアルタイム通知システム
構文
check_ajax_referer( $action, $query_arg, $die );
パラメータ
$action
(string) – nonceを生成する際に使用するアクション名(必須)。$query_arg
(string) – AJAXリクエストのクエリパラメータ名(任意、デフォルトは ‘nonce’)。$die
(bool) – 非推奨のnonceが見つからない場合にスクリプトを終了するかどうか(任意、デフォルトは true)。
戻り値
- 成功時は、nonceが有効である場合には何も返さず、失敗時にはWordPressがエラーメッセージを表示します。
関連する関数
使用可能なバージョン
- WordPress 2.8以降
コアファイルのパス
wp-includes/pluggable.php
この関数のアクションでの使用可能性
アクション名 | 使用可能性 |
---|---|
mu_plugin_loaded | |
registered_post_type | |
plugins_loaded | |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | 〇 |
register_sidebar | |
wp_loaded | |
send_headers | |
parse_query | |
pre_get_posts | |
wp | |
template_redirect | |
get_header | |
wp_head |
サンプルコード
サンプル1: 非ceとAJAXリクエストの処理
add_action('wp_ajax_my_action', 'my_ajax_handler');
function my_ajax_handler() {
check_ajax_referer('my_nonce_action', 'nonce');
// Nonceが有効であれば処理を続行
wp_send_json_success('AJAXリクエストが成功しました');
}
このコードは、AJAXリクエストを受け取り、nonceの検証を行い、成功メッセージを返します。
サンプル2: フロントエンドからのデータ送信
add_action('wp_enqueue_scripts', 'my_enqueue_scripts');
function my_enqueue_scripts() {
wp_enqueue_script('my-script', get_template_directory_uri() . '/js/my-script.js', array('jquery'), null, true);
wp_localize_script('my-script', 'my_ajax_object', array('ajax_url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('my_nonce_action')));
}
このコードは、AJAXリクエストに必要なnonceを生成し、JavaScriptにデータを渡します。
サンプル3: プラグインによる非同期処理
add_action('wp_ajax_my_plugin_action', 'my_plugin_ajax_handler');
function my_plugin_ajax_handler() {
check_ajax_referer('my_plugin_nonce', 'nonce');
// プラグインの処理
$result = my_plugin_do_something();
wp_send_json_success($result);
}
このコードは、特定のプラグインのAJAXリクエストを処理し、nonceを確認した後、処理結果をJSON形式で返します。
サンプル4: フロントエンドからのGETリクエスト処理
add_action('wp_ajax_nopriv_my_public_action', 'my_public_ajax_handler');
function my_public_ajax_handler() {
check_ajax_referer('my_public_nonce', 'nonce');
// 処理を続行
wp_send_json_success('公開アクセスのAJAXリクエストが成功しました');
}
このコードは、未ログインのユーザーからのAJAXリクエストを処理し、nonce検証を行います。
サンプル5: エラー処理の実装
add_action('wp_ajax_my_error_handling_action', 'my_error_handling_handler');
function my_error_handling_handler() {
if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'my_nonce_action')) {
wp_send_json_error('無効なnonce');
}
// 正常な処理
wp_send_json_success('リクエストが成功しました');
}
このコードは、nonceが無効な場合にエラーメッセージを返す処理を実装しています。