sidebars_widgets хук-фільтрWP 2.7.0

Дозволяє змінити список сайдбарів та віджетів у них.

Використання

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 віджетів, прикріплені до того чи іншого сайдбару.

Приклади

0

#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Введено.

Де викликається хук

sidebars_widgets

wp-includes/widgets.php 1039

return apply_filters( 'sidebars_widgets', $sidebars_widgets );

Де використовується хук у WordPress

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *