register_sidebar()WP 2.2.0

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

Функция регистрирует панель (место, контейнер) для виждетов и формат вывода для каждого виджета:

  • html тег заголовка.
  • html тег до и после виджета.

Зарегистрировав панель, в админ-панели появится место, куда можно помещать виджеты. Разместив виджеты в панели, мы сможем вывести панель с виджетами в шаблоне с помощью функции dynamic_sidebar(), (см. пример 2).

Функцию нужно подключать к событию widgets_init.

Эта функция автоматически активирует поддержку виджетов. Смотрите add_theme_support('widgets')

Не используйте названия идентификаторов для параметра ID из этого списка. Там же, по ссылке, вы найдете небольшую функцию, которая собирает уже используемые ID в WordPress.

Используйте register_sidebars(), чтобы создать несколько панелей за раз. Это позволит создать уникальное имя для каждой панели, например: "Правый сайдбар", "Левый сайдбар". Несмотря на то, что эти названия видны только в админ-панели, важно дать пользователю представление о том где будет выводиться панель.

register_sidebars() также рекомендуется использовать, если нужно зарегистрировать несколько однотипных панелей для виждетов (названия отличаются числами), например: Панель 1, Панель 2, Панель 3.

Дефолтные значения параметров before/after рассчитаны на темы, которые создают боковые панели в виде LI списка с заголовками в H2 теге. Такая регистрация рекомендуется разработчиками WordPress для всех тем.

Если по каким-то причинам, маркировку нужно изменить, рекомендуется скопировать id (id="%1$s") и class (class="widget %2$s") атрибуты как указано по умолчанию и не указывать их жестко. Нужно это, чтобы они создавались динамически с помощью функции sprintf().

Нельзя оставлять параметры name и id пустыми!

Их можно либо не указывать вообще, либо обязательно указать при этом, нужно чтобы они были уникальными и не пустыми.

Если не определить id или name, то для них будут использованы значения по умолчанию с инкрементом:

'name' => sprintf(__('Sidebar %d'), $i ),
'id' => "sidebar-$i",

Где $i будет числом равным кол-ву панелей на сайте + 1.

Основа для: register_sidebars()
Хуки из функции

Возвращает

Строку. Идентификатор переданный в параметре ID.

Шаблон использования

add_action( 'widgets_init', 'register_my_widgets' );
function register_my_widgets(){

	register_sidebar( array(
		'name'          => sprintf(__('Sidebar %d'), $i ),
		'id'            => "sidebar-$i",
		'description'   => '',
		'class'         => '',
		'before_widget' => '<li id="%1$s" class="widget %2$s">',
		'after_widget'  => "</li>\n",
		'before_title'  => '<h2 class="widgettitle">',
		'after_title'   => "</h2>\n",
		'before_sidebar' => '', // WP 5.6
		'after_sidebar'  => '', // WP 5.6
	) );
}

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

register_sidebar( $args );
$args(строка/массив)

Аргументы для регистрации панели виджетов. Можно указывать в виде строки или массива:
Если в виде строки, тогда аргументы нужно разделять знаком &:

'name=Sidebar&id=my_prefix_sidebar'

Те же аргументы в массиве:

array(
	'name' => 'Sidebar',
	'id'   => 'my_prefix_sidebar',
)

По умолчанию: параметры по умолчанию.

Аргументы параметра $args

Большинство из опций ниже указывают подходящие для темы теги оборачивающие каждый виджет и его заголовок.

name(строка)
Название панели виджетов. Название будет видно в админ-панели WordPress. По умолчанию "Боковая колонка 1" (локализация от Sidebar $i, где $i порядковый номер сайдбара). Значение не должно быть пустым!
По умолчанию: sprintf(__('Sidebar %d'), $i )
id(строка)
Идентификатор виджета. Строка, в которой не должно быть заглавных букв и пробелов. Значение не должно быть пустым, если оставить этот параметр пустым, то в режиме разработки (при дебаге) получите заметку типа E_USER_NOTICE.
По умолчанию: "sidebar-$i"
description(строка)
Текст описывающий где будет выводиться панель виджетов. Показывается в панели управления виджетами.
По умолчанию: ''
class(строка)
CSS класс, который будет добавлен главному HTML тегу панели виджетов.
По умолчанию: ''
before_widget(строка)
HTML код, который будет расположен перед каждым виджетом в панели. Например: <li class="my-widget">. Конструкции %1$s и %2$s будут заменены на id и class используемого в сайдбаре виджета.
По умолчанию: '<li id="%1$s" class="widget %2$s">'
after_widget(строка)
HTML код, который будет расположен после каждого виджета в панели. Например: </li>.
По умолчанию: "</li>\n"
before_title(строка)
HTML код перед заголовком виджета.
По умолчанию: '<h2 class="widgettitle">'
after_title(строка)
HTML код после заголовка виджета.
По умолчанию: "</h2>\n"
before_sidebar(строка) (WP 5.6)
HTML перед сайдбаром. Получает аргумент $id в %1$s и $class в %2$s. Выводится после хука dynamic_sidebar_before.
По умолчанию: ''
after_sidebar(строка) (WP 5.6)
HTML после сайдбара. Выводится перед хуком dynamic_sidebar_after.
По умолчанию: ''
$show_in_rest(true/false) (WP 5.9)
Нужно ли показывать этот сайдбар публично в REST API.
По умолчанию: false (показывать только администраторам).

