wp_nonce_field()


WordPressのwp_nonce_field()関数は、フォーム送信時にセキュリティを強化するために使用されます。この関数を使用すると、非公開な一意のトークン(nonce)を生成し、それをフォームに追加できます。

構文

wp_nonce_field( string $action = '', string $name = '_wpnonce', bool $referer = true, bool $echo = true );

引数の説明:

  • $action (string) — nonceの使用目的を指定する値。
  • $name (string) — フォームフィールドの名前。
  • $referer (bool) — trueの場合、リファラーフィールドも追加されます。
  • $echo (bool) — trueの場合、nonceフィールドが直接出力されます。falseの場合、値が返されます。

例1: 基本的な使用例

以下は、wp_nonce_field()を使用してフォームにnonceを追加する基本例です。

<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
    <?php wp_nonce_field( 'my_action', 'my_nonce_field' ); ?>
    <input type="text" name="example_input" />
    <input type="submit" value="送信" />
</form>

例2: リファラーフィールドを無効にする

リファラーフィールドを追加しないように設定できます。

<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
    <?php wp_nonce_field( 'my_action', 'my_nonce_field', false ); ?>
    <input type="text" name="example_input" />
    <input type="submit" value="送信" />
</form>

例3: echoを無効にする

nonceフィールドを直接出力せず、変数に格納する例です。

<?php
$nonce_field = wp_nonce_field( 'my_action', 'my_nonce_field', true, false );
?>
<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
    <?php echo $nonce_field; ?>
    <input type="text" name="example_input" />
    <input type="submit" value="送信" />
</form>

例4: nonceの検証

nonceを検証する例です。

if ( isset( $_POST['my_nonce_field'] ) && wp_verify_nonce( $_POST['my_nonce_field'], 'my_action' ) ) {
    echo 'Nonceが有効です。';
} else {
    echo 'Nonceが無効です。';
}

例5: カスタムアクションでの使用

カスタムアクションでnonceを利用する場合の例です。

<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
    <?php wp_nonce_field( 'custom_action', 'custom_nonce_field' ); ?>
    <input type="hidden" name="action" value="custom_action" />
    <input type="submit" value="カスタム送信" />
</form>

注意事項

wp_nonce_field()を使用する際には、nonceの検証を必ず行い、無効なリクエストを適切に処理してください。また、nonceは一定期間で期限切れになるため、期限切れのケースも考慮したエラーメッセージを用意してください。


関連機能: