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