Создание Пользовательских Страниц Параметров
- Создание страницы администратора
- Добавление полей
- Простой пример
Обратите внимание на скриншот - это то, что мы собираемся создать в этом уроке:

1. Создайте страницу администратора
Первый шаг для нас-это решить, где именно в меню администратора мы собираемся создать страницу опций.

Для этого есть в первую очередь две функции:
add_menu_page()– для создания новой страницы Меню верхнего уровня,add_submenu_page()– для создания страницы подменю.
Чтобы упростить процесс, вместо add_submenu_page()этого вы можете использовать add_dashboard_page(), add_posts_page(), add_pages_page(), add_comments_page(), add_theme_page(), add_plugins_page(),add_users_page(), add_management_page()или add_options_page()в зависимости от того, где вы собираетесь добавить свою страницу подменю.
Ладно, давайте погрузимся в примеры.
Создание пользовательской страницы Меню верхнего уровня
Взгляните на этот код:
add_action( 'admin_menu', 'misha_menu_page' ); function misha_menu_page() { add_menu_page( 'My Page Title', // страница <title>Название</title> 'My Page', // текст ссылки меню 'manage_options', // возможность получать доступ к странице 'misha-slug', // слаг-ссылка страницы 'misha_page_content', // функция обратного вызова /w контента 'dashicons-star-half', // иконка в меню 5 // приоритет ); } function misha_page_content(){ echo 'What is up?'; }
Это очень просто, но если вы вставите его в свой functions.phpфайл, появится новая страница администратора.

Если вы не понимаете, как я добавил туда значок, просто проверьте набор значков Dashicons.
Создание настраиваемой страницы параметров
Создание нового пункта меню со значком-это круто, но правда в том, что когда вы создаете страницу настроек плагина, всегда лучше добавить ее в качестве страницы подменю в разделе Настройки.
Это лучшая практика, и в большинстве случаев я рекомендую вам делать это именно так.
add_action( 'admin_menu', 'misha_options_page' ); function misha_options_page() { add_options_page( 'My Page Title', // страница <title>Название</title> 'My Page', // текст ссылки меню 'manage_options', // возможность получить доступ к странице 'misha-slug', // слаг-ссылка страницы 'misha_page_content', // функция обратного вызова с содержанием 2 // приоритет ); } function misha_page_content(){ echo 'What is up?'; }
Очень похоже на предыдущий пример, не так ли? У нас больше нет только параметра значка.

Теперь вы уже знаете, как добавить любой пользовательский HTML-код на свои страницы опций, но в следующей главе я покажу вам, как правильно создавать там поля настроек.
2. Добавление полей с помощью API настроек
Прежде всего, давайте заполним нашу misha_page_content()функцию, которую мы создали на предыдущем шаге.
function misha_page_content(){ echo '<div class="wrap"> <h1>Моя страница Настроек</h1> <form method="post" action="options.php">'; settings_fields( 'misha_settings' ); // имя группы настроек do_settings_sections( 'misha-slug' ); // просто слаг страницы submit_button(); echo '</form></div>'; }
Мы больше не будем вносить никаких изменений в эту функцию. Все, что вам нужно знать, это то, что мы используем две функцииsettings_fields()do_settings_sections(): печать всех полей настроек и заполнение их данными.
Если вы все делали правильно до этого момента, то у вас будет вот это:

2.1 Зарегистрируйте настройку и создайте поле
add_action( 'admin_init', 'misha_register_setting' ); function misha_register_setting(){ register_setting( 'misha_settings', // имя группы настроек 'homepage_text', // имя опции 'sanitize_text_field' // функция дезинфекции ); add_settings_section( 'some_settings_section_id', // ID секции '', // заголовок (если нужно) '', // функция обратного вызова (если нужно) 'misha-slug' // слаг страницы ); add_settings_field( 'homepage_text', 'Homepage text', 'misha_text_field_html', // функция, которая печатает поле 'misha-slug', // слаг страницы 'some_settings_section_id', // ID секции array( 'label_for' => 'homepage_text', 'class' => 'misha-class', // для элемента <tr> ) ); } function misha_text_field_html(){ $text = get_option( 'homepage_text' ); printf( '<input type="text" id="homepage_text" name="homepage_text" value="%s" />', esc_attr( $text ) ); }
Что такое esc_attr()функция и почему она здесь? В этом блоге есть отдельный учебник по экранированию выходных данных, где я сказал, что база данных не является надежным источником данных, и именно поэтому мы должны использовать экранирующие функции, прежде чем выводить что-либо в содержимое страницы.
А теперь у нас есть рабочая страница опций:

2.2 Дезинфекция
Давайте на минуту вернемся к register_setting()функции из предыдущего фрагмента кода.
register_setting( 'misha_settings', 'homepage_text', 'sanitize_text_field' // функция дезинфекции );
Третий параметр-это имя функции, которая предназначена для дезинфекции (очистки) данных поля перед сохранением в базе данных. Напримерsanitize_text_field(), это функция WordPress по умолчанию, которая удаляет все символы, которые не разрешены к использованию в текстовом поле ввода. Если вы хотите передать целое число,вы можете использовать intval()absint()вместо него имена функций или. Или создайте пользовательскую функцию дезинфекции для своей цели.
Пример для положительных целых чисел:
register_setting( 'misha_settings', 'number_of_slides', 'absint' );
3. Простой пример
У нас есть некоторый код выше. На самом деле очень много кода. И все это для того, чтобы создать единое поле ввода.
Я хочу быть честным с вами – я никогда не делаю все это вручную на своих проектах. Потому что это отнимает много времени. Каковы же тогда решения? Я также не люблю Плагины, особенно ACF-подобные. Потому что мне лучше потратить еще пару часов и создать быстрый сайт, а не использовать медленные раздутые Плагины.
Просто сравните этот код со всем, что мы сделали выше:
add_filter( 'simple_register_option_pages', 'misha_option_page' ); function misha_option_page( $option_pages ) { $option_pages[] = array( 'id' => 'misha_slug', 'title' => 'My Page Settings', 'menu_name' => 'My page', 'fields' => array( array( 'id' => 'homepage_text', 'label' => 'Homepage text', 'type' => 'text', ), ), ); return $option_pages; }
И мы имеем абсолютно тот же результат, что и при создании страницы опций с нуля в первой части учебника.

Примечание автора
Миша пришел к решению – создать свой собственный плагин option pages с абсолютным минимумом функциональности. Это молниеносно, как и вы все кодируетеfunctions.php, но в то же время это экономит часы разработки.