问题是我的插件的验证回调函数的$输入值为NULL。
我的理解是,验证回调将使用$input参数,该参数包含POST字段。但是,当我测试验证回调时,$输入参数为NULL,即使检查了设置。
请注意,设置页面只有复选框;没有其他输入字段类型。
我的register\\u设置如下:;它绑定到admin\\u init挂钩。
register_setting(
\'pluginPage\', // option group name
\'Settings Name\', // option name (used to store into wp-options
array(\'sanitize_callback\' => \'sanitize_callback\' // sanitize the data function\')
);
和sanitize\\u数据回调:
function sanitize_callback($input)
{ $new_input = array();
// ... some checking here, setting $new_input array values if $input array value exists
return $new_input;}
因为$input为NULL,我已经用
print_r($input);exit;
在
sanitize_callback()
功能时,这些选项不会保存在wp options中。
保存选项的唯一方法是在sanitize\\u回调函数中使用$\\u POST变量。这将正确存储选项。
那么,为什么sanitize_callback
提交表单时,函数是否未接收$\\u POST变量?
请注意,我已经按照设置API中的说明进行了操作;我已经根据这些说明验证了所有代码都是正确的。表单显示此代码,因此nonce在表单中。
<form action=\'options.php\' method=\'post\'>
<?php
settings_fields( \'pluginPage\' ); // initializes all of the settings fields
do_settings_sections( \'pluginPage\' ); // does the settings section
submit_button(); // creats the submit button
?>
</form>
SO网友:Fencer
我想在此期间你已经明白了。虽然我想分享我的经验,因为我面临着同样的问题,这可能对其他人有用。
在我的例子中,我只是在为输入元素创建HTML代码时错误地引用了选项。
因此,既然Wordpress建议有一个选项可以保存一组值,这些值是插件/主题/任何东西的实际设置,那么您可能会在某个地方有类似的内容:(注:我将使用plugin_config
你在哪里Settings Name
, 瑞克。)
add_option(\'plugin_config\', array(
\'val1\' => 1,
\'val2\' => 2\'
));
然后,除了注册设置,您还将在其中注册相应的字段以输入节的值,如下所示:
add_settings_field(\'val1_field\', \'Field Label:\', \'creat_html_callback\', \'settings_page_slug_name\');
现在是有趣的部分;定义html代码时,必须以wordpress可以将请求的相应post值与选项的正确数组位置相关联的方式设置字段名称
plugin_config
(您的
Settings Name
!). 下面是中引用的回调
add_settings_field
之前
public function creat_html_callback() {
$option = get_option(\'plugin_config\');
echo \'<input type="text" id="val1Field" name="plugin_config[val1]" size="10" value="\'.$option[\'val1\'].\'"/>\';
}
对我来说最重要的部分是
name="plugin_config[val1]"
. html输入元素的名称必须与注册的(
register_setting
!) 选项/设置或选项名称以及与输入字段对应的值的数组索引。当然,这看起来很清楚,也很容易看到。Bit我认为那些鼻涕虫的名字和参考文献很容易让你混淆,尤其是当你遵循这样的教程时
this.