我正在使用wordpress样板模板开发wordpress插件。另外,我正在使用Redux Framework作为选项框架。我在主要包含文件的load_dependencies()函数中加载了options-init.php。
一切正常。但是,在options-init.php中调用wp_create_nonce时,出现致命错误:未捕获的错误:调用未定义函数wp_create_nonce()
为什么以及如何解决?
答案 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个参数,一个是现时隐藏字段中的值,另一个是操作,并取决于现时值的构造方式。