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

wp_get_sidebars_widgets()WP 2.2.0

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

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

Внутренняя функция — эта функция рассчитана на использование самим ядром. Не рекомендуется использовать эту функцию в своем коде.

1 раз — 0.00007 сек (очень быстро) | 50000 раз — 3.69 сек (быстро) | PHP 7.1.1, WP 4.7.2
Хуки из функции

Возвращает

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

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

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

Примеры

0

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

)
*/
0

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

Заметки

  • Global. Массив. $_wp_sidebars_widgets
  • Global. Массив. $sidebars_widgets

Список изменений

С версии 2.2.0 Введена.

Код wp_get_sidebars_widgets() WP 6.4.3

function wp_get_sidebars_widgets( $deprecated = true ) {
	if ( true !== $deprecated ) {
		_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 );
}
2 комментария
    Войти