Flector

Как управлять выводом виджетов на основе условий?

При необходимости настроить вывод виджетов только на конкретных страницах сайта вебмастеры обычно устанавливают для этого специальные плагины. Но не все знают, что управлять выводом виджетов в зависимости от каких-либо установленных вами условий можно и без использования плагинов. Например, чтобы вывести определенный виджет только на указанных страницах, вам надо использовать такой код, вставленный в файл functions.php вашей темы:

//вывод виджетов только на указанных страницах start
function wph_hide_widgets($instance, $widget, $args) {
    if ($widget->id_base == 'pages') { 
        if (!is_page(array('6','1608'))) {return false;}
    }
}
add_filter('widget_display_callback', 'wph_hide_widgets', 10, 3);
//вывод виджетов только на указанных страницах end

Данный код заставит выводиться виджет "Страницы" только на страницах с ID равным 6 и 1608. Изменив немного код можно поменять вывод наоборот:

//вывод виджетов везде, кроме указанных страниц start
function wph_hide_widgets($instance, $widget, $args) {
    if ($widget->id_base == 'pages') { 
        if (is_page(array('6','1608'))) {return false;}
    }
}
add_filter('widget_display_callback', 'wph_hide_widgets', 10, 3);
//вывод виджетов везде, кроме указанных страниц end

То есть теперь виджет "Страницы" будет выводиться везде, кроме указанных страниц с ID равным 6 и 1608.

Приведенные выше сниппеты кода управляет выводом стандартного виджета "Страницы" (идентификатор виджета в коде это 'pages'). Названия других используемых на сайте виджетов можно посмотреть в инспекторе кода, отбросив служебную информацию. Для примера рассмотрим виджет плагина Russian Currency, сначала запустим инспектор кода в браузере:

Запуск инспектора кода

Теперь смотрим его заголовок в коде:

Исходный код виджета

Выделенная на скриншоте строчка и указывает название виджета. Вам только надо выкинуть служебную часть, то есть правильным названием виджета будет 'russian_currency'. И это самое название можно использовать в коде:

//вывод виджетов только на указанных страницах start
function wph_hide_widgets($instance, $widget, $args) {
    if ($widget->id_base == 'russian_currency') { 
        if (!is_page(array('6','1608'))) {return false;}
    }
}
add_filter('widget_display_callback', 'wph_hide_widgets', 10, 3);
//вывод виджетов только на указанных страницах end

То есть виджет плагина Russian Currency будет выведен только на указанных страницах. При желании в коде можно перечислять несколько условий:

//вывод виджетов только на указанных страницах start
function wph_hide_widgets($instance, $widget, $args) {
    if ($widget->id_base == 'russian_currency') { 
        if (!is_page(array('6','1608'))) {return false;}
    }
    if ($widget->id_base == 'pages') { 
        if (is_page(array('2','5'))) {return false;}
    }
}
add_filter('widget_display_callback', 'wph_hide_widgets', 10, 3);
//вывод виджетов только на указанных страницах end

Данный сниппет выведет виджет плагина Russian Currency только на страницах с ID равным 6 и 1608 и скроет виджет "Страницы" на всех страницах сайта, кроме страниц с ID равным 2 и 5.

Стандартные виджеты движка имеют такие названия:

'pages'           //страницы
'calendar'        //календарь
'archives'        //архивы
'meta'            //мета
'search'          //поиск
'text'            //текстовой виджет
'categories'      //рубрики
'recent_posts'    //свежие записи
'recent_comments' //свежие комментарии
'rss'             //rss
'tag_cloud'       //облако меток
'nav_menu'        //произвольное меню

К сожалению, у данного сниппета есть и недостаток - он не позволяет управлять раздельным выводом двух одинаковых виджетов. То есть, управляя выводом одного виджета "Страницы" вы автоматически управляете всеми другими виджетами "Страницы" (если их у вас в сайдбаре больше одного).


Написать комментарий

Для вставки кода воспользуйтесь кнопкой "Код". Используйте предпросмотр!