在options-init.php中调用wp_create_nonce时发生致命错误

时间:2018-09-05 17:37:41

标签: wordpress boilerplate redux-framework

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

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

为什么以及如何解决?

4 个答案:

答案 0 :(得分:1)

wp_create_nonce()是在加载插件后加载的可插入函数。 在调用pluggable.php文件之前:

require_once( ABSPATH . 'wp-includes/pluggable.php' );

谢谢。

答案 1 :(得分:0)

我自己找到了解决方案,尽管不确定它是否正确/最佳实践。

我将redux框架的include移到了一个单独的类中,该类通过“ plugins_loaded”上的动作钩子调用。

//启动Redux框架 $ this-> loader-> add_action('plugins_loaded',$ plugin_admin_redux,'init_redux_framework');

在方法init_redux_framework()中,我只将要求一次放入admin-init.php

有趣的是,将它添加到“ init”而不是“ plugins_loaded”上对于为Redux进行初始化为时已晚。

答案 2 :(得分:0)

为什么在插件中需要{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "Launch Program", "program": "${workspaceFolder}\\probe.js", "console": "integratedTerminal" } ] }

Nonce通常包含在隐藏的HTML表单字段中或作为URL的一部分,因此通过提交表单字段或访问链接与请求一起发送:

wp_create_nonce()

在插件文件中,您可以验证nounce:

<?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>

答案 3 :(得分:0)

/** * @Route("/campagne", name="campagneIndex") * @return Response */ final public function campagneIndexAction() { //Some logic... } 是在加载插件后加载的可插入函数。

请确保在适当的钩子上调用类方法,wp_create_nonce()(或更高版本)是个好地方:一旦函数输出了某种内容(一种形式),就没有理由在此之前运行。

'init'收到2个参数:

wp_verify_nonce()

第一个参数是随机数,来自请求

实际上,$nonce $action 必须像这样使用:

wp_verify_nonce()

所以传递给wp_verify_nonce()的第一个参数正是隐藏字段中存在的值

第二个参数:// here I assume that the form is submitted using 'post' as method $verify = wp_verify_nonce($_POST['message-send']); 方法

关于第二个参数,这取决于您如何构建现时值。

例如如果您这样做:

wp_create_nonce()

然后您需要做:

<?php $nonce = wp_create_nonce( 'custom-action' ); ?>
<input type="hidden" name="message-send" value="<?php echo $nonce ?>" />

因此,第二个参数是用作$verify = wp_verify_nonce( $_POST['message-send'], 'custom-action' ); 的参数。

第二个参数:wp_create_nonce()方法 如果您使用wp_nonce_field()创建随机数,例如:

wp_nonce_field()

然后您需要像这样验证随机数:

wp_nonce_field( 'another_action', 'message-send' );

因此,这次,操作是作为第一个参数传递给$verify = wp_verify_nonce( $_POST['message-send'], 'another_action' ); 的操作。

回顾: 要通过wp_nonce_field()验证,您需要向函数传递2个参数,一个是现时隐藏字段中的值,另一个是操作,并取决于现时值的构造方式。