WordPress как на ладони
wordpress jino

wp_get_sidebars_widgets() WP 2.2.0

Получает список всех сайдбаров (панелей виджетов) и список всех виджетов в этих сайдбарах.

Использует глобальные переменные $_wp_sidebars_widgets, $sidebars_widgets
Использует опцию sidebars_widgets

Используется в: is_active_widget(), is_active_sidebar().
✈ 1 раз = 0.00007с = очень быстро | 50000 раз = 3.69с = быстро PHP 7.1.1, WP 4.7.2
Хуки из функции:
Возвращает

Массив. Ассоциативный массив, где в ключе находится ID панели виджетов (сайдабар), а в значении массив со всеми виджетами из каждой панели, включая панель с неактивными виджетами.

Использование

wp_get_sidebars_widgets( $deprecated = true );
$deprecated(логический)
Не используется. Параметр отменен.
По умолчанию: true

Примеры

#1 Что возвращает функция

$wg = wp_get_sidebars_widgets();

/* $wg
Array
(
	[wp_inactive_widgets] => Array
		(
			[0] => text-8
			[1] => text-5
		)

	[sidebar] => Array
		(
			[0] => democracy-2
			[0] => text-1
		)

)
*/

#2 Посчитаем количество виджетов

Допустим, нам нужно сделать что-либо в зависимости от того, сколько виджетов находится в панели. Например, есть горизонтальный сайдбар, в который можно добавить произвольное количество виджетов. Нужно в зависимости от их количества каждому из них устанавливать разный css класс.

Например, если виджет в сайдбаре один, то col-lg-12. Если два - то col-lg-6.

Для этого узнаем название нужного сайдбара, допусти оно sidebar_horizontal.

$wg = wp_get_sidebars_widgets();
$myid = 'sidebar_horizontal';

// нужный нам сайдбар существует
if( isset($wg['sidebar_horizontal']) ){
	$wgcount = count($wg[$myid]);

	$class = 'col-lg-12';

	if( $wgcount == 2 )     $class = 'col-lg-6';
	elseif( $wgcount == 3 ) $class = 'col-lg-4';
	elseif( $wgcount == 4 ) $class = 'col-lg-3';

	// ставим класс через хук 
	add_filter('dynamic_sidebar_params', function($param) use($class){

		foreach( $param as & $data ){
			if( $data['id'] == $myid ){
				$data['before_widget'] = str_replace('class="','class="'. $class .' ', $data['before_widget'] );
			}
		}

		return $param;
	});

}

// выводим виджеты
dynamic_sidebar('sidebar');

Код wp get sidebars widgets: wp-includes/widgets.php WP 4.8.2

<?php
function wp_get_sidebars_widgets( $deprecated = true ) {
	if ( $deprecated !== true )
		_deprecated_argument( __FUNCTION__, '2.8.1' );

	global $_wp_sidebars_widgets, $sidebars_widgets;

	// If loading from front page, consult $_wp_sidebars_widgets rather than options
	// to see if wp_convert_widget_settings() has made manipulations in memory.
	if ( !is_admin() ) {
		if ( empty($_wp_sidebars_widgets) )
			$_wp_sidebars_widgets = get_option('sidebars_widgets', array());

		$sidebars_widgets = $_wp_sidebars_widgets;
	} else {
		$sidebars_widgets = get_option('sidebars_widgets', array());
	}

	if ( is_array( $sidebars_widgets ) && isset($sidebars_widgets['array_version']) )
		unset($sidebars_widgets['array_version']);

	/**
	 * Filters the list of sidebars and their widgets.
	 *
	 * @since 2.7.0
	 *
	 * @param array $sidebars_widgets An associative array of sidebars and their widgets.
	 */
	return apply_filters( 'sidebars_widgets', $sidebars_widgets );
}

Cвязанные функции

Из метки: sidebar (widget Виджет)

wp_get_sidebars_widgets 2 комментария
  • Дмитрий cайт: polimerskins.ru

    Добрый вечер. Пробовал найти решение через поисковые системы - не получилось... Пару лет тому назад я часто обращался к Вашему проекту дабы решить какие вопросы связанные с WordPress и вот сегодня в поисках решения, очередной поисковой запрос выдал мне Ваш сайт. Подскажите, вот на этом сайте http://polimerskins.ru/shop/ виджеты изначально находятся в раскрытом состояние. Как сделать, чтобы они были изначально закрыты?

    Ответить3 месяца назад #
    • campusboy1832 cайт: wp-plus.ru

      Привет. В JS добавь:

      jQuery(document).ready(function(){
        jQuery('.widget-title .toggle').click();
      });
      1
      Ответить3 месяца назад #

Здравствуйте, !

Ваш комментарий