wp_nonce_field函数用于生成一次性验证令牌(nonce),主要作用是防止跨站请求伪造(CSRF 攻击)。它能确保表单提交或链接请求来自你的网站,而非恶意第三方伪造。
nonce是 “Number Used Once” 的缩写,即 “仅使用一次的数字”,是一个随机生成的令牌,绑定到当前用户和操作场景。确保表单提交、链接点击等操作是用户 “主动且在你的网站上” 发起的,而非黑客通过伪造请求触发(如恶意提交表单、执行敏感操作)。
wp_nonce_field($action, $name, $referer, $echo);
$action(字符串,可选): 绑定的 “操作名称”(如 ”“submit_form”),用于区分不同场景的验证,默认值为 -1。
$name(字符串,可选):表单中 nonce 字段的name属性,默认值为 _wpnonce。
$referer(布尔值,可选):是否生成 “来源验证字段”(_wp_http_referer),用于验证请求来源页面,默认 true。
$echo(布尔值,可选):是否直接输出字段,true 输出,false 返回字符串,默认 true。
在自定义表单中调用 wp_nonce_field(),会自动生成一个隐藏字段(包含 nonce 令牌)
<form method="post" action=""><!-- 生成 nonce 字段(关键安全步骤) --><!-- 其他表单字段 --><input type="text" name="name" placeholder="姓名"><input type="email" name="email" placeholder="邮箱"><button type="submit" name="submit_form">提交</button></form>
前端渲染后,会生成类似以下的隐藏字段:
<input type="hidden" id="contact_form_nonce" name="contact_form_nonce" value="5f8d5a5b5c"><input type="hidden" name="_wp_http_referer" value="/contact/"> <!-- 若 $referer 为 true -->
添加 nonce 后,必须在后端验证其有效性,否则无法发挥安全作用
// 处理表单提交时验证 nonceif (isset($_POST['submit_form'])) {// 检查 nonce 字段是否存在if (!isset($_POST['contact_form_nonce'])) {wp_die('验证失败:未找到安全令牌');}// 验证 nonce 有效性(参数:表单提交的 nonce 值、对应的 $action 名称)$nonce_verified = wp_verify_nonce( $_POST['contact_form_nonce'], 'submit_contact_form' );if (!$nonce_verified) {wp_die('验证失败:无效的安全令牌');}// 验证通过后,继续处理表单数据(清洗、存储等)$name = sanitize_text_field($_POST['name']);// ...}
// 后台表单验证示例if (isset($_POST['submit_admin_form'])) {// 验证 nonce 和来源(参数:$action 名称、nonce 字段名)check_admin_referrer( 'admin_action', 'admin_nonce' );// 验证通过,处理数据// ...}

