我正在为WordPress开发我的第一个插件,我正在掌握整个挂钩系统。我现在被困在一个(可能)小问题上,我可能会绕过这个问题,但我害怕出现一个“黑客”,而不是一个真正的解决方案。
我要做的是在我的选项页面上放置两个提交按钮:
保存草稿他们都必须做一些共同的事情(即保存表单的内容),但是他们应该对这些内容采取不同的操作。到目前为止,我使用以下代码成功地输出了两个按钮:
echo \'<form id="my_plugin_settings_form" method="post" action="options.php">\';
settings_fields(\'my_plugin_settings\');
do_settings_sections(\'my_plugin_settings\');
submit_button(__(\'Save\', \'MyPlugin\'), \'Save\');
submit_button(__(\'Draft\', \'MyPlugin\'), \'secondary\',\'Draft\');
echo \'</form>\';
我还实现了一个validate方法,它可以正确地接收发布的字段:
public function validate_settings($settings) {
var_dump($settings); // Here I can see all posted fields
}
以上操作很好,所有数据都正确保存在WordPress选项表中。但是,我想“截取”正在保存的数据以对其进行操作。我想在
validate_settings()
方法,但单击的按钮为
not 包含在作为参数传递的设置中。
我可以简单地分析$_POST
数组来获取它,但我怀疑这种方法有点像黑客,也许我应该在其他地方实现一个合适的钩子。
因此,我的问题是:我应该把代码放在哪里来处理从选项页面发布的数据?是否有我应该使用的特定挂钩?
提前感谢您的回答。
最合适的回答,由SO网友:Ralf912 整理而成
设置API是垃圾。我需要很长一段时间,需要尝试很多次,直到我的工作。我的问题是,我输入的值从未传递给validate回调。
我最终使用了array方法:
<input type="text" name="foo[bar]" value="baz" />
如果要发送公式,请在
$_POST
或
$_GET
数组是一个名为
foo
包含具有所有值的数组的。因此,我可以访问值,例如。
$_POST[\'foo\'][\'bar\']
如果必须使用设置API,则使用第二个参数fomrregister_setting()
(选项名称)作为我的输入字段的键。
global $option_name;
$option_group = \'The_Option_Group\';
$option_name = \'The_Option_Name\';
register_setting( $option_group, $option_name );
[...]
function field_callback() {
global $option_name;
echo "<input type=\'text\' name=\'{$option_name}[bar]\' value=\'baz\' />";
echo "<input type=\'submit\' name=\'{$option_name}[submit]\' value=\'Send\' />"
}
通过这种方式,我可以访问选项validate回调中公式中的所有值。
function option_validate( $input ) {
$bar = $input[\'bar\'];
$sub = $input[\'submit\'];
return $input;
}
这篇文章解释得更好
Settings API Explained 压码机上