sidebars_widgets
Дозволяє змінити список сайдбарів та віджетів у них.
Використання
add_filter( 'sidebars_widgets', 'wp_kama_sidebars_widgets_filter'); /** * Function for `sidebars_widgets` filter-hook. * * @param array $sidebars_widgets На поєднанні array of sidebars and their widgets. * * @return array */ function wp_kama_sidebars_widgets_filter( $sidebars_widgets ){ // Filter... return $sidebars_widgets; }
-
$sidebars_widgets
(масив) Асоціативний масив із сайдбарами та віджетами в них.
Приклад даних, що проходять через хук-фільтр, для теми TownPress :
Array ( [wp_inactive_widgets] => Array ( [0] => lsvr_directory_listing_list-3 [1] => lsvr_townpress_post_list-4 [2] => lsvr_townpress_post_featured-3 [3] => archives-2 [4] => meta-2 [5] => categories-2 [6] => recent-comments-2 ) [lsvr-townpress-default-sidebar-left] => Array ( [0] => search-2 [1] => recent-posts-2 ) [lsvr-townpress-default-sidebar-right] => Array ( [0] => custom_html-2 [1] => cherry_widget_trending_posts-2 ) [lsvr-townpress-footer-widgets] => Array ( [0] => text-2 [1] => tag_cloud-2 ) [lsvr-townpress-custom-sidebar-1] => Array ( ) )
Як видно з прикладу, перший рівень масиву – це список сайдбарів, де ключ масиву є ID сайдбару, що вказується під час реєстрації функцією register_sidebar() . На другому рівні масиву знаходяться ID віджетів, прикріплені до того чи іншого сайдбару.
Приклади
#1 Замінимо віджети з одного сайдбару віджетами іншого
Нехай у нас є рубрика Огляди ( taxonomy=category та slug=reviews ) із Записами ( post_type=post ). Ми хочемо в оглядах виводити в лівому сайдбарі теми інші віджети, відмінні від тих, що виводяться в цьому сайдбарі на всьому сайті. Є кілька рішень проблеми, наприклад змінити логіку та шаблон виведення сайдбарів теми, але що якщо не хочеться змінювати тему? Допоможе хук-фільтр sidebars_widgets ! Цей код можна використовувати як у темі, так і в плагіні.
// 1 крок: Реєструємо новий сайдбар з id=reviews-sidebar add_action( 'widgets_init', 'cr_register_sidebars'); function cr_register_sidebars() { register_sidebar(array( 'name' => 'Reviews Sidebar', 'id' => 'reviews-sidebar', 'description' => 'Сайдбар для оглядів', 'class' => '', 'before_widget' => '<div id="%1$s" class="widget %2$s"><div class="widget__inner">', 'after_widget' => '</div></div>', 'before_title' => '<h3 class="widget__title">', 'after_title' => '</h3>', ))); } // 2 крок: Замінюємо віджети 'sidebar-left' на віджети 'reviews-sidebar' add_action( 'wp', 'cr_main_actions'); function cr_main_actions() { // Перевіряємо, що поточний запис відноситься до рубрики "Огляди" if ( is_singular( 'post' ) && in_category( 'reviews' ) ) { add_filter( 'sidebars_widgets', 'cr_sidebars_widgets'); } } // Сама заміна віджетів function cr_sidebars_widgets( $sidebars_widgets ) { $sidebars_widgets['sidebar-left'] = $sidebars_widgets['reviews-sidebar']; return $sidebars_widgets; }
список змін
З версії 2.7.0 | Введено. |
Де викликається хук
return apply_filters( 'sidebars_widgets', $sidebars_widgets );