/ Wordpress / Виджеты

Виджеты

HIT

23.01.2017

3070

Виджеты — это модули с различным функционалом для добавления в специальную область sitebar. Одним из основных преимуществ данного решения является скорость и простота настройки.

Виджет для изображения

Если вставить изображение в простой текстовый виджет, то отображение будт происходить по стандарту отступы, заголовок и т.д.
Image Widget — плагин для создания нового типа виджета специально для изображений, без лишних «обводок».

В версии WP 4.8 подобный виджет стал входит в базовый набор

Условия вывода виджета

Widget Logic (300 000) — плагин позволяющий прописывать логику вывода каждого виджета. В виджетах появляется специальное поле Widget logic в котором мы прописываем условия (категория, запись и т.д.). Весь функционал плагина строится на базовых запросах условий wordpress. Преимуществом плагина является его простота и лаконичность. Можно строить условия с дополнительными таксономиями, в частности категориями товаров woocommerce:

is_product_category('gipsokarton')
Интересный запрос is_product_category надо подробнее изучить.

Widget Context (60 000) — еще один аналогичный плагин. При установке Woocommerce расширяет варианты запросов. Чтобы показывать виджет в категории и товарах входящих в нее необходимо выбрать пункт: Показывать в > Архив записей «Товары», а в поле URL прописать

