Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

Плагины WordPress

Плагины WordPress

Добавление в административное меню

Перевод с английского: Тимур Расулов (aka Dolphin). Оригинальный текст: Adding Administration Menus

Содержание

Многие плагины предлагают пользователям опции и настройки, дающие возможность выбрать, как будет работать плагин. Как автор плагина, вы имеете несколько путей решения этой задачи. Первый - предложить пользователь редактировать PHP - код плагина напрямую, но это для большинства пользователей как минимум неудобно. Лучшим решением будет создание конфигурационных окон, позволяющих пользователю выбирать настройки более привычным способом.

Эта статья объясняет, как добавить собственные административные окна для WordPress с помощью плагина. Предполагается, что вы уже ознакомились с написанием плагинов и API для плагинов в разделе "Actions and Filters".

Меню и подменю

Первый шаг при создании собственного конфигурационного окна - выбор его места в административном меню WordPress. Большинство пагинов располагают свои панели управления в существующих пунктах верхнего уровня. Вот список пунктов верхнего уровня меню и их примерного содержимого.

Options
Опции, доступные только администратору (смотрите Creating_Options_Pages).
Manage
Имнструменты для управления постами, категориями, ссылками, изображениями и подобными вещами.
Plugins
Управление плагинами в целом (не настройки самих плагинов).
Presentation
Инструменты для управления графическим оформлением и содержимым панели.
Write
Содержит инструменты для написания постов и статей.
Users
Содержит инструменты для управления пользователями.

Если ваш плагин добавляет в WordPress нечто концептуально новое и требует множества конфигурационных окон, возможным решением может быть создание нового пункта меню верхнего уровня. К этому следует прибегать лишь в случае, если вам действительно нужно множество дополнительных окон, чтобы заставить WordPress делать что-то нестандартное. Примером может быть управление галереей изображений, администрирование базы даннх или управление конференцией.

При помощи Custom Admin Menu plugin, пользователь может самостоятельно выбирать, хочет ли он видеть настройки вашего плагина в верхнем меню или нет - возможно, вы захотите предоставить им эту возможность, особенно если вы все-таки решили расположить свое меню в верхнем уровне.

Функции административного меню

Когда вы определитесь с расположением пунктов меню, нужно сообщить WordPress, где они будут располагаться. Это будет происходит в функции, которую вы определите как действие 'admin_menu' (смотрите пример в конце раздела).

Меню верхнего уровня

Первый шаг - создать пункт меню верхнего уровня, если он все-таки нужен. Нужно использовать функцию add_menu_page:

add_menu_page(page_title, menu_title, access_level/capability, file, [function]);

Значения параметров:

page_title
Текст, который будет отображен в заголовке HTML-страницы (<title>).
menu_title
Собственно название пункта меню.
access_level/capability
Минимальный уровень пользователя или право, требуемое для доступа к данной странице.
file
PHP-файл, реализующий обработку страницы.
function
Функция, отображающая страницу меню.

Теоретически, параметр function является дополнительным. Если он не указан, WordPress предположит, что PHP-файл сгенерирует нужную страницу самостоятельно, без вызова какой-либо функции. Большинство авторов плагинов стараются расположить этот код в функции, расположенной в главном файле плагина.

Подменю

После создания родительского пункта меню верхнего уровня или выбора его из существующих можно создать один или несколько пунктов подменю при помощи функции add_submenu_page. Не забывайте, что добавлять пункты нужно в том порядке, в котором они должны отображаться.

add_submenu_page(parent, page_title, menu_title, access_level/capability, file, [function]);

Значения параметров:

parent
Название главного файла, реализующего меню верхнего уровня, в которое вставляется данный пкнкт подменю. Если главный пункт меню вы создали самостоятельно, это будет название файла вашего плагина. (Примеры: index.php, post.php, edit.php, themes.php, plugins.php, и тому подобное)
page_title
Текст, который будет отображен в заголовке HTML-страницы (<title>).
menu_title
The on-screen name text for the submenu.
access_level/capability
Минимальный уровень пользователя или право, требуемое для доступа к данной странице.
file
Для уже существующих аунктов меню WordPress - PHP-файл, обрабатывающий отображение содержимого страницы меню. Для подменю или пункта меню главного уровня, созданного самостоятельно, - уникальный идентификатор страницы данного подменю.
function
Функция, отображающая страницу меню.

Теоретически, параметр function является дополнительным. Если он не указан, WordPress предположит, что PHP-файл сгенерирует нужную страницу самостоятельно, без вызова какой-либо функции. Большинство авторов плагинов стараются расположить этот код в функции, расположенной в главном файле плагина.

Вот короткий пример, демонстрирующий создание пункта меню верхнего уровня, и пункта подменю, заголовок которого отличается от родительского пункта. В этом примере 'my_magic_function' - название функции, отображающей первый пункт подменю:

add_menu_page('Page title', 'Top-level menu title', 8, __FILE__, 'my_magic_function');
add_submenu_page(__FILE__, 'Page title', 'Sub-menu title', 8, __FILE__, 'my_magic_function');

Поскольку большинство подменю распологаются в Options, Management или Presentation, WordPress предлагает следующие функции-оболочки для упрощения задачи:

