在 options-init.php 中调用 wp_create_nonce 时出现致命错误
fatal error when calling wp_create_nonce in options-init.php
我正在使用 wordpress 样板模板开发一个 wordpress 插件。此外,我使用 Redux Framework 作为选项框架。我在主包含文件的 load_dependencies() 函数中加载选项-init.php。
一切正常。但是,在 options-init.php 中调用 wp_create_nonce 时出现致命错误:未捕获错误:调用未定义函数 wp_create_nonce()
为什么会这样,如何解决?
我自己找到了解决方案,虽然不确定它是否是 correct/best 实践。
我将 redux 框架的包含移动到一个单独的 class 中,我通过 ''plugins_loaded'
上的操作挂钩调用它
//启动Redux框架
$this->loader->add_action( 'plugins_loaded', $plugin_admin_redux, 'init_redux_framework' );
在方法 init_redux_framework() 中,我只是将要求放在管理员那里一次-init.php
有趣的是,将它添加到 'init' 而不是 'plugins_loaded' 上对于初始化 Redux 来说为时已晚。
为什么你需要 wp_create_nonce()
内部插件?
Nonce 通常包含在隐藏的 HTML 表单字段中或作为 URL 的一部分,因此通过提交表单字段或访问 link 随请求一起发送:
<?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>
在插件文件中你可以验证 nounce:
wp_verify_nonce( $nonce, 'my-nonce' );
wp_create_nonce()
是插件加载后加载的可插拔函数
一定要在正确的钩子上调用你的 class 方法,'init'
(或更高版本)是一个好地方:一旦你的函数输出了一些东西(一种形式)就没有理由 运行比那个早。
wp_verify_nonce()
收到 2 个参数:
$nonce
$action
第一个参数是随机数,来自请求
事实上,wp_verify_nonce()
必须这样使用:
// here I assume that the form is submitted using 'post' as method
$verify = wp_verify_nonce($_POST['message-send']);
所以传递给 wp_verify_nonce() 的第一个参数正是隐藏字段中存在的值
第二个参数:wp_create_nonce()
方法
关于第二个参数,这取决于您如何构建 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()
的任何内容。
回顾:
要通过 wp_verify_nonce()
验证,您需要将 2 个参数传递给函数,一个是 nonce 隐藏字段中的值,另一个是操作,具体取决于 nonce 值的构建方式。
wp_create_nonce()是插件加载后加载的可插拔函数。
在调用 pluggable.php 文件之前:
require_once( ABSPATH . 'wp-includes/pluggable.php' );
谢谢。
我正在使用 wordpress 样板模板开发一个 wordpress 插件。此外,我使用 Redux Framework 作为选项框架。我在主包含文件的 load_dependencies() 函数中加载选项-init.php。
一切正常。但是,在 options-init.php 中调用 wp_create_nonce 时出现致命错误:未捕获错误:调用未定义函数 wp_create_nonce()
为什么会这样,如何解决?
我自己找到了解决方案,虽然不确定它是否是 correct/best 实践。
我将 redux 框架的包含移动到一个单独的 class 中,我通过 ''plugins_loaded'
上的操作挂钩调用它//启动Redux框架 $this->loader->add_action( 'plugins_loaded', $plugin_admin_redux, 'init_redux_framework' );
在方法 init_redux_framework() 中,我只是将要求放在管理员那里一次-init.php
有趣的是,将它添加到 'init' 而不是 'plugins_loaded' 上对于初始化 Redux 来说为时已晚。
为什么你需要 wp_create_nonce()
内部插件?
Nonce 通常包含在隐藏的 HTML 表单字段中或作为 URL 的一部分,因此通过提交表单字段或访问 link 随请求一起发送:
<?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>
在插件文件中你可以验证 nounce:
wp_verify_nonce( $nonce, 'my-nonce' );
wp_create_nonce()
是插件加载后加载的可插拔函数
一定要在正确的钩子上调用你的 class 方法,'init'
(或更高版本)是一个好地方:一旦你的函数输出了一些东西(一种形式)就没有理由 运行比那个早。
wp_verify_nonce()
收到 2 个参数:
$nonce
$action
第一个参数是随机数,来自请求
事实上,wp_verify_nonce()
必须这样使用:
// here I assume that the form is submitted using 'post' as method
$verify = wp_verify_nonce($_POST['message-send']);
所以传递给 wp_verify_nonce() 的第一个参数正是隐藏字段中存在的值
第二个参数:wp_create_nonce()
方法
关于第二个参数,这取决于您如何构建 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()
的任何内容。
回顾:
要通过 wp_verify_nonce()
验证,您需要将 2 个参数传递给函数,一个是 nonce 隐藏字段中的值,另一个是操作,具体取决于 nonce 值的构建方式。
wp_create_nonce()是插件加载后加载的可插拔函数。 在调用 pluggable.php 文件之前:
require_once( ABSPATH . 'wp-includes/pluggable.php' );
谢谢。