Wordpress 在options-init.php中调用wp_create_nonce时发生致命错误
我正在使用wordpress样板模板开发wordpress插件。此外,我使用Redux框架作为选项框架。我在主include文件的load_dependencies()函数中加载options-init.php 一切正常。但是,在options-init.php中调用wp_create_nonce时,我得到一个致命错误:未捕获错误:调用未定义的函数wp_create_nonce()Wordpress 在options-init.php中调用wp_create_nonce时发生致命错误,wordpress,boilerplate,redux-framework,Wordpress,Boilerplate,Redux Framework,我正在使用wordpress样板模板开发wordpress插件。此外,我使用Redux框架作为选项框架。我在主include文件的load_dependencies()函数中加载options-init.php 一切正常。但是,在options-init.php中调用wp_create_nonce时,我得到一个致命错误:未捕获错误:调用未定义的函数wp_create_nonce() 为什么会这样?如何解决?我自己找到了解决方案,但不确定它是否正确/最佳做法 我将redux框架的include移到
为什么会这样?如何解决?我自己找到了解决方案,但不确定它是否正确/最佳做法 我将redux框架的include移到了一个单独的类中,我通过“plugins\u loaded”上的action hook调用该类 //启动Redux框架 $this->loader->add_action('plugins_loaded',$plugin_admin_redux,'init_redux_framework') 在init_redux_framework()方法中,我只将require放在admin-init.php中一次
有趣的是,在'init'而不是'plugins\u loaded'上添加它对于Redux初始化来说太晚了。为什么需要
wp\u create\u nonce()
插件内部
Nonce通常包含在隐藏的HTML表单字段中或作为URL的一部分,因此通过提交表单字段或访问链接随请求一起发送:
<?php
// Create an nonce for a link.
// We pass it as a GET parameter.
// The target page will perform some action based on the 'do_something' parameter.
$nonce = wp_create_nonce( 'my-nonce' );
?>
<a href='myplugin.php?do_something=some_action&_wpnonce=<?php echo $nonce; ?>'>Do some action</a>
wp\u create\u nonce()
是加载插件后加载的可插入函数
请确保在适当的钩子上调用类方法,'init'
(或更高版本)是一个好地方:一旦函数输出了某个内容(表单),就没有理由早于此运行
wp\u verify\u nonce()
接收两个参数:
$nonce
$action
第一个参数是nonce,来自请求
事实上,wp\u verify\u nonce()
必须这样使用:
// here I assume that the form is submitted using 'post' as method
$verify = wp_verify_nonce($_POST['message-send']);
因此,传递给wp_verify_nonce()的第一个参数正是隐藏字段中的值
第二个参数:wp\u create\u nonce()
方法
关于第二个参数,它取决于如何构建nonce值
例如,如果您这样做了:
<?php $nonce = wp_create_nonce( 'custom-action' ); ?>
<input type="hidden" name="message-send" value="<?php echo $nonce ?>" />
因此,第二个参数是wp\u create\u nonce()
的参数
第二个参数:wp\u nonce\u字段()
方法
如果使用wp_nonce_field()创建nonce,如:
然后您需要验证nonce,如下所示:
$verify = wp_verify_nonce( $_POST['message-send'], 'another_action' );
因此,这一次,动作是作为第一个参数传递给wp\u nonce\u field()
的任何内容
重述:
要通过wp\u verify\u nonce()
验证,您需要向函数传递两个参数,一个是nonce hidden字段中的值,另一个是动作,这取决于nonce值是如何生成的。wp\u create\u nonce()是加载插件后加载的可插入函数。
调用pluggable.php文件之前:
require_once( ABSPATH . 'wp-includes/pluggable.php' );
谢谢。你是机器人吗?很好的复制粘贴标准贴子,与我的问题完全无关。你看过我的评论了吗?开始或以后都太晚了,顺便说一句。!
wp_nonce_field( 'another_action', 'message-send' );
$verify = wp_verify_nonce( $_POST['message-send'], 'another_action' );
require_once( ABSPATH . 'wp-includes/pluggable.php' );