Для меню Options (смотрите Creating Options Pages для подробностей)
add_options_page(page_title, menu_title, access_level/capability, file, [function]);
Для Management
add_management_page(page_title, menu_title, access_level/capability, file, [function]);
Для Presentation
add_theme_page( page_title, menu_title, access_level/capability, file, [function]);

Вставка страниц

Вот пример плагина для WordPress, добавляющего пункты меню в разных местах:

<?php
/*
Plugin Name: Menu Test
Plugin URI: http://wordpress.org
Description: Menu Test
Author: Nobody
Author URI: http://example.com
*/

// Вызов функции добавления административных меню
add_action('admin_menu', 'mt_add_pages');

// Сама функция, вызываемая выше
function mt_add_pages() {
    // Создание подменю в Options:
    add_options_page('Test Options', 'Test Options', 8, 'testoptions', 'mt_options_page');

    // Создание подменю в Manage:
    add_management_page('Test Manage', 'Test Manage', 8, 'testmanage', 'mt_manage_page');

    // Создание нового пункта меню верхнего уровня:
    add_menu_page('Test Toplevel', 'Test Toplevel', 8, __FILE__, 'mt_toplevel_page');

    // Создание подпункта в свежесозданном меню:
    add_submenu_page(__FILE__, 'Test Sublevel', 'Test Sublevel', 8, 'sub-page', 'mt_sublevel_page');

    // Создание еще одного подпункта там же:
    add_submenu_page(__FILE__, 'Test Sublevel 2', 'Test Sublevel 2', 8, 'sub-page2', 'mt_sublevel_page2');
}

// mt_options_page() выводит содержимое страницы меню Test Options
function mt_options_page() {
    echo "<h2>Test Options</h2>";
}

// mt_manage_page() выводит содержимое страницы меню Test Manage
function mt_manage_page() {
    echo "<h2>Test Manage</h2>";
}

// mt_toplevel_page() выводит содержимое страницы меню Test Toplevel
function mt_toplevel_page() {
    echo "<h2>Test Toplevel</h2>";
}

// mt_sublevel_page() выводит содержимое страницы первого подменю,
// располженной в Test Toplevel
function mt_sublevel_page() {
    echo "<h2>Test Sublevel</h2>";
}

// mt_sublevel_page2() выводит содержимое страницы второго подменю,
// расположенной в Test Toplevel
function mt_sublevel_page2() {
    echo "<h2>Test Sublevel 2</h2>";
}

?>

Примерная страница меню

Этот пример содержит несколько функций-заготовок вроде mt_options_page, готовых к добавке настоящего содержимого. Нужно превратить их в настоящие страницы меню. Давайте предпотожим, что наш плагин имеет опцию mt_favorite_food, и мы хотим, чтобы пользователь мог ввести название своего любимого блюда на странице настроек. Функция mt_options_page будет нужна для обработки данных, вводимых в форму. Вот эта функция:

// mt_options_page() выводит содержимое страницы меню Test Options
function mt_options_page() {

    // Переменные для названий полей и опций
    $opt_name = 'mt_favorite_food';
    $hidden_field_name = 'mt_submit_hidden';
    $data_field_name = 'mt_favorite_food';

    // Чтение текущего значения опции из базы данных
    $opt_val = get_option( $opt_name );

    // Проверяем, пришла ли от пользователя какая-то информация
    // Если это так, то скрытое поле должно содержать "Y"
    if( $_POST[ $hidden_field_name ] == 'Y' ) {
        // Считываем полученное значение POST
        $opt_val = $_POST[ $data_field_name ];

        // Сохраняем полученное знаение в базу
        update_option( $opt_name, $opt_val );

        // Выводим пользователю сообщение о успешном сохранении данных

?>
<div class="updated"><p><strong><?php _e('Options saved.', 'mt_trans_domain' ); ?></strong></p></div>
<?php
    }
    // Отобразим страницу редактирования опций
    echo '<div class="wrap">';
    // Заголовок
    echo "<h2>" . __( 'Menu Test Plugin Options', 'mt_trans_domain' ) . "</h2>";
    // Форма опций
    ?>

<form name="form1" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
<input type="hidden" name="<?php echo $hidden_field_name; ?>" value="Y">

<p><?php _e("Favorite Color:", 'mt_trans_domain' ); ?>
<input type="text" name="<?php echo $data_field_name; ?>" value="<?php echo $opt_val; ?>" size="20">
</p><hr />

<p class="submit">
<input type="submit" name="Submit" value="<?php _e('Update Options', 'mt_trans_domain' ) ?>" />
</p>

</form>
</div>

<?php

}

Замечания:

  • Административные функции WordPress проверяют права доступа пользователя, вы можете об этом не заботиться
  • Вышеприведенный пример функции интернационализирован - см. подробности Internationalization в документации о написании плагинов.
  • Функция обрабатывает данные до вывода формы, так что в форму попадают уже обновленные значения.
  • Не озадачивайтесь проблемой создания новой опции в базе данных, update_option сделает это автоматически.

24.01.2010

Биржа долевых инвестиций SIMEX.

Последнее редактирование: 2011-01-24 11:05:53

Метки материала: wordpress, плагин, админка, cms, навигация, manual, dolphin, софт, создание плагинов, создание плагинов wordpress

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2019, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.