Создание меню верхнего уровня в панели администрирования WordPress

Существует два способа создания меню настроек для плагина. Первый способ — создание отдельного пункта в меню верхнего уровня. Второй — создание пункта меню настроек как подпункта существующего меню. В этой статье мы рассмотрим первый способ. Он имеет смысл, если плагин будет содержать несколько страниц настройки.

Содержание

  1. Инициализация параметров меню настроек плагина
  2. Создание меню верхнего уровня.
  3. Все вместе (рабочий код).

Регистрация параметров меню настроек плагина

Параметры плагина обычно хранятся в виде одной записи в таблице базы данных wp_options. Эта запись имеет уникальное имя. Для данного примера пусть именем будет k3towp_options и именем плагина будет k3towp. До того, как плагин активирован, в таблице нет этой записи. Поэтому, по хуку активации плагина вносим запись в таблицу wp_options:

//вызвать функцию при активации плагина
register_activation_hook(__FILE__, 'k3towp_install');

function k3towp_install()
{
	//параметры по умолчанию - просто пример
	$k3wp_option_arr = array('counter' => 0, 'number' => 100, 'exist' => 'on');
	
	//сохраняем параметры
	
	update_option('k3towp_options', $k3wp_option_arr);
}

Далее, при инициализации, добавляем интернационализацию, загружаем строки перевода для плагина .mo. Определяем путь файла перевода (если путь не указан, будет использоваться корень директории плагина):

// Хук действия для инициализации плагина
add_action( 'init', 'k3towp_init' );

//инициализация плагина
function k3towp_init() {

	//локализация
	load_plugin_textdomain('k3towp-plugin', false, plugin_basename(dirname(__FILE__).'/languages'));
	
	
}

2. Создание меню верхнего уровня

Код для создания меню верхнего уровня :

// добавляем пункт меню и страницу меню при выводе админ меню
add_action( 'admin_menu', 'k3towp_create_menu' );

//функция обратного вызова
function k3towp_create_menu() {

	add_menu_page(__('K3towp Plugin Page','k3towp-plugin'), __('K3towp Plugin','k3towp-plugin'),
	 'manage_options', 'k3towp_main_menu','k3towp_settings_page','dashicons-buddicons-forums'); 
	
	add_action('admin_init','k3towp_register_settings');
	

}

Тут много чего понаписано, так что давайте по порядку. Функция add_menu_page() имеет следующие параметры:

  • __(‘K3towp Plugin Page’,’k3towp-plugin’) название страницы параметров (title)
  • __(‘K3towp Plugin’,’k3towp-plugin’) текст на пункте меню
  • manage_options — минимальные права пользователя, позволяющие видеть меню
  • k3towp_main_menu — уникальный слаг для меню
  • k3towp_settings_page — название функции вывода страницы настроек
  • dashicons-buddicons-forums — url иконки меню или название (dashicons)

Вы, также, можете создать подпункты для нового пункта меню. Для этого используйте функцию add_submenu_page( parent, page_title, menu_title, capability,
menu_slug,[function]
)

Также добавляется хук для вызова функции регистрации настроек k3towp_register_settings() . Дело в том, что WordPress имеет единый механизм сохранения настроек и если настройка не зарегистрирована, то сохранения не будет.

function k3towp_register_settings() { 
  //register settings 
  register_setting('k3towp-settings-group', 'k3towp_options', 
                   'k3towp_sanitize_options'); }
  • k3towp-settings-group — уникальное имя для регистрации
  • k3towp_options — имя параметра в таблице wp_options
  • k3towp_sanitize_options — обратная функция для очистки содержиого перед сохранением
function prowp_sanitize_options( $input ) { 
  $input['count'] = sanitize_text_field( $input['count'] ); 
  $input['number'] = sanitize_text_field($input['number'] ); 
  $input['exist'] = ( $input['exist'] == 'on' ) ? 'on' : ''; 
  return $input; 
}

Осталась функция для вывода страницы параметров. В простейшем случае это форма:

