复选框不会在插件设置页面上保持选中状态

时间:2013-09-07 16:13:19

标签: php wordpress

我写的插件页面上的复选框字段不会保持检查状态。正在保存数据,但复选框不反映当前存储的值(已选中)。

这是我的功能代码:

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');

enter image description here

正如您在图片中看到的那样,值为1会被检查,但刷新后复选框永远不会保持检查状态。

4 个答案:

答案 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 } ?>