ワードプレスのwp_verify_nonce関数の使用方法・解説

概要

wp_verify_nonce 関数は、nonce用ハッシュ値を検証するために使用されます。Nonceは一時的なトークンで、ユーザーが特定のアクションを実行する権限があることを確認するために利用され、セキュリティ強化のために利用されます。この関数は、次のような機能を実装する際によく使われます。

  1. ユーザーのリクエストが正当かどうかを確認する
  2. フォーム送信の検証
  3. Ajaxリクエストのセキュリティ検証
  4. 投稿やページの削除確認
  5. 設定変更の確認
  6. ユーザー権限のチェック
  7. ウィジェットの設定確認
  8. ショートコードの実行時のセキュリティ確認

構文

wp_verify_nonce( string $nonce, string $action );

パラメータ

  • $nonce (string): 検証するnonceのハッシュ値。
  • $action (string): nonceを生成する際に指定したアクション名。

戻り値

  • 整数値 (0、1):nonceが有効であれば1、無効であれば0を返します。また、nonceが過去に発行されていない場合はfalseを返します。

関連する関数

使用可能なバージョン

wp_verify_nonce 関数は、WordPress 2.0.0 で導入され、現在も利用可能です。非推奨または削除されたバージョンはありません。

コアファイルのパス

wp-includes/plugin.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: フォームのnonceを検証

if (isset($_POST['my_nonce']) && wp_verify_nonce($_POST['my_nonce'], 'my_action')) {
    // nonceが有効な場合の処理
} else {
    // nonceが無効な場合の処理
}

このサンプルは、送信されたフォームのnonceを検証し、nonceが有効な場合と無効な場合で処理を分けています。

サンプルコード2: Ajaxリクエストの検証

add_action('wp_ajax_my_action', 'my_action_callback');

function my_action_callback() {
    check_ajax_referer('my_action_nonce', 'nonce');

    // Nonceが有効な場合の処理
}

このサンプルは、Ajaxリクエストが正当かどうかを確認するためにNonceを検証しています。

サンプルコード3: 投稿削除時のNonce検証

if (isset($_GET['nonce']) && wp_verify_nonce($_GET['nonce'], 'delete_post')) {
    wp_delete_post($post_id);
}

このサンプルは、投稿を削除する際に送信されたNonceを検証しています。

サンプルコード4: カスタム設定の保存検証

if (isset($_POST['my_nonce']) && wp_verify_nonce($_POST['my_nonce'], 'save_settings')) {
    // 設定を保存する処理
}

このサンプルは、カスタム設定が正当なリクエストであるかを検証するためにNonceを使用しています。

サンプルコード5: ウィジェットの設定確認

public function update($new_instance, $old_instance) {
    if (!wp_verify_nonce($new_instance['my_nonce'], 'update_widget')) {
        return $old_instance;
    }
    // ウィジェットの更新処理
}

このサンプルは、ウィジェットの設定変更が正当かどうかを確認するためのNonce検証を行っています。

この関数について質問する


上の計算式の答えを入力してください