Всем привет!
В
wordpress виджете с полями репитерами добавил
checkbox, но не могу разобраться с багом сохранения и вывода состояния установлена ли галочка.
К примеру, добавил 4 блока с полями (1 из которых чекбокс):
1 - если во всех блоках включаю все галочки, то они все сохраняются
2 - если снимаю 2 галочки, то при сохранении она исчезает только у последнего элемента, 3 и двоих последних
3 - а, если все галочки снимаю, то при сохранении галочка всегда остаётся у первого
Код виджета
<?php
class My_WidgetBase extends WP_Widget {
//бэкенд
public function form( $instance ) {
if ( isset( $instance[ 'blank' ]) ) {
$blank = $instance[ 'blank' ];
} ?>
<div id="repeatable-fieldset-one">
<?php if (!empty($text)) :
foreach ( $text as $k => $x ) {
if(!empty($x)) { ?>
<div class="block">
<p><input type="text" name="<?php echo $this->get_field_name( 'link' ); ?>[]" value="<?php echo esc_attr( $link[$k] ); ?>"></p>
<p><label for="<?php echo $this->get_field_id( 'blank' ).$k; ?>">Открывать в новой вкладке?</label><input class="widefat" id="<?php echo $this->get_field_id( 'blank' ).$k; ?>" name="<?php echo $this->get_field_name( 'blank' ); ?>[]" type="checkbox" value="<?php echo esc_attr($blank[$k]); ?>" <?php checked("1", array_key_exists($k, $blank)); ?> /></p>
<a class="button remove-row" href="#">Удалить блок</a>
</div>
<?php }
}
else :
// начальный пустой блок
?>
<div class="block">
<p><input type="text" name="<?php echo $this->get_field_name( 'link' ); ?>[]" value=""></p>
<p><label for="<?php echo $this->get_field_id( 'blank' ); ?>">Открывать в новой вкладке?</label><input class="widefat" id="<?php echo $this->get_field_id( 'blank' ); ?>" name="<?php echo $this->get_field_name( 'blank' ); ?>[]" type="checkbox" value="" checked="checked" /></p>
</div>
<?php endif; ?>
</div>
<?php
}
//сохранение
public function update( $new_instance, $old_instance ) {
$instance['link'] = ( ! empty( $new_instance['link'] ) ) ? $new_instance['link'] : '';
$instance['blank'] = ( ! empty( $new_instance['blank'] ) ) ? 1 : false;
return $instance;
}
}