Установите флажок, установленный по умолчанию на странице параметров


Я создаю страницу настроек темы, поэтому, когда я начинаю кодировать параметры флажка, она отлично работает, если значение по умолчанию равно 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, хотя на самом деле его нет в БД (конфликт).

Итак, как мне исправить этот конфликт?

Author: Fayaz, 2017-03-04

1 answers

Опция-1: Измените опцию с show на hide:

Самым простым способом было бы изменить имя и поведение option. Поэтому вместо $options['classy_show_resume'] вы можете реализовать его как $options['classy_hide_resume'].

Таким образом, по умолчанию hide option не проверено , это означает, что вы показываете его по умолчанию. Затем спрячьте его, когда это 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'] не заданным. Поэтому мы будем использовать это для определения значения по умолчанию по сравнению с сохраненным значением checked или unchecked.

В соответствии с этим, ваш новый КОД будет выглядеть так:

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 статус после сохранения.

 1
Author: Fayaz, 2017-03-04 10:49:02