Не сохраняется выбранный чекбокс в настройках виджета
Пишу не большой виджет типа (акардион)
Идея проста как 3 копейки, виджет повторяет полностью стандартный виджет рубрик, но как только ставишь checkbox Отображать иерархию. Сразу включается тот самый акардион!
Проблема в том, что когда ставишь check в админке при сохранении он не сохраняется.
<?php /* Виджет WPSchool Widget */ class wpschool_example_widget extends WP_Widget { // Установка идентификатора, заголовка, имени класса и описания для виджета. public function __construct() { $widget_options = array( 'classname' => 'wpschool', 'description' => 'Виджет категорий темы Root', ); parent::__construct( 'wpschool_widget', 'WPSchool Widget', $widget_options ); } // Вывод виджета в области виджетов на сайте. public function widget( $args, $instance ) { $title = apply_filters( 'widget_title', $instance[ 'title' ] ); $blog_title = get_bloginfo( 'name' ); $tagline = get_bloginfo( 'description' ); echo $args['before_widget'] . $args['before_title'] . $title . $args['after_title']; ?> <nav class="nsb-menu"> <ul> <? $categories = get_categories( [ 'taxonomy' => 'category', 'type' => 'post', 'child_of' => 0, 'parent' => '', 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => 1, 'hierarchical' => 1, 'exclude' => '', 'include' => '', 'number' => 0, 'pad_counts' => false, // полный список параметров смотрите в описании функции http://wp-kama.ru/function/get_terms ] ); if( $categories ){ foreach( $categories as $cat ){ echo "<li class='nsb-menu-list' id='nsb$cat->slug'> <a>slug' class='nsb-menu-link'><i class='fa fa-check' aria-hidden='true'></i> $cat->name <span class='nsbcout-post-display'>$cat->count</span></a> <div class='nsb-submenu'> <a>slug' class='nsb-submenu-link'>$cat->description <span class='nsbcout-post-display'>$cat->count</span></a> </div> </li>"; } } ?> </ul> </nav> <?php echo $args['after_widget']; } // Параметры виджета, отображаемые в области администрирования WordPress. public function form( $instance ) { $title = ! empty( $instance['title'] ) ? $instance['title'] : ''; ?> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>">Заголовок:</label> <input type="text" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $title ); ?>" class="widefat" /> </p> <p> <input type="checkbox" checked="" class="checkbox" id="<?php echo $this->get_field_id( 'widget-categories-count' ); ?>" name="<?php echo $this->get_field_name( 'widget-categories[3][hierarchical]' ); ?>"> <label for="widget-categories-4-count">Отображать число записей</label> <br> <input type="checkbox" class="checkbox" id="widget-categories-4-hierarchical" name="widget-categories[4][hierarchical]"> <label for="widget-categories-4-hierarchical">Отображать иерархию</label> </p> <?php } // Обновление настроек виджета в админ-панели. public function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance[ 'title' ] = strip_tags( $new_instance[ 'title' ]); $instance[ 'widget-categories' ] = $new_instance[ 'widget-categories' ]; return $instance; } } // Регистрация и активация виджета. function wpschool_register_widget() { register_widget( 'wpschool_example_widget' ); } add_action( 'widgets_init', 'wpschool_register_widget' );
и еще один вопрос как можно добавить пару полей в добавления и редактирования рубрик?
вот здесь и нужно добавить сохранение чекбокса.
Вы же там title сохран - вот и чекбокс также сохранить нужно
только он будет 1 или 0
Сделал как вы сказали, на скриншоте видно что галочка стоит.
как нажимаю кнопку "Сохранить" чек пропадает
если добавляю
то чекбокс постоянно выбран
Смотрите файл wp-includes/widgets/class-wp-widget-categories.php
Вот так обновляется чекбокс:
А вот вывод самого чекбокса:
Вот скрин еще: