WordPress как на ладони
wordpress jino

Display Widgets: скрываем виджеты WordPress

Плагин о котором эта заметка, позволяет скрывать или наоборот отображать виджеты по условию, т.е. в зависимости от страницы сайта. Он пригодится, например:

  • когда нужно скрыть виджет поиска на странице с результатами поиска.
  • скрыть виджет последних записей на главной странице сайта
  • скрыть виджет на определенной языковой версии сайта (при использовании плагина WPML)
  • и т.д.

Причин скрывать виджет на конкретной странице может быть тысячи: начиная от юзабилити заканчивая дублированием контента.

Плагин Display Widgets удалён с репозитория WordPress в связи с неправомерными действиями, подробности читайте в статье "В плагине Display Widgets, который уже трижды удаляли с WordPress.org, в итоге нашли бэкдор". Статья оставлена для истории.

Display Widgets - простой в освоении плагин и отлично выполняет свою задачу, удобен для тех, кто не знает как использовать условные теги WordPress (считай, программировать) - все делается мышкой в админке.

Настройки виджета

После активации плагина к оригинальным настройкам виджета добавляются три новых:

  • Выбор, кому показывать виджет - всем пользователям, или только авторизованным (вошедшим), или только неавторизованным (не вошедшим).
  • Что делать с виджетом - скрывать или отображать по условию, которое зададим ниже.
  • В каком разделе сайта применять правила, указанные в пункте 1 и 2.

По умолчанию всегда выбрано «Скрыть на выбранных страницах», потому после активации плагина ничего не произойдет и виджеты будут отображаться как и раньше. Чтобы скрыть виджет ему нужно указать условие скрытия.

Пример скрытия виджета

Большинство тем WordPress построены так, что на главной странице выводятся последние (свежие) записи и дополнительно в сайдбаре отображается виджет "Свежие записи", который по сути дублирует ленту. Избавимся от него, но только на главной странице - на других страницах он полезен. Для этого зайдем на страницу с виджетами и отредактируем с условием нашей задачи, а именно:

  • Показывать виджет всем
  • Скрыть на выбранных страницах
  • Ставим галочку на пункте "Главная"

Изменение виджета в админке

Всё просто!

Теперь на главной странице виджет не отображается, а на всех остальных он присутствует. Примеров можно привести много (5 примеров присутствуют в видео), но суть работы с плагином неизменна.

Подобные настройки доступны для любого виджета, как стандартного, так и предоставляемые темой, плагинами или самописные.

Пользоваться плагином Display Widgets несложно и для неискушенного программированием администратора он сослужит добрую службу.

Недостатки

  • Непрозрачное поведение при указании правил для рубрик
  • В списке нет Записей, приходится вписывать их ID вручную. Впрочем, это не совсем недостаток, потому что чтобы за список получился, когда на сайте несколько тысяч записей?

Вопросы и ответы

Почему я не вижу настроек у виджетов

Это известное ограничение. Виджеты, написанные в pre-2.8 формате не имеют хуков, позволяющие Display Widgets управлять виджетами.

Мои виджеты не отображаются при активации

Это возможно при работе с некоторыми плагинами или темами. Чтобы скорректировать такое поведение виджетов, добавьте в functions.php темы или файл плагина следующий код:

add_filter( 'dw_callback_trigger', 'dw_callback_trigger' );
function dw_callback_trigger(){
	return 'wp_head'; // измените на: plugins_loaded, after_setup_theme, wp_loaded, wp_head или другой хук на выбор
}

Restrict Widgets - еще один виджет по логике копия Display Widgets. Только более новый плагин от компании dFactory.

Widget Logic - еще один плагин для скрытия виджетов

Widget Logic - плагин для тех, кто знает что такое условные теги и с чем их едят. Этот плагин с большими возможностями.

Условия тут задаются как и в Display Widgets - на странице виджетов, но не мышкой, а нужно вписывать сами условные теги или PHP условия, именно за счет этого в Widget Logic можно создавать сложные условия, хотя как правило это не нужно.

Примеры условий

  • is_home()
    главная страница сайта

  • ! is_page('about')
    везде кроме страницы about

  • ! is_user_logged_in()
    показать когда юзер не авторизован

  • is_category( array(5,9,10,11) )
    показать в любой из указанных категорий: 5,9,10,11

  • is_single() && in_category('baked-goods')
    показать на отдельной странице записи и только если запись находится в рубрике 'baked-goods'

  • current_user_can('manage_options')
    только для администратора

  • strpos($_SERVER['HTTP_REFERER'], "google.com") != false
    показать виджет, только если пользователь пришел из поиска Гугл

  • is_category() && in_array($cat, get_term_children( 5, 'category'))
    показать на странице рубрики 5 или на любой вложенной в нее рубрике

  • global $post; return ( in_array(77,get_post_ancestors($post)) );
    на любой дочерней странице, страницы 77

  • global $post; return ( is_page('home') || ($post->post_parent == '13') );
    на странице 'home' или дочерней странице, страницы 13
campusboy 1836wp-plus.ru
WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.
Display Widgets: скрываем виджеты WordPress 2 комментария
  • petrozavodsky675 cайт: alkoweb.ru

    я тоже такой делал но с интерфейсом https://github.com/petrozavodsky/bro-widget-visibility из модуля джетпака, но там факап с несколькими условиями может кому то интересно будет. Хотя джетпак уже подтянулся до этой функциональности наверное не нужно уже.

    1
    • campusboy1836 cайт: wp-plus.ru

      Ставить Джетпак ради такой фишки навряд ли будут, так что спасибо за форк!

      Ответить4 месяца назад #

Здравствуйте, !

Ваш комментарий