Как добавить меню при создании плагина

Привет!

Почти год назад я начинал тему создания плагина WordPress. Тогда был создан простенький плагин, который изменял заголовок статьи при выводе. В сегодняшней статье я хочу сделать еще один шаг в сторону разработки плагинов (причем, более сложных).

Как вы знаете, большинство плагинов WordPress имеют свои пункты меню в административной панели. Эти пункты меню, чаще всего, ссылаются на страницы с какими-то настройками, которые использует плагин.

Так вот в данной статье мы подробно разберемся как же создавать пункты меню (верхнего уровня, подменю своего меню или уже существующего меню).

 

1. Создание меню верхнего уровня

Для добавления меню верхнего уровня используется функция add_menu_page:

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. Полный листинг файла и возможность его скачать будет в конце статьи, а сейчас приведу только фрагмент кода, касающийся данного пункта.

Пример создания меню верхнего уровня:

Теперь немного разъяснений. К действию 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 мы может сделать формирование страницы с помощью функции.

В такой ситуации пятым параметром нужно указать имя функции render_admin_page, а четвертом тогда пути к файлу может не быть, а просто некая уникальная строка.

В шестом параметре указывается путь к иконке, которая будет выводиться в данном пункте меню. Функция plugins_url возвращает абсолютный url к директории плагина. __FILE__ – магическая константа php. Вообще она содержит полный путь и имя текущего файла. А если её использовать, как мы, в фукции plugins_url, то она делает первый параметр этой функции относительным к родительской директории текущего файла. =) Запутанно написано, вообщем копируйте как в примере, а там по ходу дела разберетесь.

Естественно, нужно положить сам файл иконки по указанному пути в папку плагина /test-plugin/images/wp-icon.png.

Все. Можете проверять. Заходите в админку, активируйте наш демонстрационный плагин Test Plugin. И наблюдайте в меню новый пункт.

 

WordPress добавление пункта меню верхнего уровня

 

На скрине слева – новый пункт меню “Мой плагин”, который мы только что добавили. Справа же расположено подменю. Как его добавить мы сейчас разберемся в пункте 2.

 

2. Добавление подменю

Для добавления подменю используется функция add_submenu_page:

Здесь почти все параметры аналогичны параметрам функции add_menu_page. Поэтому подробно уже их не буду расписывать (смотрите описание в пункте 1). Единственный отличный параметр – первый – parent_slug.

parent_slug – краткое имя родительского меню (то, которое мы задавали в пункте 1 в четвертом параметре – ‘test-plugin/admin.php’). Т.е. таким образом мы указываем подпунктом какого меню является данный пункт.

page_title – заголовок страницы, который попадет в теги <title>

menu_title - название пункта меню, которое будет отображаться в админке

capability - минимальные возможности (доступы), необходимые для того, чтобы увидеть это меню

menu_slug - краткое имя для ссылки на это меню (должно быть уникальным)

function - функция, которая должна вызываться для отображения страницы для данного пункта меню

Пример добавления подменю:

Код очень похож на добавление пункта меню верхнего уровня. Единственное отличие – здесь мы используем функцию add_submenu_page.

 

3. Добавление пункта меню в существующее меню

Для добавления подменю меню “Параметры” используется функция add_options_page:

Параметры аналогичные, как для функций add_menu_page и add_submenu_page:

page_title — заголовок страницы, который попадет в теги <title>

menu_title — название пункта меню, которое будет отображаться в админке

capability — минимальные возможности (доступы), необходимые для того, чтобы увидеть это меню

menu_slug — краткое имя для ссылки на это меню (должно быть уникальным)

function — функция, которая должна вызываться для отображения страницы для данного пункта меню

Пример добавления подменю в существующее меню:

Если вы хотите добавить подменю в другие системные пункты меню, то в 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, 315 hits)

и выкладываю листинг всего файла test-plugin.php:

Естественно, при разработке реального плагина, наверное, лучше добавление всех пунктов меню сделать в одной функции. В моем демонстрационном Test Plugin я, для удобства, разместил добавление разных пунктов меню в отдельных функциях.

Если возникнут вопросы – пишите.

Если еще не подписались на мой блог – добро пожаловать! Будем вместе осваивать WordPress.

Успехов в творчестве!

Понравилась статья? Не забудьте поделиться с друзьями и коллегами:

Вы можете пропустить чтение записи и оставить комментарий. Размещение ссылок запрещено.

1 комментарий к записи “Как добавить меню при создании плагина”

  1. Сергей

    Добрый день!
    Очень полезная статья!
    Возник один вопрос как в подменю изменить наименование пункта который повторяет название основного пункта меню.
    В вашем примере это “Мой плагин”
    Получается так:
    “Пункт меню
    Пункт меню
    Нужный мне пункт”

    Т.е. “Пункт меню” в основном меню и в подменю имеют одно и тоже наименование и ведут на одну и туже страницу.
    Нужно сделать так:
    “Пункт меню
    Пункт подменю
    Нужный мне пункт”
    Или вообще в идеале:
    “Пункт меню
    Нужный мне пункт”

Оставить комментарий

Для размещения кода в комментарии используйте теги <pre> </pre>, например:


Подписаться, не комментируя