Создание меню верхнего уровня в панели администрирования WordPress
Существует два способа создания меню настроек для плагина. Первый способ — создание отдельного пункта в меню верхнего уровня. Второй — создание пункта меню настроек как подпункта существующего меню. В этой статье мы рассмотрим первый способ. Он имеет смысл, если плагин будет содержать несколько страниц настройки.
Содержание
- Инициализация параметров меню настроек плагина
- Создание меню верхнего уровня.
- Все вместе (рабочий код).
Регистрация параметров меню настроек плагина
Параметры плагина обычно хранятся в виде одной записи в таблице базы данных 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
Добавить комментарий