Wordpress 在options-init.php中调用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移到

我正在使用wordpress样板模板开发wordpress插件。此外,我使用Redux框架作为选项框架。我在主include文件的load_dependencies()函数中加载options-init.php

一切正常。但是,在options-init.php中调用wp_create_nonce时,我得到一个致命错误:未捕获错误:调用未定义的函数wp_create_nonce()


为什么会这样?如何解决?

我自己找到了解决方案,但不确定它是否正确/最佳做法

我将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' );