Как создать пункт меню и страницу в админке Wordpres через плагин?
Как создать пункт меню и страницу в админке Wordpres, используя плагин?
Дополнительно:
Создаем плагин, wp-content/plugins/best-plugin/best-plugin.php:
<?php /** * Plugin Name: Чумовой плагин * Description: Это плагин, твердо и четко! */ if(!defined('ABSPATH')) { exit; } class Best_Plugin { protected $menu_slug = 'best-plugin'; public function __construct() { // добавление страницы с пунктом меню add_action('admin_menu', [$this, 'add_admin_page']); // добавление ссылки на настройки плагина в списке плагинов add_filter( 'plugin_action_links_' . plugin_basename(__FILE__), [$this, 'add_settings_link'] ); } // страница, любое содержимое страницы, обычно это винегрет из html/js/php public function add_page() {} // добавление страницы с пунктом меню public function add_admin_page() { add_options_page( 'Страница чумового плагина', 'Чумовой плагин', 'manage_options', $this->menu_slug, [$this, 'add_page'], 1 ); } // добавление ссылки на настройки в списке плагинов public function add_settings_link($links) { $settings_link = "<a href="options-general.php?page={$this->menu_slug}">Настройки чумового плагина</a>"; array_unshift($links, $settings_link); return $links; } } new Best_Plugin(); |
<?php /** * Plugin Name: Чумовой плагин * Description: Это плагин, твердо и четко! */ if(!defined('ABSPATH')) { exit; } class Best_Plugin { protected $menu_slug = 'best-plugin'; public function __construct() { // добавление страницы с пунктом меню add_action('admin_menu', [$this, 'add_admin_page']); // добавление ссылки на настройки плагина в списке плагинов add_filter( 'plugin_action_links_' . plugin_basename(__FILE__), [$this, 'add_settings_link'] ); } // страница, любое содержимое страницы, обычно это винегрет из html/js/php public function add_page() {} // добавление страницы с пунктом меню public function add_admin_page() { add_options_page( 'Страница чумового плагина', 'Чумовой плагин', 'manage_options', $this->menu_slug, [$this, 'add_page'], 1 ); } // добавление ссылки на настройки в списке плагинов public function add_settings_link($links) { $settings_link = "<a href="options-general.php?page={$this->menu_slug}">Настройки чумового плагина</a>"; array_unshift($links, $settings_link); return $links; } } new Best_Plugin();
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Пункт меню и страницу настроек в админке WordPress из плагина создают через хук
admin_menuи функцииadd_menu_page()илиadd_submenu_page(). Если страница должна быть в отдельном разделе слева, используйтеadd_menu_page(). Если внутри “Настройки” —add_options_page()илиadd_submenu_page('options-general.php', ...).Минимальный плагин:
<?php /** * Plugin Name: My Admin Page */ if (!defined('ABSPATH')) { exit; } add_action('admin_menu', function () { add_menu_page( 'Настройки плагина', 'Мой плагин', 'manage_options', 'my-plugin', 'my_plugin_render_page', 'dashicons-admin-generic', 80 ); }); function my_plugin_render_page() { if (!current_user_can('manage_options')) { wp_die('Недостаточно прав'); } echo '<div class="wrap">'; echo '<h1>Настройки плагина</h1>'; echo '<p>Здесь будет форма настроек.</p>'; echo '</div>'; }
Если на странице будут сохраняться настройки, используйте Settings API:
register_setting(), nonce, sanitization callback. Не сохраняйте$_POSTнапрямую. Для простой формы можно обработать сохранение черезadmin_post_..., но Settings API обычно аккуратнее.Также добавьте capability
manage_options, чтобы страницу видел только администратор. Если плагин должен работать у редакторов, выберите другую capability, но не открывайте настройки всем пользователям.Если нужно добавить страницу не в верхнее меню, а внутрь существующего пункта, используйте
add_submenu_page(). Например, под WooCommerce, под Инструменты или под Настройки. Первый аргумент — slug родительской страницы. Для страницы настроек этоoptions-general.php, для инструментов —tools.php.Для подключения CSS/JS только на этой странице используйте
admin_enqueue_scriptsи проверяйте$hook, который возвращаетadd_menu_page(). Так скрипты плагина не будут грузиться во всей админке.