Примеры

2

#1 Зарегистрируем панель виджетов для главной страницы сайта

Добавим код в functions.php:

function register_my_widgets(){
	register_sidebar( array(
		'name' => 'Боковая панель на главной странице',
		'id' => 'homepage-sidebar',
		'description' => 'Выводиться как боковая панель только на главной странице сайта.',
		'before_widget' => '<li class="homepage-widget-block">',
		'after_widget' => '</li>',
		'before_title' => '<h2 class="widgettitle">',
		'after_title' => '</h2>',
	) );
}
add_action( 'widgets_init', 'register_my_widgets' );

В файл home.php вставим вывод панели:

<div class="custom">
	<?php
	if ( function_exists('dynamic_sidebar') )
		dynamic_sidebar('homepage-sidebar');
	?>
</div>
1

#2 Регистрация виджетов для боковой панели сайта

Код ниже, зарегистрирует панель под названием "Правая боковая панель сайта". Название панели будет обвёрнуто в теги <div class="title"> и </div>:

function register_my_widgets(){
	register_sidebar( array(
		'name' => "Правая боковая панель сайта",
		'id' => 'right-sidebar',
		'description' => 'Эти виджеты будут показаны в правой колонке сайта',
		'before_title' => '<h2>',
		'after_title' => '</h2>'
	) );
}
add_action( 'widgets_init', 'register_my_widgets' );

После того, как мы разместим этот код в файл темы functions.php, в админ-панели на странице виджетов, появится панель, куда мы сможем добавить виджеты. В шаблоне эта панель выводится с помощью функции dynamic_sidebar():

<?php
	if ( function_exists('dynamic_sidebar') )
		dynamic_sidebar('right-sidebar');
?>

Вы можете купить недорогие репины в Пинтерест с помощью сервиса Doctor SMM. На сайте Вам будет предложен выбор любого необходимого количества материала. К тому же, Вы сможете развивать не только посты, но и всю страницу целиком, сделав заказ еще и на подписчиков.

Заметки

  • Global. Массив. $wp_registered_sidebars Registered sidebars.

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

С версии 2.2.0 Введена.
С версии 5.6.0 Added the before_sidebar and after_sidebar arguments.
С версии 5.9.0 Added the show_in_rest argument.

Код register_sidebar() WP 6.4.3

function register_sidebar( $args = array() ) {
	global $wp_registered_sidebars;

	$i = count( $wp_registered_sidebars ) + 1;

	$id_is_empty = empty( $args['id'] );

	$defaults = array(
		/* translators: %d: Sidebar number. */
		'name'           => sprintf( __( 'Sidebar %d' ), $i ),
		'id'             => "sidebar-$i",
		'description'    => '',
		'class'          => '',
		'before_widget'  => '<li id="%1$s" class="widget %2$s">',
		'after_widget'   => "</li>\n",
		'before_title'   => '<h2 class="widgettitle">',
		'after_title'    => "</h2>\n",
		'before_sidebar' => '',
		'after_sidebar'  => '',
		'show_in_rest'   => false,
	);

	/**
	 * Filters the sidebar default arguments.
	 *
	 * @since 5.3.0
	 *
	 * @see register_sidebar()
	 *
	 * @param array $defaults The default sidebar arguments.
	 */
	$sidebar = wp_parse_args( $args, apply_filters( 'register_sidebar_defaults', $defaults ) );

	if ( $id_is_empty ) {
		_doing_it_wrong(
			__FUNCTION__,
			sprintf(
				/* translators: 1: The 'id' argument, 2: Sidebar name, 3: Recommended 'id' value. */
				__( 'No %1$s was set in the arguments array for the "%2$s" sidebar. Defaulting to "%3$s". Manually set the %1$s to "%3$s" to silence this notice and keep existing sidebar content.' ),
				'<code>id</code>',
				$sidebar['name'],
				$sidebar['id']
			),
			'4.2.0'
		);
	}

	$wp_registered_sidebars[ $sidebar['id'] ] = $sidebar;

	add_theme_support( 'widgets' );

	/**
	 * Fires once a sidebar has been registered.
	 *
	 * @since 3.0.0
	 *
	 * @param array $sidebar Parsed arguments for the registered sidebar.
	 */
	do_action( 'register_sidebar', $sidebar );

	return $sidebar['id'];
}