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

Приклади

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.0.2

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 List of sidebars and their widgets.
	 *
	 * @ Since 2.7.0
	 *
	 * @param array $sidebars_widgets На поєднанні array of sidebars and their widgets.
	 */
	return apply_filters( 'sidebars_widgets', $sidebars_widgets );
}

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

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