Добавляем пункты меню в админку wordpress (без плагинов)

Здравствуйте, сегодня поговорим о том, как добавить новый пункт меню в панели управления 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” в пункт “Инструменты”.

Добавить комментарий