Видимость виджета WordPress на определенной странице

Иногда бывает необходимо скрыть виджет на определенной странице сайта. Стандартными средствами CMS сделать это невозможно, поэтому остается два выхода – использовать плагины или скрыть виджет программно.

Конечно использование плагинов в данном очень упрощает жизнь, ведь их великое множество – Display Widgets, Restrict Widgets, Widgets Control, Widget Visibility и так далее. Вы легко можете найти их в списке доступных для установки.

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

Использование хука sidebars_widgets для управления видимостью виджетов WordPress

Для того, чтобы скрыть или показать виджет на определенной странице воспользуемся хуком sidebars_widgets который позволяет изменять список сайдбаров и виджетов в них. Формат использования хука:

add_filter( 'sidebars_widgets', 'filter_function_name' );
function filter_function_name( $sidebars_widgets ){
    // Изменяем...

    return $sidebars_widgets;
}

Предположим, что на главной странице нам нужно скрыть в сайтбаре с ID “sidebar-1” виджет с ID “widget-1”. Получается, что в случае, когда мы находимся на главной странице, в нашем сайтбаре нужно найти виджет по имени и, если он успешно найден – “вырезать” его. В итоге получим следующий код:

add_filter( 'sidebars_widgets', 'hidemywidget' );
function hidemywidget( $sidebars_widgets ) {
  // скрываем везде, кроме главной
  if ( ( is_front_page() || is_home() ) ) {

    foreach ( $sidebars_widgets['sidebar-1'] as $i => $inst ) {
      // проверяем, есть ли такой виджет widget-1
      $pos = strpos($inst, 'widget-1');
      if ( $pos !== false ) {
        // удаляем этот виджет
        unset($sidebars_widgets['sidebar-1'][$i]);
      }
    }

  }

  return $sidebars_widgets;
}

Функцию необходимо добавить в файл function.php.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *