WordPress плагины позвлют расширить возможности системы, добавляя в нее новые функции и облегчают администрирование сайта или управление контентом.
В WordPress существует Options API с помощью которого происходит регастрация параметров плагина и обращения к ним по ID, а также Settings API служащий инструментом для внесения изменений в панель администратора. В результате чего ваш плагин может иметь собственную страницу с настройками.
Перво-наперво, нужно создать страницу или группу страниц настроек плагина в админке сайта. Затем создать интерфейс для настроек плагина. Сделать это можно так.
Регистрируем пункт меню (редактируем основной файл плагина):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function wpdocs_frshop_main_menu(){ add_menu_page( __( 'FRshop список заказов', 'textdomain' ), 'FRshop', 'manage_options', 'frshop_main_menu', 'frshop_main_menu_func', 'dashicons-cart', 3 ); } add_action( 'admin_menu', 'wpdocs_frshop_main_menu' ); |
Регистрируем подменю:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function wpdocs_frshop_main_submenu1() { add_submenu_page( 'frshop_main_menu', //родительское меню настроек __( 'FRshop', 'textdomain' ), //название (title) 'Настройки', //название пункта меню 'manage_options', //уровень доступа 'frshop_options', //уникальное название этого меню (slug) или имя файла с функциями вывода содержимого меню 'frshop_options_page' //функция для вывода контента страницы с опциями ); } add_action('admin_menu', 'wpdocs_frshop_main_submenu1'); |
Пишем функцию для вывода страниц настроек плагина. Для каждой группы опций своя функция:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* Вывод страницы настроек плагина */ function frshop_options_page() { echo '<nodiv class="wrap">'; screen_icon(); echo '<form id="frshop_options" action="options.php" method="post">'; do_settings_sections('frshop'); //вывод блоков с полями формы для page (page из add_settings_section) settings_fields('frshop_options'); //выводит на экран скрытые поля input (группа опций из register_setting) submit_button(); echo '</form>'; echo '</nodiv>'; } |
Регистрируем настройки плагина в системе. Создаем группу опций и набор полей этой группы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
/* регистрация настроек в системе */ function frshop_settings_init() { register_setting( 'frshop_options', //группа опций (уникальное имя) используется в атрибуте name поля поля в форме ввода данных. 'frshop_options', //под каким названием группа опций хранится в БД 'frshop_options_validate', //функция проверки введенных данных данных 'frshop' //page ); add_settings_section( 'frshop_options', //section id 'Основные настройки магазина.', //title 'frshop_callbackemail_desc', //function 'frshop' //page ); add_settings_field( 'frshop_callbackemail_template', //id (равен id поля в форме ввода данных) 'Email для формы обратного звонка', //title 'frshop_callbackemail_field', //функция вывода поля формы 'frshop', //page 'frshop_options' //section id в которую добавляем поле ); add_settings_field( 'frshop_shownotice_template', 'Показывать уведомление?', 'frshop_shownotice_field', 'frshop', 'frshop_options' ); add_settings_field( 'frshop_noticecontent_template', 'Текст уведомления:', 'frshop_noticecontent_field', 'frshop', 'frshop_options' ); } add_action('admin_init', 'frshop_settings_init'); |
Далее идут функции проверки введенных данных, вывода опций, описания на страницу:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
/* обработка ввода */ function frshop_options_validate($input) { global $allowedposttags, $allowedrichhtml; if (isset($input['frshop_callbackemail'])) { $input['frshop_callbackemail'] = wp_kses_post($input['frshop_callbackemail']); } return $input; } /* описание */ function frshop_callbackemail_desc() { echo "<p>На данной странице перечислены основные настройки магазина, а также настройки темы оформления.</p>"; } /* вывод полей */ function frshop_callbackemail_field() { $options = get_option('frshop_options'); $callbackemail = (isset($options['frshop_callbackemail'])) ? $options['frshop_callbackemail'] : ''; $callbackemail = esc_textarea($callbackemail); ?> <textarea id="frshop_callbackemail_template" name="frshop_options[frshop_callbackemail]" cols="20" rows="2" class="large-text code"><?php echo $callbackemail; ?></textarea> <?php } function frshop_shownotice_field() { $options = get_option('frshop_options'); $shownotice = (isset($options['frshop_shownotice'])) ? 'checked' : ''; ?> <input type="checkbox" id="frshop_shownotice_template" name="frshop_options[frshop_shownotice]" <?php echo $shownotice; ?>> <?php } function frshop_noticecontent_field() { $options = get_option('frshop_options'); $noticecontent = (isset($options['frshop_noticecontent'])) ? $options['frshop_noticecontent'] : ''; $noticecontent = esc_textarea($noticecontent); ?> <textarea id="frshop_noticecontent_template" name="frshop_options[frshop_noticecontent]" cols="20" rows="4" class="large-text code"><?php echo $noticecontent; ?></textarea> <?php } |
Каждая группа опций это всегда массив. Он и сохраняется в БД WordPress в таблице options.
Оставить комментарий