Создадим собственный виджет и разберемся в особенностях конструкции и функций при создании виджета.
Стандартные блоки при создании виджета
Создаем класс
class related_posts_widget extends WP_Widget {
}
Внутри этого класса прописываем следующие блоки:
Регистрация виджета:
function __construct() {
parent::__construct(
'related_posts_widget', // widget ID
__('Похожие записи', ' hstngr_widget_domain'), // widget name
array( 'description' => __( 'Выводим похожие записи по тэгу', 'hstngr_widget_domain' ), ) // widget description
);
}
Вывод виджета (то что идет во фронтенд):
public function widget( $args, $instance ) {
$title = apply_filters( 'widget_title', $instance['title'] );
if ( !empty( $title ) ) {
echo $args['before_widget'];
echo $args['before_title'] . $title . $args['after_title'];
echo __( 'Привет мир, это виджет похожих записей', 'hstngr_widget_domain' );
echo $args['after_widget'];
}
}
Управление виджетом (то что мы видим в админке):
public function form( $instance ) {
if ( isset( $instance[ 'title' ] ) ) $title = $instance[ 'title' ];
else $title = __( 'Похожие записи', 'hstngr_widget_domain' );
?>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
</p>
<?php
}
Обновление виджета (при внесении изменений):
public function update( $new_instance, $old_instance ) {
$instance = array();
$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
return $instance;
}
Далее, уже после созданного класса добавляем функцию активации виджета:
function related_posts_register_widget() { register_widget( 'related_posts_widget' ); }
add_action( 'widgets_init', 'related_posts_register_widget' );
Всю эту конструкцию рекомендуется поместить в плагин.
Стили CSS виджета необходимо подключать отдельными стандартными для этого средствами WP.
[site-socialshare]