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 За допомогою stored registered widgets.
  • Global. Масив. $wp_registered_widget_controls Stores the registered widget controls (options).
  • Global. Масив. $wp_registered_widget_updates
  • Global. Масив. $_wp_deprecated_widgets_callbacks

список змін

З версії 2.2.0Введено.
З версії 5.3.0Formalizated existing and already documented …$params parameter by adding it до функції signature.
З версії 5.8.0Added show_instance_in_rest option.

Код wp_register_sidebar_widget() WP 6.0.2

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 На array of default widget arguments.
		 */
		do_action( 'wp_register_sidebar_widget', $widget);
		$wp_registered_widgets[ $id ] = $widget;
	}
}

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

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