Здравствуйте, сегодня поговорим о том, как добавить новый пункт меню в панели управления wordpress (админке) без использования плагинов.
Для этого необходимо подкорректировать файл functions.php (или же создать плагин).
Чтобы добавить пункт меню администрирование, необходимо сделать три вещи в файле functions.php:
1. Создать функцию, которая содержит код для создания меню (в примере ниже – это function my_plugin_menu).
2. Зарегистрировать функцию, использующую хук “действие” (add action) с параметром admin_menu, при этом данных хук должен располагаться выше функции, указанной в пункте 1.
3. Создать HTML для этой страницы, которая отображается при нажатии на новый пункт меню.
Вот пример кода создания пункта меню (верхнего уровня) с названием “My Plugin” (можете вставить его в файл functions.php и посмотреть, что получиться – желательно это делать на тестовом сайте, потому что сайт может сломаться):
/** Пункт 2. */
add_action( 'admin_menu', 'my_plugin_menu' );
/** Пункт 1. */
function my_plugin_menu() {
add_menu_page( 'My Plugin Options', 'My Plugin', 'manage_options', 'my-unique-identifier', 'my_plugin_options' );
}
/** Пункт 3. */
function my_plugin_options() {
if ( !current_user_can( 'manage_options' ) ) {
wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
}
echo '</pre>
<div class="wrap">';
echo '
Here is where the form would go if I actually had options.
';
echo '</div>
<pre>
';
}
Теперь давайте более подробно разберем данный код.
Пункт 1: функция my_plugin_menu()
Название функции может быть любым, а не только my_plugin_menu.
В данной функции мы указываем код – add_menu_page () – это стандартная функция wordpress, которая добавляет пункт меню верхнего уровня (такие же как “Панель”, “Записи”, “Медиафайлы”, “Страницы” и др., которые вы можете видеть в левом меню вашей админки ).
Кроме данной функции здесь можно также использовать и другие:
add_submenu_page() – добавляет подменю к пунктам меню верхнего уровня, то есть например: если взять пункт “Записи”, то у него есть 4 подпункта – “Все записи”, “Добавить новую”, “Рубрики” и “Метки”.
Также есть более узкие функции:
add_options_page() – добавляет подпункт в пункт “Настройки” (Параметры, Settings).
add_management_page() – добавляет подпункт в пункт “Инструменты” (Tools).
add_theme_page() – добавляет подпункт в пункт “Внешний вид” (Appearance).
Для проверки того, как работают три последних функции, можете поменять в вышеуказанном примере код add_menu_page на один из них, ну например на add_options_page.
У каждой из 5 вышеуказанных функций есть свои параметры – атрибуты:
add_menu_page(page_title, menu_title, access_level/capability, file, [function]); add_submenu_page(parent, page_title, menu_title, access_level/capability, file, [function]); add_options_page(page_title, menu_title, access_level/capability, file, [function]); add_management_page(page_title, menu_title, access_level/capability, file, [function]); add_theme_page( page_title, menu_title, access_level/capability, file, [function]);
Как видите почти все атрибуты одинаковые, давайте рассмотрим их подробнее:
page_title – это заголовок страницы, когда пункт меню активен.
menu_title – название пункта/подпункта меню.
access_level/capability – данный атрибут задает, кто сможет видеть данный пункт/подпункт меню, но он указывается не с помощью ролей пользователей, а их возможностей, например: если вы хотите указать, что данный пункт/подпункт может видеть только админ, то указывается – manage_options (управлять настройками, параметрами).
Более подробно о возможностях для каждой роли пользователей читайте тут – “codex.wordpress.org/Roles_and_Capabilities”.
file – PHP файл, который будет отвечает за отображение содержимого страницы данного пункта/подпункта меню.
[function] – функция, которая отвечает за отображение содержимого страницы данного пункта/подпункта меню.
parent – имя admin файла, который отображает меню верхнего уровня, в который вы хотите вставить подменю или файл плагина, если это подменю вдаваясь в пользовательское меню верхнего уровня. (Примеры: index.php, post.php, edit.php, themes.php, plugins.php и др.)
Пункт 2: зацепка add_action
Здесь просто идет зацепка (хук) на стандартную функцию wordpress для вывода меню – admin_menu.
То есть если wordpress выводит меню в админке, то он должен выполнить нашу функцию (в данном примере – my_plugin_menu).
Пункт 3: function my_plugin_options
Здесь у нас прописывается следующее – если вы админ, то нужно вывести следующее:
echo ' Here is where the form would go if I actually had options. ';
То есть предложение – “Here is where the form would go if I actually had options.” – вместо него можно написать что-нибудь на русском, а также можно использовать код php.
Пример 2 на закрепление вышеуказанного материала.
Вот более сложный пример:
// Hook for adding admin menus
add_action('admin_menu', 'mt_add_pages');
// action function for above hook
function mt_add_pages() {
// Add a new submenu under Options:
add_options_page('Test Options', 'Test Options', 8, 'testoptions', 'mt_options_page');
// Add a new submenu under Manage:
add_management_page('Test Manage', 'Test Manage', 8, 'testmanage', 'mt_manage_page');
// Add a new top-level menu (ill-advised):
add_menu_page('Test Toplevel', 'Test Toplevel', 8, __FILE__, 'mt_toplevel_page');
// Add a submenu to the custom top-level menu:
add_submenu_page(__FILE__, 'Test Sublevel', 'Test Sublevel', 8, 'sub-page', 'mt_sublevel_page');
// Add a second submenu to the custom top-level menu:
add_submenu_page(__FILE__, 'Test Sublevel 2', 'Test Sublevel 2', 8, 'sub-page2', 'mt_sublevel_page2');
}
// mt_options_page() displays the page content for the Test Options submenu
function mt_options_page() {
echo "<h2>Test Options</h2>";
}
// mt_manage_page() displays the page content for the Test Manage submenu
function mt_manage_page() {
echo "<h2>Test Manage</h2>";
}
// mt_toplevel_page() displays the page content for the custom Test Toplevel menu
function mt_toplevel_page() {
echo "<h2>Test Toplevel</h2>";
}
// mt_sublevel_page() displays the page content for the first submenu
// of the custom Test Toplevel menu
function mt_sublevel_page() {
echo "<h2>Test Sublevel</h2>";
}
// mt_sublevel_page2() displays the page content for the second submenu
// of the custom Test Toplevel menu
function mt_sublevel_page2() {
echo "<h2>Test Sublevel 2</h2>";
}
Добавляет пункт верхнего уровня “Test Top Level” с 3 подпунктами в меню панели управления, а также добавляет подпункт “Test options” в пункт “Настройки” и подпункт “Test Manage” в пункт “Инструменты”.
