VHAP — Administration plugin page template
запись от - 15 апреля 2026Это плагин только для образца административной части. В нем есть только его настройки и больше ничего. Скачать можно здесь — https://github.com/vvhromov/vhap
Страница настройки плагина в WordPress делается довольно запутанно. Обычно получается большая простыня кода, в которой сходу разобраться трудно. Разбил код на 4 логических блока, чтобы было короче, проще и понятней.
0 — Шапка плагина
1 — Разовые действия при активации, деактивации, удалении плагина
2 — Настройка меню

<?php
/*
Plugin Name: VHAP
Plugin URI: https://vahro.ru/blog/plugins/vhap-administration-plugin-template
Description: VHAP - Administration plugin page template
Author: vahro
Author URI: https://vahro.ru/
Version: 1.0.0
*/
Чтобы WordPress понял что этот скрипт плагин, достаточно просто имени в комментарии
<?php
/*
Plugin Name: VHAP
*/
Такой скрипт — уже плагин
Полей существенно больше (Header Requirements — https://developer.wordpress.org/plugins/plugin-basics/header-requirements/). Некоторые потом будут видны в списке плагинов на странице «Плагина» админки WordPress.
Разовые действия при активации, деактивации, удалении плагина
Цикл жизни плагина, после того как его установили — Активация, Деактивация, Удаление. Это полезно, когда нужно как-то подготовить плагин к работе и корректно удалить его.
— Активация — register_activation_hook()
можно использовать чтобы установить опции плагина по умолчанию add_option()
или создать собственную таблицу в базе данных.
— Деактивация — register_deactivation_hook()
очищаем какие-то временные данные
— Удаление register_uninstall_hook()
все почистить при удалении плагина.
В принципе, для небольшого, простого плагина ничего этого может быть и не нужно. WordPress все сделает сам.
// активация плагина
register_activation_hook( __FILE__,
function () {
// что-то делаем при активации плагина в админке
if( !get_option('vhap_toplevelmenu') ) {
// если опции vhap_toplevelmenu не существует, она добавляется в БД (wp_options) со значением 'top'
add_option('vhap_toplevelmenu', 'top');
}
if( !get_option('vhap_deactivation') ) {
// если опции vhap_deactivation не существует, она добавляется в БД (wp_options) со значением 'yes'
add_option('vhap_deactivation', 'yes');
}
});
// деактивация плагина
register_deactivation_hook( __FILE__,
function () {
// что-то делаем при деактивации плагина в админке
});
// удаление плагина
// !!! анонимная функция в этом хуке не работает
register_uninstall_hook( __FILE__, 'vhap_uninstall');
function vhap_uninstall () {
delete_option( 'vhap_toplevelmenu' );
delete_option( 'vhap_deactivation' );
}
Настройка меню

Страница настройки плагина вызывается из пункта меню.
Варианты такие:
1 — Поместить свой плагин подпунктом (submenu) в существующий пункт главного меню. Обычно используют пункт «Настройки» или «Инструменты».
2 — Добавить в главное меню админки свой собственный пункт. Такой вариант содержит больше возможностей — дополнительно можно завести несколько пунктов подменю, добавить свою иконку к плагину. В общем солидно. Ну конечно лучше если плагин при этом уровня «Contact Form 7» или «Yoast SEO».
1 - Добавляется подпункт меню админки
add_submenu_page(
'options-general.php', 'VHAP', 'VHAP', 'manage_options', 'vhap',
'vhap_options_html' );
или так
add_options_page(
'VHAP', 'VHAP', 'manage_options', 'vhap', 'vhap_options_html' );
Варианты равноценные, add_options_page() просто обертка add_submenu_page()
с параметром 'options-general.php' (пункт "Настройки")
Если нужно добавить подпункт в пункт "Инструменты" используется slug ‘tools.php’
add_submenu_page(
'tools.php', 'VHAP', 'VHAP', 'manage_options', 'vhap',
'vhap_options_html' );
или
add_management_page();
add_submenu_page — https://developer.wordpress.org/reference/functions/add_submenu_page/
add_options_page — https://developer.wordpress.org/reference/functions/add_options_page/
add_management_page — https://developer.wordpress.org/reference/functions/add_management_page/
2 - Добавляется пункт в главное меню админки (Top Level Menu)
add_menu_page (
'Плагин VHAP', // заголовок страницы - будем выводить его в <h1></h1>
'VHAP', // текст ссылки в меню - будем выводить в основное меню админки WP слева
'manage_options', // права пользователя, необходимые для доступа к странице - manage_options - administrator
'vhap', // page id - https://site.ru/wp-admin/admin.php?page=vhap
'vhap_options_html', // callback - функция, которая выводит содержимое страницы
);
Добавляются подпункты к основному пункту меню
// дублируется пункт из основного меню - одинаковый callback - vhap_options_html
add_submenu_page (
'vhap',
'Плагин VHAP',
'Настройка',
'manage_options',
'vhap',
'vhap_options_html'
);
// дополнительный пункт меню - описание (документация) плагина - callback - vhap_doc_html
add_submenu_page (
'vhap',
'Описание VHAP',
'Описание',
'manage_options',
'vhap_doc',
'vhap_doc_html'
);
// пункт submenu - ссылка на любой URL
$permalink = 'https://vahro.ru';
$submenu['vhap'][] = array( 'vahro', 'manage_options', $permalink );
Как бы не было организовано меню — add_submenu_page либо add_menu_page+add_submenu_page
вызов вешается на хук admin_menu
add_action( 'admin_menu', function() {
add_submenu_page ();
либо
add_menu_page ();
add_submenu_page ();
} );
Осталось вывести саму страницу настройки, которая вызывается при клике на пункт меню.
Это коллбэк (callback) — 5й параметр функции add_submenu_page и 6й add_submenu_page
Название может быть любым, здесь vhap_options_html
Эта функция отвечает за вывод html кода страницы настроек плагина, вывод принято оборачивать в div с классом wrap.
function vhap_options_html() {
?>
<div class="wrap">
Я страница настроек плагина
</div>
<?php
}
Сама страница настройки
На самом деле страница настроек посложней чем — <div class=’wrap’>Я страница настроек</div>
Довольно таки минималистичный вариант будет выглядеть как-то так
function vhap_options_html() {
?>
<div class="wrap">
<h1><?php echo esc_html( get_admin_page_title() ); // будет выведен заголовок страницы который определен в add_submenu_page ?></h1>
<form method="post" action="options.php">
<?php
settings_fields( 'vhap_setting' ); // название настроек
do_settings_sections( 'vhap_page' ); // slug (ярлык) страницы
submit_button(); // функция для вывода кнопки submit
?>
</form></div>
<?php
Необязательные дополнения
Сохранение опций — если настроек много, сохраняем в массиве, чтобы не загромождать таблицы.
Не совсем относится к странице настроек, но относится к административной части плагина добавление/удаление ссылок в общей таблице плагинов.
Можно, к примеру, удалить ссылку «Деактивация» и пользователь не сможет удалить плагин, и добавить какие-то свои ссылки, да хотя бы ссылку на ту же страницу настроек плагина прямо из списка.
Иконки пунктов меню — можно взять из библиотеки WordPress (Dashicons), но можно заменить на свою. SVG придется перекодировать в base64
Организация прокси для обхода CORS (Cross-Origin Resource Sharing) на фронтэнде. Если нужно из страницы настроек послать запрос на сторонний сервер. Например, проверить связь с API.
Уникальный защитный ключ nonce (Number Used ONCE) для определения прав пользователя wp_create_nonce(…)
Скачать плагин VHAP можно здесь — https://github.com/vvhromov/vhap
Если нет времени и желания разбираться самостоятельно – обращайтесь