在选项页面中将该复选框设置为默认选中状态

时间:2017-03-04 作者:hesham shawky

我正在创建一个主题设置页面,所以当我开始编码复选框选项时,如果默认值为unchecked. 代码如下:

function classy_show_resume_section_callback () {
    $options = get_option( \'classy_general_settings\' );
    $html = "<label class=\'switch\'>";

    if ( empty( $options[\'classy_show_resume\'] ) ) $options[\'classy_show_resume\'] = 0;

    $html .= "<input type=\'checkbox\' name=\'classy_general_settings[classy_show_resume]\' value=\'1\' " . checked($options[\'classy_show_resume\'], 1, false) . " >";

    $html .= "<div class=\'slider round\'></div>";
    $html .= "</label>";

    echo $html;
}
但是,因为我希望复选框为checked 默认情况下,我必须更改if 前一代码的状态。如果是空的,则将$options var等于1. 因此,代码将是:

function classy_show_resume_section_callback () {
    $options = get_option( \'classy_general_settings\' );
    $html = "<label class=\'switch\'>";

    if ( empty( $options[\'classy_show_resume\'] ) ) $options[\'classy_show_resume\'] = 1;

   $html .= "<input type=\'checkbox\' name=\'classy_general_settings[classy_show_resume]\' value=\'1\' " . checked($options[\'classy_show_resume\'], 1, false) . " >";

   $html .= "<div class=\'slider round\'></div>";
   $html .= "</label>";

   echo $html;
}
所以它成功了。复选框获取checked 默认情况下unchecked 然后单击“保存”,数据库中出现问题。它工作正常,值已删除,但在前端,由于if条件值现在为空,因此它在屏幕上显示为checked 一直以来,虽然在现实中,它并不在DB(冲突)中。

那么,我该如何解决这一冲突呢?

1 个回复
最合适的回答,由SO网友:Fayaz 整理而成

选项1:更改选项showhide:

最简单的方法是更改option. 因此$options[\'classy_show_resume\'], 您可以将其实现为$options[\'classy_hide_resume\'].

这样,默认情况下hide optionnot checked, 这意味着您默认显示它。然后把它藏起来hide option 已选中。

因此,只需更改选项的名称,然后实现hide option (而不是show option) 在您的主题中,您可以轻松修复它。

因此,您的代码如下所示:

function classy_hide_resume_section_callback () {
    $options = get_option( \'classy_general_settings\' );
    $html = "<label class=\'switch\'>";

    if ( empty( $options[\'classy_hide_resume\'] ) ) $options[\'classy_hide_resume\'] = 0;

    $html .= "<input type=\'checkbox\' name=\'classy_general_settings[classy_hide_resume]\' value=\'1\' " . checked($options[\'classy_hide_resume\'], 1, false) . " >";

    $html .= "<div class=\'slider round\'></div>";
    $html .= "</label>";

    echo $html;
}
选项2:制造classy_show_resume 默认选中:如果必须使用classy_show_resume 如果默认为选中,则可以使用以下逻辑:

默认情况下get_option( \'classy_general_settings\' ) 应返回false 当它保存为unchecked, 它将是一个空字符串或一个$options[\'classy_show_resume\'] 未设置。因此,我们将使用它来确定默认值vs.savedcheckedunchecked 价值

据此,您的新代码如下所示:

function classy_hide_resume_section_callback () {
    $options = get_option( \'classy_general_settings\' );
    $classy_show_resume = 0;
    if ( $options === false ) {
        // nothing is set, so apply the default here
        $classy_show_resume = 1;
    }
    else if( is_array( $options ) && isset( $options[\'classy_show_resume\'] ) ) {
        // classy_show_resume is checked
        $classy_show_resume = $options[\'classy_show_resume\'];
    }

    $html = "<label class=\'switch\'>";

    $html .= "<input type=\'checkbox\' name=\'classy_general_settings[classy_show_resume]\' value=\'1\' " . checked( $classy_show_resume, 1, false ) . " >";

    $html .= "<div class=\'slider round\'></div>";
    $html .= "</label>";

    echo $html;
}
现在,默认情况下应选中它并显示正确的checked | unchecked 保存后的状态。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请