WordPress как на ладони
wordpress jino

wp_register_widget_control() WP 2.2.0

Регистрирует функцию отвечающую за вывод настроек виджета в админ-панели. Сохранение опций виджета происходит в этой же функции.

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

Хуков нет.

Возвращает

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

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

wp_register_widget_control( $id, $name, $control_callback, $options, $params,... );
$id(число/cтрока) (обязательный)
ID виджета, уникальное название. Например, your_widget_1. Должен совпадать с $id функции wp_register_sidebar_widget( $id, ... ), которая регистрирует виджет.
$name(cтрока/cтрока) (обязательный)
Отображаемое название виджета в сайдбаре. Указываем такое же как id (что-то я не нашел где оно выводится)... Название (заголовок) виджета в админ-панели указывается в параметре $name при регистрации wp_register_sidebar_widget( $id, $name, ... ).
$control_callback(callback/cтрока) (обязательный)
Название функции обратного вызова, которая будет отвечать за вывод содержимого виджета в сайдбаре.
$options(массив)
Содержит массив из следующих элементов: height, width’ и id_base.
'height' - не используется никогда.
'width' - это ширина развернутого виджета. Если указать например 500, то при разворачивании виджет будет вылазить за пределы общего контейнера.
'id_base' - определяется автоматически. Для того чтобы виджет можно было использовать несколько раз, можно указать этот параметр. Должен выглядеть так примерно так: {$id_base}-{$unique_number}. Не понял как использовать.
По умолчанию: array()
$params,...(смешаный/cтрока) (обязательный)
Дополнительные параметры которые нужно передать в виджет. Допустим тут мы укажем такие строки: wp_register_widget_control( ..., $param1='foo', $param2='foo2' ); тогда в функции $control_callback будут переданы параметры: $param1='foo', $param2='foo2'.

Примеры

#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
}

Код wp register widget control: wp-includes/widgets.php VER 4.9.1

<?php
function wp_register_widget_control( $id, $name, $control_callback, $options = array() ) {
	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' => array_slice(func_get_args(), 4)
	);
	$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;
}

Cвязанные функции

Из метки: sidebar (widget Виджет)

wp_register_widget_control 2 комментария
  • campusboy1950 cайт: www.youtube.com/c/wpplus

    Так и не смогу сделать настройки виджету, постоянно белый экран выдает. Создавал виджет обычно:

    function my_register_wp_sidebars() {
    	/* В боковой колонке - первый сайдбар */
    	register_sidebar(
    		array(
    			'id' => 'left_sidebar', // уникальный id
    			'name' => 'Левая колонка', // название сайдбара
    			'description' => 'Перетащите сюда виджеты, чтобы добавить их в левый сайдбар.', // описание
    			'before_widget' => '<div id="%1$s" class="side widget %2$s">', // по умолчанию виджеты выводятся <li>-списком
    			'after_widget' => '</div>',
    			'before_title' => '<h3 class="widget-title">', // по умолчанию заголовки виджетов в <h2>
    			'after_title' => '</h3>'
    		)
    	);
    }
    add_action( 'widgets_init', 'my_register_wp_sidebars' );
    Ответить2.2 года назад #
    • Kama4697

      А дебаг включен? Ошибки какие-то должны быть... Если нет, то проверь код правильно вставляешь, мало ли - эти самые <?php ?>

      Ответить2.2 года назад #

Здравствуйте, !

Ваш комментарий