WordPress виджет: флажок не сохраняет состояние

У меня есть виджет Wordpress с флажками. Я пытаюсь установить состояние по умолчанию "флажок" для одного из флажков, устанавливая переменную в моем массиве значений по умолчанию в true. Если я снимаю флажок и пытаюсь сохранить виджет, флажок возвращается к проверке, поэтому я не могу снять флажок.

У меня есть другие флажки с той же конфигурацией, и они работают правильно. Кто-нибудь видит что-то не так с моим кодом ниже?

$defaults = array(
    'widget' => 'cat',
    'type' => 'list',
    'selected' => 0,
    'use_products' => 'true',
    'title' => '',
    'sub_title' => '',
    'operator' => 'IN',
    'print_before_widget' => 'true',
    'print_after_widget' => 'true',
    'hide_empty' => 'true',
    'hide_on_cats' => 'false',
    'custom_class' => ''
);

$instance = parse_args( $instance, $defaults );
extract( $instance );

<p>
<input class="checkbox"
        <?php if ( isset( $use_products ) && $use_products=='true' ) { echo 'checked="checked"'; } ?>
        id = "<?php echo $this->get_field_id( 'use_products' ); ?>"
        name = "<?php echo $this->get_field_name( 'use_products' ); ?>"
        value = "true"
        type = "checkbox"
    />
    <label for="<?php echo $this->get_field_id( 'use_products' ); ?>" ><?php _e( 'Show Product Categories', textdomain ); ?></label>
</p>

1 ответ

Решение

Здесь может быть несколько вещей не так, но вы можете не дать достаточно контекста.

Я предполагаю, что это фрагмент изнутри form() метод вашего виджета. Методу form() передается переменная $instance, которая содержит текущие значения всех настроек виджета. Вы, кажется, не используете это вообще. Ваше значение для флажка жестко закодировано как истинное, а ваше $defaults массив ничего не объединяет и не переопределяет - вы просто устанавливаете значения по умолчанию и используете их напрямую - вы не используете значения из базы данных.

https://codex.wordpress.org/Widgets_API

редактировать


В вашем методе обновления для флажка вы должны сделать что-то вроде следующего...

public function update($new_instance, $old_instance){

    $instance = array();

    $instance['checkbox_key'] = ( ! empty( $new_instance['checkbox_key'] ) ) ? strip_tags( $new_instance['checkbox_key'] ) : '';

    return $instance;
}

Если это не имеет смысла в вашем контексте, вы должны обновить свой ответ, чтобы включить update() метод.

Другие вопросы по тегам