wp_register_widget_control() WP 2.2.0

Реєструє функцію, що відповідає за виведення настройок віджету в адмін-панелі. Збереження опцій віджету відбувається у цій функції.

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

Хуків немає.

Повертає

null. Нічого не вертає.

Використання

wp_register_widget_control($id, $name, $control_callback, $options, $params,...);
$id
(число/рядок) (обов’язковий)
ID віджета, унікальна назва. Наприклад,
your_widget_1. Повинен збігатися з функцією $id
wp_register_sidebar_widget( $id, … ) , яка реєструє віджет.
$name
(рядок/рядок) (обов’язковий)
Назва віджету в сайдбарі. Вказуємо таке ж як id (щось я не знайшов, де воно виводиться)… Назва (заголовок) віджету в адмін-панелі вказується в параметрі $name при реєстрації
wp_register_sidebar_widget( $id, $name, … ) .
$control_callback
(callback/рядок) (обов’язковий)
Назва функції зворотного дзвінка, яка відповідатиме за виведення вмісту віджету в сайдбарі.
$options
(масив)
Містить масив з наступних елементів:
height,
width‘ та
id_base.

‘height’ – не використовується ніколи.

‘width’ – це ширина розгорнутого віджету. Якщо вказати, наприклад, 500, то при розгортанні віджет вилазитиме за межі загального контейнера.

‘id_base’ – визначається автоматично. Щоб віджет можна було використовувати кілька разів, можна вказати цей параметр. Має виглядати приблизно так:
{$id_base}-{$unique_number}. Не зрозумів, як використовувати.


За замовчуванням: array()
$params,…
(змішаний/рядок) (обов’язковий)
Додаткові параметри, які потрібно передати у віджет. Допустимо тут ми вкажемо такі рядки:
wp_register_widget_control( ..., $param1='foo', $param2='foo2' );тоді функції $control_callback будуть передані параметри:
$param1='foo', $param2='foo2'.

Приклади

0

#1 Реєстрація налаштувань віджету

Нам потрібно встановити налаштування для довільного віджету. Функція, що відповідає за виведення настройок віджету (), реєструється так:

<?php
// реєстрація налаштувань віджету
wp_register_widget_control(
	'my_widget', // id
	'my_widget', // name
	'my_widget_control', // назва функції зворотного виклику
	array('width'=>500), // ширина блоку налаштувань
	$param1 = 'foo' // параметр, що передається в my_widget_control($param1) параметр
);

// форма налаштувань віджету та збереження опцій
function my_widget_control( $param1 = array() ) {
	// якщо дані надіслані зберігаємо в опції
	if( isset($_POST['submitted']) ) {
		update_option('my_widget_title', $_POST['widgettitle']);
		update_option('my_widget_twitterurl', $_POST['twitterurl']);
		update_option('my_widget_description', $_POST['description']);
	}

	// Завантажуємо опції
	$widgettitle = get_option('my_widget_title');
	$twitterurl = get_option('my_widget_twitterurl');
	$description = get_option('my_widget_description');
	?>

	Заголовок віджету:<br />
	<input type="text" class="widefat" name="widgettitle" value="<?php echo stripslashes($widgettitle); ?>" />
	<br /><br />

	Опис:<br />
	<textarea class="widefat" rows="5" name="description"><?php echo stripslashes($description); ?></textarea>
	<br /><br />

	Профіль Twitter (URL):<br />
	<input type="text" class="widefat" name="twitterurl" value="<?php echo stripslashes($twitterurl); ?>" />
	<br /><br />

	<input type="hidden" name="submitted" value="1" />
	<?php
}

нотатки

  • Global. Масив. $wp_registered_widget_controls
  • Global. Масив. $wp_registered_widget_updates
  • Global. Масив. $wp_registered_widgets
  • Global. Масив. $_wp_deprecated_widgets_callbacks

список змін

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

Код wp_register_widget_control() WP 6.0.2

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

	$id = strtolower($id);
	$id_base = _get_widget_id_base($id);

	if ( empty( $control_callback ) ) {
		unset( $wp_registered_widget_controls[ $id ] );
		unset( $wp_registered_widget_updates[ $id_base ] );
		return;
	}

	if ( in_array( $control_callback, $_wp_deprecated_widgets_callbacks, true ) && ! is_callable( $control_callback ) ) {
		unset($wp_registered_widgets[$id]);
		return;
	}

	if ( isset( $wp_registered_widget_controls[ $id ] ) && ! did_action( 'widgets_init' ) ) {
		return;
	}

	$defaults = array(
		'width' => 250,
		'height' => 200,
	); // Height is never used.
	$options = wp_parse_args($options, $defaults);
	$options['width'] = (int) $options['width'];
	$options['height'] = (int) $options['height'];

	$ widget = array (
		'name' => $name,
		'id' => $id,
		'callback' => $control_callback,
		'params' => $params,
	);
	$ widget = array_merge ($ widget, $ options);

	$wp_registered_widget_controls[ $id ] = $widget;

	if ( isset( $wp_registered_widget_updates[ $id_base ] ) ) {
		return;
	}

	if ( isset( $widget['params'][0]['number'] ) ) {
		$widget['params'][0]['number'] = -1;
	}

	unset( $widget['width'], $widget['height'], $widget['name'], $widget['id'] );
	$wp_registered_widget_updates[ $id_base ] = $widget;
}

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

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