Не сохраняется выбранный чекбокс в настройках виджета
Пишу не большой виджет типа (акардион)
Идея проста как 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' );
и еще один вопрос как можно добавить пару полей в добавления и редактирования рубрик?
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; }вот здесь и нужно добавить сохранение чекбокса.
Вы же там title сохран - вот и чекбокс также сохранить нужно
только он будет 1 или 0
Сделал как вы сказали, на скриншоте видно что галочка стоит.
как нажимаю кнопку "Сохранить" чек пропадает
если добавляю
то чекбокс постоянно выбран
// Обновление настроек виджета в админ-панели. 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; }Смотрите файл wp-includes/widgets/class-wp-widget-categories.php
Вот так обновляется чекбокс:
public function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['title'] = sanitize_text_field( $new_instance['title'] ); $instance['count'] = ! empty( $new_instance['count'] ) ? 1 : 0; $instance['hierarchical'] = ! empty( $new_instance['hierarchical'] ) ? 1 : 0; $instance['dropdown'] = ! empty( $new_instance['dropdown'] ) ? 1 : 0; return $instance; }А вот вывод самого чекбокса:
Вот скрин еще: