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()
метод.