不确定这是否回答了问题,但你应该打电话wp_nonce_field()
使用第四个参数($echo
) 设置为false
:
// You are concatenating or not directly echoing the output, so:
. wp_nonce_field( \'register\', \'registration_nonce\', true, false ) .
我说;“不确定”;因为你说发布的数据(
$_POST
) 没有包括nonce字段,因此请检查表单源(HTML),并确保nonce字段没有被使用两次或更多次,例如:。
<!-- \'register\' action: wp_nonce_field( \'register\', \'registration_nonce\', true, false ) -->
<input ... name="registration_nonce" value="nonce" />
...
<!-- A different action: wp_nonce_field( \'foo-bar\', \'registration_nonce\', true, false ) -->
<input ... name="registration_nonce" value="nonce2" />
所以在这种情况下,假设有效的操作是
register
, 然后
wp_verify_nonce( $_POST[\'registration_nonce\'], \'register\' )
将失败,因为上面的第二个nonce字段(对于
foo-bar
操作)覆盖第一个(针对
register
操作)。
更新,以便确认确实发生了重复的nonce字段问题,但现在在修复该问题后,您将得到错误500
在表单处理页面上,我假设这是您的自定义sunday-signup/apps/save_registration.php
文件
如果是这样,那么您实际上不应该提交到静态PHP文件。相反,使用WordPress中的一个早期(或页面加载时)挂钩,如template_redirect
处理表单提交。
// Example using the template_redirect hook:
add_action( \'template_redirect\', function () {
if ( isset( $_POST[\'submit_registration\'], $_POST[\'registration_nonce\'] ) ) {
if ( wp_verify_nonce( $_POST[\'registration_nonce\'], \'register\' ) ) {
// your code here
// ...
// then redirect back, maybe..
wp_redirect( wp_get_referer() );
exit;
} else {
echo \'test error\';
exit;
}
}
} );
上面的示例应该可行,但处理表单提交的实际代码完全取决于您自己。你一定要打电话
wp_verify_nonce()
以及其他WordPress功能。