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 );