Привет!
Почти год назад я начинал тему создания плагина WordPress. Тогда был создан простенький плагин, который изменял заголовок статьи при выводе. В сегодняшней статье я хочу сделать еще один шаг в сторону разработки плагинов (причем, более сложных).
Как вы знаете, большинство плагинов WordPress имеют свои пункты меню в административной панели. Эти пункты меню, чаще всего, ссылаются на страницы с какими-то настройками, которые использует плагин.
Так вот в данной статье мы подробно разберемся как же создавать пункты меню (верхнего уровня, подменю своего меню или уже существующего меню).
1. Создание меню верхнего уровня
Для добавления меню верхнего уровня используется функция add_menu_page:
1 2 3 4 |
<?php add_menu_page(page_title, menu_title, capability, menu_slug, function, icon_url, position ); ?> |
page_title — заголовок страницы, который попадет в теги <title>
menu_title — название меню, которое будет отображаться в админке
capability — минимальные возможности (доступы), необходимые для того, чтобы увидеть это меню. В примерах я буду использовать ‘manage_options’. Т.е. меню будет доступно пользователю с возможностями не ниже администратора. Если вы хотите отображать это меню и редакторам, то используйте, например: ‘publish_pages’; для авторов – ‘publish_posts’; ну и т.п.
menu_slug — краткое имя для ссылки на это меню (должно быть уникальным)
function: функция, которая должна вызываться для отображения страницы для данного пункта меню (может быть имя функции и ссылка на файл, как далее в примере будет использоваться у меня ‘test-plugin/admin.php’)
icon_url — URL иконки к данному пункту меню
position — Местоположение в меню. По умолчанию, если не задавать значение этому параметру, то новый пункт меню появится внизу данной структуры меню. Чем выше будет заданное число, тем ниже будет расположен пункт меню.
Предупреждение: Если два разных пункта меню будут иметь одно и тоже значение параметра position, то один из данных пунктом может просто не отобразиться! Риск конфликта может быть уменьшен, если вместо целочисленных значений использовать десятичные.
Смотря на конкретный пример кода, можно гораздо быстрее разобраться что к чему.
Для демонстрации я создам тестовый плагин Test Plugin. Для тех, кто ни разу не создавал плагины, еще раз отсылаю на статью о создании плагина WordPress.
Итак, в /wp-content/plugins/test-plugin создаю файл test-plugin.php. Полный листинг файла и возможность его скачать будет в конце статьи, а сейчас приведу только фрагмент кода, касающийся данного пункта.
Пример создания меню верхнего уровня:
1 2 3 4 5 6 7 8 |
add_action('admin_menu', 'test_plugin_add_top_menu'); function test_plugin_add_top_menu() { add_menu_page( 'Мой плагин', 'Мой плагин', 'manage_options', 'test-plugin/admin.php', '', plugins_url( '/images/wp-icon.png', __FILE__ ) ); } |
Теперь немного разъяснений. К действию admin_menu делаем привязку (хук, зацепку) нашей функции test_plugin_add_top_menu. И далее создаем само тело функции. В ней с помощью описанной выше функции add_menu_page добавляем пункт меню.
Первый два параметра – текст “Мой плагин” будет размещен в тайтл страницы и аналогично будет называться сам пункт меню.
О ‘manage_options’ я писал выше – пункт будет отображаться для всех с возможностями администратора.
Четвертый параметр ‘test-plugin/admin.php’ – путь к файлу, который будет выполняться при клике по этому пункту меню. В данном случае, для демонстрации я сделал своего рода “заглушку” – создал в папке test-plugin файл admin.php и в нем разместил заголовок <h1>Настройка плагина Test Plugin</h1>.
Пятый параметр я пропустил. Это может быть функция, которая выполняется при клике по пункту. Т.е. вместо создания admin.php мы может сделать формирование страницы с помощью функции.
1 2 3 4 5 |
function render_admin_page() { echo ‘<h1>Настройка плагина Test Plugin</h1>’; } |
В такой ситуации пятым параметром нужно указать имя функции render_admin_page, а четвертом тогда пути к файлу может не быть, а просто некая уникальная строка.
В шестом параметре указывается путь к иконке, которая будет выводиться в данном пункте меню. Функция plugins_url возвращает абсолютный url к директории плагина. __FILE__ – магическая константа php. Вообще она содержит полный путь и имя текущего файла. А если её использовать, как мы, в фукции plugins_url, то она делает первый параметр этой функции относительным к родительской директории текущего файла. =) Запутанно написано, вообщем копируйте как в примере, а там по ходу дела разберетесь.
Естественно, нужно положить сам файл иконки по указанному пути в папку плагина /test-plugin/images/wp-icon.png.
Все. Можете проверять. Заходите в админку, активируйте наш демонстрационный плагин Test Plugin. И наблюдайте в меню новый пункт.
На скрине слева – новый пункт меню “Мой плагин”, который мы только что добавили. Справа же расположено подменю. Как его добавить мы сейчас разберемся в пункте 2.
2. Добавление подменю
Для добавления подменю используется функция add_submenu_page:
1 2 3 4 |
<?php add_submenu_page(parent_slug, page_title, menu_title, capability, menu_slug, function ); ?> |
Здесь почти все параметры аналогичны параметрам функции add_menu_page. Поэтому подробно уже их не буду расписывать (смотрите описание в пункте 1). Единственный отличный параметр – первый – parent_slug.
parent_slug – краткое имя родительского меню (то, которое мы задавали в пункте 1 в четвертом параметре – ‘test-plugin/admin.php’). Т.е. таким образом мы указываем подпунктом какого меню является данный пункт.
page_title – заголовок страницы, который попадет в теги <title>
menu_title - название пункта меню, которое будет отображаться в админке
capability - минимальные возможности (доступы), необходимые для того, чтобы увидеть это меню
menu_slug - краткое имя для ссылки на это меню (должно быть уникальным)
function - функция, которая должна вызываться для отображения страницы для данного пункта меню
Пример добавления подменю:
1 2 3 4 5 6 7 |
add_action('admin_menu', 'test_plugin_add_submenu_options'); function test_plugin_add_submenu_about() { add_submenu_page('test-plugin/admin.php', 'О плагине', 'О плагине', 'manage_options', 'test-plugin/about.php'); } |
Код очень похож на добавление пункта меню верхнего уровня. Единственное отличие – здесь мы используем функцию add_submenu_page.
3. Добавление пункта меню в существующее меню
Для добавления подменю меню “Параметры” используется функция add_options_page:
1 2 3 4 |
<?php add_options_page( page_title, menu_title, capability, menu_ slug, function); ?> |
Параметры аналогичные, как для функций add_menu_page и add_submenu_page:
page_title — заголовок страницы, который попадет в теги <title>
menu_title — название пункта меню, которое будет отображаться в админке
capability — минимальные возможности (доступы), необходимые для того, чтобы увидеть это меню
menu_slug — краткое имя для ссылки на это меню (должно быть уникальным)
function — функция, которая должна вызываться для отображения страницы для данного пункта меню
Пример добавления подменю в существующее меню:
1 2 3 4 5 6 7 |
add_action('admin_menu', 'test_plugin_add_submenu_options'); function test_plugin_add_submenu_options() { add_options_page('Мой плагин', 'Мой плагин', 'manage_options', 'test-plugin/admin.php'); } |
Если вы хотите добавить подменю в другие системные пункты меню, то в WordPress для каждого такого пункта меню существует своя функция. Вот список этих функций.
add_dashboard_page — Добавляет подменю в меню Консоль (Dashboard)
add_posts_page — Добавляет подменю в меню Записи (Posts)
add_media_page — Добавляет подменю в меню Медиафайлы (Media)
add_links_page — Добавляет подменю в меню Ссылки (Links)
add_pages_page — Добавляет подменю в меню Страницы (Pages)
add_comments_page — Добавляет подменю в меню Комментарии (Comments)
add_theme_page — Добавляет подменю в меню Внешний вид (Appearance)
add_plugins_page — Добавляет подменю в меню Плагины (Plugins)
add_users_page — Добавляет подменю в меню Пользователи (Users)
add_management_page — Добавляет подменю в меню Инструменты (Tools)
add_options_page — Добавляет подменю в меню Параметры (Settings)
Если в вашем плагине будет единственная страница с настройками, то лучше добавить ссылку на неё в уже существующее меню. Если же плагин содержит несколько настроечных страниц, то в этом случае нужно создавать собственное меню верхнего уровня с элементами подменю.
Теперь даю возможность скачать сам тестовый плагин: test-plugin.zip (2,4 KiB, 381 hits)
и выкладываю листинг всего файла test-plugin.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
Plugin URI: http://wordpress-life.ru/kak-dobavit-menyu-pri-sozdanii-plagina.html Description: Тестовый плагин. Version: 1.0 Author: Alexey Yershov Author URI: http://wordpress-life.ru */ /* Copyright 2013 Alexey Yershov (email: yershov.alexey@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ add_action('admin_menu', 'test_plugin_add_top_menu'); add_action('admin_menu', 'test_plugin_add_submenu_about'); add_action('admin_menu', 'test_plugin_add_submenu_options'); function test_plugin_add_top_menu() { add_menu_page( 'Мой плагин', 'Мой плагин', 'manage_options', 'test-plugin/admin.php', '', plugins_url( '/images/wp-icon.png', __FILE__ ) ); } function test_plugin_add_submenu_about() { add_submenu_page('test-plugin/admin.php', 'О плагине', 'О плагине', 'manage_options', 'test-plugin/about.php'); } function test_plugin_add_submenu_options() { add_options_page('Мой плагин', 'Мой плагин', 'manage_options', 'test-plugin/admin.php'); } ?> |
Естественно, при разработке реального плагина, наверное, лучше добавление всех пунктов меню сделать в одной функции. В моем демонстрационном Test Plugin я, для удобства, разместил добавление разных пунктов меню в отдельных функциях.
Если возникнут вопросы – пишите.
Если еще не подписались на мой блог – добро пожаловать! Будем вместе осваивать WordPress.
Успехов в творчестве!
Добрый день!
Очень полезная статья!
Возник один вопрос как в подменю изменить наименование пункта который повторяет название основного пункта меню.
В вашем примере это “Мой плагин”
Получается так:
“Пункт меню
Пункт меню
Нужный мне пункт”
Т.е. “Пункт меню” в основном меню и в подменю имеют одно и тоже наименование и ведут на одну и туже страницу.
Нужно сделать так:
“Пункт меню
Пункт подменю
Нужный мне пункт”
Или вообще в идеале:
“Пункт меню
Нужный мне пункт”
Что должно быть в файле test-plugin/admin.php?
Как заносить данные в wp_options через options.php?