catalog/gipsokarton/ 
catalog/gipsokarton/*
При отображении фильтров по атрибутам товаров, их нужно скрывать при ссылке /shop/ и в результатах поиска. Вместо фильтра по производителю лучше вывести список производителей в виде ссылок на архивы.
$args = array(
'order' => 'ASC',
'hide_empty' => 1,
'hierarchical' => true,
'depth' => 1,
'taxonomy' => 'pa_firma',
'title_li' => '',
'separator' => ''
);
wp_list_categories( $args );

Отключение стандартных виджетов

Мы можем отключить какие-то стандартные виджеты, чтобы они не мешались «под ногами».

//Удаление стандартных виджетов
add_action( 'widgets_init', 'widgets_init_example' );
 
function widgets_init_example() {
    unregister_widget( 'WP_Widget_Pages' );
  //unregister_widget( 'WP_Widget_Calendar' );
    unregister_widget( 'WP_Widget_Archives' );
    unregister_widget( 'WP_Widget_Links' );
    unregister_widget( 'WP_Widget_Meta' );
  //unregister_widget( 'WP_Widget_Search' );
  //unregister_widget( 'WP_Widget_Text' );
  //unregister_widget( 'WP_Widget_Categories' );
  //unregister_widget( 'WP_Widget_Recent_Posts' );
    unregister_widget( 'WP_Widget_Recent_Comments' );
    unregister_widget( 'WP_Widget_RSS' );
  //unregister_widget( 'WP_Widget_Tag_Cloud' );
}

Выводим виджеты woocommerce

Любой виджет можно вывести в любом месте верстки с помощью функции the_widget, нужно правильно указывать название виджета и его аргументы.

Виджет категорий woocommerce

<?php the_widget( 'WC_Widget_Product_Categories', 'dropdown=1' ); ?>

Виджет недавно просмотренных товаров

<?php the_widget( 'WC_Widget_Recently_Viewed', 'number=5&title=Недавно просмотренные товары' ); ?>

Почему-то сам по себе он работает не корректно — не запоминает просмотренные товары. Но начинает работать когда активировать родной виджет и вывести где-либо.

Решение: активировать, но скрыть (display: none;) основной виджет.

CSS класс виджета

У стандартных виджетов WP есть одна проблема — у разных виджетов одинаковый класс widget. Было бы гораздо удобнее, чтобы у каждого уникального виджета был бы id или дополнительный класс.

Плагин Widget CSS Classes (100 000 установок) как раз решает эту проблему. В каждом виджете появляется дополнительное поле для указания дополнительного класса. И еще плагин автоматически назначает классы: widget-first, widget-last, widget-odd, widget-even и порядковые номера (widget-1, widget-2 и т.д.).

Поле класс у виджетов без плагина:

function kc_widget_form_extend( $instance, $widget ) {
	if ( !isset($instance['classes']) )
        $instance['classes'] = null;   
		$row = "";
        $row .= "Class:\t<input type='text' name='widget-{$widget->id_base}[{$widget->number}][classes]' id='widget-{$widget->id_base}-{$widget->number}-classes' class='widefat' value='{$instance['classes']}'/>\n";
        $row .= "</p>\n";    
        echo $row;
    return $instance;
}

add_filter('widget_form_callback', 'kc_widget_form_extend', 10, 2);
function kc_widget_update( $instance, $new_instance ) {
    $instance['classes'] = $new_instance['classes'];
	return $instance;
}
add_filter( 'widget_update_callback', 'kc_widget_update', 10, 2 );
function kc_dynamic_sidebar_params( $params ) {
    global $wp_registered_widgets;
    $widget_id    = $params[0]['widget_id'];
    $widget_obj    = $wp_registered_widgets[$widget_id];
    $widget_opt    = get_option($widget_obj['callback'][0]->option_name);
    $widget_num    = $widget_obj['params'][0]['number'];    
    if ( isset($widget_opt[$widget_num]['classes']) && !empty($widget_opt[$widget_num]['classes']) )
        $params[0]['before_widget'] = preg_replace( '/class="/', "class=\"{$widget_opt[$widget_num]['classes']} ", $params[0]['before_widget'], 1 );
    return $params;
}
add_filter( 'dynamic_sidebar_params', 'kc_dynamic_sidebar_params' );

Проверка активен ли виджет

Проверяем активен ли виджет или нет:

<?php $sidebar_id = is_active_widget( 0, 0, 'woocommerce_layered_nav' );
if( $sidebar_id ){
echo 'Во фронте есть активный виджет фильтр по свойствам товаров';
} else { echo 'Во фронте нет активного виджета фильтр по свойствам товаров'; } ?>

Проверка активен ли сайтбар (т.е. есть ли в нем хоть один виджет).

Список виджетов woocommerce:

woocommerce_layered_nav — Фильтрация товаров по атрибутам
woocommerce_layered_nav_filters — Активные фильтры товаров
woocommerce_product_categories — Категории товаров
woocommerce_recently_viewed_products — Недавно просмотренные товары
woocommerce_widget_cart — Корзина
woocommerce_product_tag_cloud — Облако меток товаров woocommerce_product_search — Поиск товаров
woocommerce_recent_reviews — Последние обзоры товара
woocommerce_products — Товары
woocommerce_top_rated_products — Товары по рейтингу
woocommerce_rating_filter — Фильтрация товаров по рейтингу
woocommerce_price_filter — Фильтрация товаров по цене

[site-socialshare]
  • Похожие записи
  • Комментарии
  • Вложения
Виджет подкатегорий

Виджет подкатегорий

Реализация виджета текущих подкатегорий и если есть родительская категория выводить и ее с отдельным стилем. Неплохое решение для навигации: в этом случае целесообразно в основном блоке выводить все записи категории Читать далее »

Фильтры Woocommerce

Фильтры Woocommerce

В базовую комплектацию Woocommerce входит набор виджетов для фильтрации товаров. Но данные виджеты необходимо несколько доработать. WooCommerce Навигация по слоям В этом виджете необходимо задать атрибут товара по которому будет Читать далее »

/ /
Виджет последних записей

Виджет последних записей

Создаем виджет последних записей, с миниатюрами. Вставить в текстовый виджет, posts_per_page — количество, category — если убрать, то будут все рубрики. Можно добавлять и другие параметры запроса. <ul class="lastpostvidget"> <?php Читать далее »

Добавить комментарий

Пока нет комментариев. Будь первым!

Виджеты
Форма подписки без плагина
Рекомендации для васФорма подписки без плагинаOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.