wp_register_sidebar_widget()WP 2.2.0

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

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

Возвращает

null. Ничего не возвращает.

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

wp_register_sidebar_widget( $id, $name, $output_callback, $options, ...$params );
$id(строка/число) (обязательный)
ID виджета, уникальное название. Например, your_widget_1.
$name(строка) (обязательный)
Заголовок виджета, по которому его можно будет узнать в админ-панели.
$output_callback(строка) (обязательный)
Функция обратного вызова, которая будет запускаться при вызове виджета в шаблоне.
$options(строка/массив)

Настройки виджета. Пример:

$widget_ops  = array(
	'classname'                   => 'widget_block',
	'description'                 => __( 'A widget containing a block.' ),
	'customize_selective_refresh' => true,
	'show_instance_in_rest'       => true, // c WP 5.8
	'mime_type'                   => '',
);

По умолчанию: array()

...$params(строка/массив/число/объект/логический)
Параметры, которые будут добавлены к виджету.

Параметры передаваемые функции обратного вызова ($output_callback)

function my_output_callback_function( $args, $params ){ ... }
$args(массив) (обязательный)
Параметры виджета, регистрируемые при регистрации виджета: widget_id, widget_name и т.д.
$params(массив) (обязательный)
Дополнительные параметры передаваемые функции, параметр $params функции wp_register_sidebar_widget().

К параметрам применяется фильтр dynamic_sidebar_params, перед вызовом функции обратного вызова.

Примеры

0

#1 Создание виджета

Следующий код, создаст виджет "Мой виджет", который станет доступен в админ-панели WordPress. Этот виджет можно будет перетащить в доступную панель виджетов (сайдбар).

function your_widget_display($args) {
   extract($args);
   echo $before_widget;

   echo $before_title . 'Мой уникальный виджет' . $after_title;
   // Код виджета, при выводе в шаблон
   echo "Your Widget Test";

   echo $after_widget;
}

wp_register_sidebar_widget(
	'your_widget_1',        // ID виджета
	'Мой виджет',           // Заголовок виджета
	'your_widget_display',  // Функция обратного вызова
	array(                  // Настройки
		'description' => 'Описание виджета, для чего он нужен, что он делает'
	)
);
0

#2 Регистрация рекурсивного виджета

При регистрации виджета с помощью wp_register_sidebar_widget(), виджет можно будет использоваться только 1 раз, его можно будет добавить только в 1 сайдбар. Для регистрации виджетов, которые можно использовать множество раз, используйте функцию register_widget():

class My_New_Widget extends WP_Widget {

	function My_New_Widget () {
		// Экземпляр родительского объекта
		parent::__construct( false, 'Заголовок нового виджета' );
	}

	function widget( $args, $instance ) {
		// Вывод виджета на экран
	}

	function update( $new_instance, $old_instance ) {
		// Сохранение настроек виджета
	}

	function form( $instance ) {
		// Форма настроек виджета в админ-панели
	}
}

function register_My_New_Widget() {
	register_widget( 'My_New_Widget' );
}

add_action( 'widgets_init', 'register_My_New_Widget' );

Заметки

  • Global. Массив. $wp_registered_widgets Uses stored registered widgets.
  • Global. Массив. $wp_registered_widget_controls Stores the registered widget controls (options).
  • Global. Массив. $wp_registered_widget_updates The registered widget updates.
  • Global. Массив. $_wp_deprecated_widgets_callbacks

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

С версии 2.2.0 Введена.
С версии 5.3.0 Formalized the existing and already documented ...$params parameter by adding it to the function signature.
С версии 5.8.0 Added show_instance_in_rest option.

Код wp_register_sidebar_widget() WP 6.7.1

function wp_register_sidebar_widget( $id, $name, $output_callback, $options = array(), ...$params ) {
	global $wp_registered_widgets, $wp_registered_widget_controls, $wp_registered_widget_updates, $_wp_deprecated_widgets_callbacks;

	$id = strtolower( $id );

	if ( empty( $output_callback ) ) {
		unset( $wp_registered_widgets[ $id ] );
		return;
	}

	$id_base = _get_widget_id_base( $id );
	if ( in_array( $output_callback, $_wp_deprecated_widgets_callbacks, true ) && ! is_callable( $output_callback ) ) {
		unset( $wp_registered_widget_controls[ $id ] );
		unset( $wp_registered_widget_updates[ $id_base ] );
		return;
	}

	$defaults = array( 'classname' => $output_callback );
	$options  = wp_parse_args( $options, $defaults );
	$widget   = array(
		'name'     => $name,
		'id'       => $id,
		'callback' => $output_callback,
		'params'   => $params,
	);
	$widget   = array_merge( $widget, $options );

	if ( is_callable( $output_callback ) && ( ! isset( $wp_registered_widgets[ $id ] ) || did_action( 'widgets_init' ) ) ) {

		/**
		 * Fires once for each registered widget.
		 *
		 * @since 3.0.0
		 *
		 * @param array $widget An array of default widget arguments.
		 */
		do_action( 'wp_register_sidebar_widget', $widget );
		$wp_registered_widgets[ $id ] = $widget;
	}
}