Поиск по сайту:

Сделайте виджет панели мониторинга настраиваемым


Несколько недель назад мы увидели, как добавить в администрирование собственный метабокс панели управления RSS. Сегодня я хотел бы показать вам, как добавить настраиваемые параметры в этот метабокс информационной панели.

Вот результат того, что мы собираемся сделать:

Самая важная функция в этом руководстве — wp_add_dashboard_widget(). Это функция WordPress, которая регистрирует виджет информационной панели. Мы уже видели, что зарегистрировать виджет и функцию, выводящую виджет на панель мониторинга, довольно просто, но мы не рассмотрели последний параметр этой функции. По сути, wp_add_dashboard_widget() имеет 4 параметра:

$widget_id
(целое число) (обязательно) идентификатор вашего виджета. Он будет использоваться в качестве его CSS-класса и ключа в массиве виджетов.
По умолчанию: Нет

$widget_name
(строка) (обязательно) это имя, которое ваш виджет будет отображать в заголовке.
По умолчанию: Нет

$callback
(строка) (обязательно) Имя создаваемой вами функции, которая будет отображать фактическое содержимое вашего виджета.
По умолчанию: Нет

$control_callback
(строка) (необязательно) Имя создаваемой вами функции, которая будет обрабатывать отправку форм параметров (конфигурации) виджета, а также будет отображать элементы формы.
По умолчанию: Нет

Как видите, четвертый параметр отвечает за параметры «настройки». Заполняя этот параметр, вы указываете WordPress загрузить определенную функцию для настройки виджета. Он автоматически создает ссылку «Настроить» в заголовке метабокса, когда вы наводите на него курсор.

Шаг 1. Зарегистрируйте функцию настройки параметров.

Итак, первый шаг — изменить вызов wp_add_dashboard_widget() и добавить имя функции параметров настройки в последний параметр. Ваши функции rc_mdm_register_widgets() должны стать:

/**
 * Register all dashboard metaboxes
 *
 * @access      public
 * @since       1.0 
 * @return      void
*/

function rc_mdm_register_widgets() {
	global $wp_meta_boxes;
	
	wp_add_dashboard_widget('widget_custom_rss', __('My RSS Feeds', 'rc_mdm'), 'rc_mdm_create_my_rss_box', 'rc_mdm_configure_my_rss_box');
}
add_action('wp_dashboard_setup', 'rc_mdm_register_widgets');

Мы просто добавили «rc_mdm_configure_my_rss_box» к последнему параметру.

Шаг 2. Создайте функцию настройки параметров.

Этот шаг не сложен. Все, что нам нужно сделать, это создать поля формы, хранящиеся в массиве. Для этого мы воспользуемся функцией update_option(). Нам не нужно создавать полную форму, поскольку WordPress создает ее за нас. Нам просто нужно зарегистрировать поля. Очень хорошо отметить, что WordPress автоматически добавляет в форму одноразовый номер, который делает форму безопасной и позволяет избежать потенциальных проблем с безопасностью. Вот код нашей функции rc_mdm_configure_my_rss_box() (помните? Это четвертый параметр, который мы определили в wp_add_dashboard_widget() ).

/**
 * Creates the RSS metabox configuration settings
 *
 * @access      public
 * @since       1.0 
 * @return      void
*/
function rc_mdm_configure_my_rss_box( $widget_id ) {

	// Get widget options
	if ( !$rc_mdm_widget_options = get_option( 'rc_mdm_dashboard_widget_options' ) )
		$rc_mdm_widget_options = array();

	// Update widget options
	if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['rc_mdm_widget_post']) ) {
		update_option( 'rc_mdm_dashboard_widget_options', $_POST['rc_mdm_widget'] );
	}
	
	// Retrieve feed URLs
	$url_1 = $rc_mdm_widget_options['url_1'];
	$url_2 = $rc_mdm_widget_options['url_2'];
	$url_3 = $rc_mdm_widget_options['url_3']; ?>

	<p>
		<label for="rc_mdm_url_1-"><?php _e('Enter the RSS feed URL #1:', 'rc_mdm'); ?></label>
		<input class="widefat" id="rc_mdm_url_1" name="rc_mdm_widget[url_1]" type="text" value="<?php if( isset($url_1) ) echo $url_1; ?>" />
	</p>
	
	<p>
		<label for="rc_mdm_url_2"><?php _e('Enter the RSS feed URL #2:', 'rc_mdm'); ?></label>
		<input class="widefat" id="rc_mdm_url_2" name="rc_mdm_widget[url_2]" type="text" value="<?php if( isset($url_2) ) echo $url_2; ?>" />
	</p>
	
	<p>
		<label for="rc_mdm_url_3"><?php _e('Enter the RSS feed URL #3:', 'rc_mdm'); ?></label>
		<input class="widefat" id="rc_mdm_url_3" name="rc_mdm_widget[url_3]" type="text" value="<?php if( isset($url_3) ) echo $url_3; ?>" />
	</p>
	
	<input name="rc_mdm_widget_post" type="hidden" value="1" />
	<?php
} ?>

Теперь вы можете перезагрузить свою панель управления, и если вы наведете курсор на метабокс виджета, вы увидите ссылку «Настроить» в правом верхнем углу. При нажатии на нее загружается форма опций. А при заполнении полей и сохранении URL-адресов каналов сохраняются в нашей таблице параметров SQL.

Шаг 3: Получение параметров

Последний шаг — заменить URL-адреса каналов, которые мы жестко запрограммировали в первой части руководства. В строках 14–18 в rc_mdm_create_my_rss_box() мы добавили два URL-адреса. Просто замените его на:

// My feeds list
if ( !$my_feeds = get_option( 'rc_mdm_dashboard_widget_options' ) )
    $my_feeds = array();

Вот и все! Нам удалось легко добавить пользовательские параметры в виджет информационной панели.