Видимость виджета 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.