function k3towp_settings_page(){
	$k3towp_option_arr = get_option('k3towp_options');
	?>

	<form method="post" action="options.php">
	 <?php settings_fields( 'k3towp-settings-group' ); ?>
	 
	<label for="cnt"><?php _e('Start from: ', 'k3towp-plugin')?></label>
	<input type="text" id="cnt" name="k3towp_options[counter]" value="<?php echo esc_attr($k3towp_option_arr['counter'])?>"/>
	
	<label for="nmb"><?php _e('Number if Items', 'k3towp-plugin')?></label>
	<input type="text" id="nmb" name="k3towp_options[number]" value="<?php echo esc_attr($k3towp_option_arr['number']) ?>"/>
	
	<label for="exist"><?php _e('Skip, if item exist','k3towp-plugin')?></label>
	<input type="checkbox" id="exist" name="k3towp_options[exist]" <?php checked($k3towp_option_arr['exist'],'on')?>/>
	 
	 <p class="submit">
	 <label for="btn"><?php _e('Store settings','k3towp-plugin')?></label>
	 <input type="submit" class="button-primary" value="<?php _e("Save settings", 'k3towp-plugin')?>">
	 </p>
	</form>

В начале считываем текущие параметры get_option(‘k3towp_options’). Выводим форму и размещаем в ней текущие параметры. Функция settings_fields( ‘k3towp-settings-group’ ) выводит nonce, action, и option_page поля формы для страницы параметров.В ней фигурирует параметр k3towp-settings-group, указанный при регистрации настроек k3towp_register_settings(). Эта функция добавляет для безопасности блок скрытых полей.

Все вместе (рабочий код)

//call function when plugin is activated
register_activation_hook(__FILE__, 'k3towp_install');

function k3towp_install()
{
	//set default parametres
	$k3wp_option_arr = array('counter' => 0, 'number' => 100, 'exist' => 'on');
	
	//save in parametres
	
	update_option('k3towp_options', $k3wp_option_arr);
}
	
// Action hook to initialize the plugin
add_action( 'init', 'k3towp_init' );

//Initialize the k3_to_wp
function k3towp_init() {

	//localisation
	load_plugin_textdomain('k3towp-plugin', false, plugin_basename(dirname(__FILE__).'/languages'));
	
	
}

// add menu for plugin
add_action( 'admin_menu', 'k3towp_create_menu' );

//create the Halloween Masks sub-menu
function k3towp_create_menu() {

	add_menu_page(__('K3towp Plugin Page','k3towp-plugin'), __('K3towp Plugin','k3towp-plugin'),
	 'manage_options', 'k3towp_main_menu','k3towp_settings_page','dashicons-buddicons-forums'); 
	
	add_action('admin_init','k3towp_register_settings');
	

}

function k3towp_register_settings() {
	//register settings
	register_setting('k3towp-settings-group', 'k3towp_options', 'k3towp_sanitize_options');

}

function prowp_sanitize_options( $input ) {
	$input['count'] = sanitize_text_field( $input['count'] );
	$input['number'] = sanitize_text_field($input['number'] );
	$input['exist'] = ( $input['exist'] == 'on' ) ? 'on' : '';
	return $input;
	}

//build plugin setting page
function k3towp_settings_page(){
	$k3towp_option_arr = get_option('k3towp_options');
	?>

	<div class="wrap">
	
	<h2><?php _e('K3 to WP base transfer','k3towp-plugin')?></h2>
	<h3><?php _e('K3 to wp settings','k3towp-plugin')?></h3>
	
		
	<form method="post" action="options.php">
	 <?php settings_fields( 'k3towp-settings-group' ); ?>
	 
	<label for="cnt"><?php _e('Start from: ', 'k3towp-plugin')?></label>
	<input type="text" id="cnt" name="k3towp_options[counter]" value="<?php echo esc_attr($k3towp_option_arr['counter'])?>"/>
	
	<label for="nmb"><?php _e('Number if Items', 'k3towp-plugin')?></label>
	<input type="text" id="nmb" name="k3towp_options[number]" value="<?php echo esc_attr($k3towp_option_arr['number']) ?>"/>
	
	<label for="exist"><?php _e('Skip, if item exist','k3towp-plugin')?></label>
	<input type="checkbox" id="exist" name="k3towp_options[exist]" <?php checked($k3towp_option_arr['exist'],'on')?>/>
	 
	 <p class="submit">
	 <label for="btn"><?php _e('Store settings','k3towp-plugin')?></label>
	 <input type="submit" class="button-primary" value="<?php _e("Save settings", 'k3towp-plugin')?>">
	 </p>
	</form>
	
	</div>
	
}

В одной из ближайших статей собираюсть рассказать о добавлении подпункта в меню верхнего уровня существщего адимнитративного меню.

Рад, если был полезен. Готов оказать помощь.

admin@allrecall.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Найти на сайте
Со страниц сайта
Метки
хохмаУмные мыслиармейский юморДела семейныеДокторинформацияой болитфольклорВовочка & kidsВадим ЗверевПолитическиеСтатусы ВКотактеСобрание скороговорокБольшие и малые народностиПро животныхЗаконы МерфиженщиныПро это...Забойный наборНиколай ФоменкоВсякая всякотаалкоманы-наркоголикиВиктор ШендеровичПро услуги и рестораныБородатые анекдотыавтомобилистыТуристы и турыИскусство и киноКозьма ПрутковПро студентовПро работуОмар ХайямЧерномырдинСтатусы про женщин и мужчинВ общественном транспортеПро сумасшедшихСтанислав Ежи ЛецКриминальныеПро ШтирлицаСтас ЯнковскийСмешные статусыДурацкие законыПро юристовпро самолетыПечалькаПро братковХорошие советыНе та ориентацияМарк ТвенСтатусы про жизньНа селеКрасноармейскиеГусары и поручикиДразнилкиИностранные анекдотыСказочныеХрюн МоржовФрансуа де ЛарошфукоЧерный юморЖан-Жак РуссоОхота и рыбалкаПрограммистыЛеди и джентельменыСпортМультяшкиНа бога надейся...БизнесСчиталкиУильям ШекспирГеоргий ФрумкерФрансис БэконШутливая лотереяДикий западПраздникиБедные и богатыеРаневскаяПьер Огюстен Карон де БомаршеСоветы и ответыДикариИсторические анекдотыНикколо МакиавеллиНаполеон БонапартЗагадкиsongswordpresstraditionalpluginпоговоркиC#старостьЧастушкиmysqlbackendjavascripthostingsshajaxphpстатистикапандемия
Больше Меньше
Архивы
Рейтинг@Mail.ru