我写的插件页面上的复选框字段不会保持检查状态。正在保存数据,但复选框不反映当前存储的值(已选中)。
这是我的功能代码:
public function jo_checkbox_del_setting()
{
echo "<input id='jo_checkbox_del' name='jo_plugin_options[jo_checkbox_del]' type='checkbox' value='{$this->options['jo_checkbox_del']}' />";
}
和add_settings_field
代码:
add_settings_field('jo_checkbox_del', 'Hide Delete Button: ', array($this, 'jo_checkbox_del_setting'), __FILE__, 'jo_main_section');
正如您在图片中看到的那样,值为1会被检查,但刷新后复选框永远不会保持检查状态。
答案 0 :(得分:10)
我更喜欢将WordPress checked()
功能与printf()
一起使用(有关使用示例,请参阅sprintf()
页面):
printf(
'<input id="%1$s" name="jo_plugin_options[%1$s]" type="checkbox" %2$s />',
'jo_checkbox_del',
checked( isset( $this->options['jo_checkbox_del'] ), true, false )
);
答案 1 :(得分:3)
在{checked($this->options['jo_checkbox_del']);}
元素内使用<input>
返回checked属性。
我还建议使用具有相同名称属性的隐藏输入来处理未选中该选项时的情况
public function jo_checkbox_del_setting() {
echo "<input type='hidden' name='jo_plugin_options[jo_checkbox_del]' value='0' />";
echo "<input id='jo_checkbox_del' name='jo_plugin_options[jo_checkbox_del]' type='checkbox' value='{$this->options['jo_checkbox_del']}' {checked($this->options['jo_checkbox_del']);} />";
}
答案 2 :(得分:2)
请改为使用复选框标记的checked
属性:
public function jo_checkbox_del_setting()
{
$checked = ( (int)$this->options['jo_checkbox_del'] == 1 ) ? 'checked' : '';
echo "<input id='jo_checkbox_del' name='jo_plugin_options[jo_checkbox_del]' type='checkbox' value='{$this->options['jo_checkbox_del']}' $checked />";
}
这是only way to have a pre-selected checkbox。将值设置为存储值不会自动触发设置。
另请注意,默认情况下,除非选中,否则表单中的复选框将不会被发送。
答案 3 :(得分:0)
您需要验证是否选中了复选框,然后“告诉”该页面的HTML部分。
因此,我建议您添加echo is_checkbox_checked() ? "checked" : "";
,其中is_checkbox_checked()
是检查[jo_checkbox_del]
是true
还是false
的函数。
您的最终代码如下所示:
<?php
public function jo_checkbox_del_setting()
{ ?>
<input id='jo_checkbox_del' name='<?php echo jo_plugin_options[jo_checkbox_del]; ?>' type='checkbox' value='<?php echo {$this->options['jo_checkbox_del']}; ?>' <?php echo is_checkbox_checked() ? "checked" : ""; ?> />";
<?php } ?>