Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

Постоянные уведомления администратора WordPress: Часть 2

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Persisted WordPress Admin Notices.
Persisted WordPress Admin Notices: Part 1
Persisted WordPress Admin Notices: Part 3

Russian (Pусский) translation by Anna Goorikova (you can also view the original English article)

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

Мы начнем с внедрения стандартных уведомлений администратора и используем их в качестве основы для более гибких и расширенных примеров.

Настройка нашего плагина

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

Я предполагаю, что у вас уже есть в разработке локальный WP сайт. Если нет, обратитесь к ссылкам в первой части этой серии уроков.

Создайте новую папку плагина с именем admin_notices внутри /wp-content/plugins/, а затем создайте файл admin_notices.php, который будет основным файлом плагина.

Откройте admin_notices.php в своем любимом редакторе и добавьте базовую структуру плагина:

Мы добавили заголовок плагина, поэтому WordPress распознает наш плагин. За этим следует класс, который будет содержать методы для отображения уведомлений администратора.

Я назвал класс Gwyer_Admin_Notices, чтобы сделать его как можно более уникальным. Таким образом, маловероятно, что он будет конфликтовать с существующими именами классов.

Начнем с отображения основного уведомления администратора, а затем будем расширять его, чтобы сделать его более полезным. Чтобы создать уведомление администратора, добавьте хук admin_notices к функции init():

Хук включает функцию обратного вызова test_notice, которая будет использоваться для вывода уведомления администратора.

Добавьте следующий метод класса в Gwyer_Admin_Notices, чтобы отобразить актуальное уведомление администратора. Для сообщений мы будем использовать классические цитаты из фильмов из последних 100 лет фильмов.

Активируйте плагин, чтобы показать тестовое уведомление.

Adding a basic admin notice to our plugin

Давайте также добавим примеры других типов уведомлений администратора, которые мы можем отобразить, включая отклоняемый тип, добавив is-dismissible CSS класс. Добавьте их в метод test_notice() под блоком div существующего уведомления администратора:

Full set of admin notice types

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

«Отклоняемое» уведомление - в данном случае означает только для текущей страницы. Наличие постоянных уведомлений администратора не очень гибкое, поэтому позже мы подробно рассмотрим различные способы эффективного отклонения уведомлений администратора.

Хуки для уведомлений администратора

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

Вот четыре доступных хука:

*В настоящее время для этих хуков нет официальной документации.

Итак, где бы вы обычно использовали all_admin_notices, user_admin_notices и network_admin_notices? И чем они отличаются от admin_notices?

Ранее я сказал, что хук admin_notices отображает уведомления на всех страницах администрирования, но это не совсем так. Если вы посмотрите на admin-header.php в ядре WordPress, вы увидите, что admin_notices, network_admin_notices и user_admin_notices являются взаимоисключающими. То есть, только один из этих хуков запускается на странице администрирования WordPress.

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

Во-первых, is_network_admin() проверяет, находитесь ли вы на странице сетевого администрирования (например, любая страница администратора, основанная на /wp-admin/network/ URL). Если это так, запускается хук network_admin_notices.

В противном случае, is_user_admin() проверяет, находитесь ли вы на странице администрирования пользователей (например, любая страница администратора на основе /wp-admin/user/ URL). Если это так, то срабатывает хук user_admin_notices.

И, как вы могли догадаться, если оба is_network_admin() и is_user_admin() возвращают false, то запускается хук admin_notices.

Это приводит к тому, что остается только хук all_admin_notices. Этот хук не является частью условного выражения, описанного выше, поэтому этот хук гарантированно будет отображаться на всех страницах администрирования, включая страницы сетевого администрирования для мультисайта.

Надо уточнить, что для любой страницы администрирования WordPress гарантированно запускается только хук all_admin_notices. Из трех других хуков только один будет срабатывать в зависимости от страницы администратора, на которой вы сейчас находитесь.

Я бы посоветовал вам взглянуть на admin-header.php (ближе к концу файла), чтобы узнать, как WordPress решает, когда какой хук уведомлений администратора использовать.

Мы будем использовать только admin_notices в этой серии уроков, но, возможно, окажется, что вам нужны некоторые другие хуки в вашем собственном проекте, поэтому стоит просмотреть их.

Отображение уведомлений администратора на конкретных страницах

Теперь обратим наше внимание на отображение уведомлений администратора на определенных страницах. Во-первых, закомментируйте вызов add_action, чтобы наши тестовые уведомления больше не отображались.

Внутри init() добавьте новый вызов add_action(), который мы будем использовать для отображения уведомления администратора на одной конкретной странице администратора.

Затем определите метод specific_admin_page() следующим образом:

Сохраните изменения и просмотрите любую страницу в интерфейсе администратора WordPress. Я попробую страницу главной панели.

Dashboard admin notice

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

Функция get_current_screen() возвращает объект WP_Screen с информацией о текущей странице администратора. Свойство объекта, которое нам интересно, это WP_Screen->base, оно оценивает базовый тип текущей страницы. Попробуйте загрузить различные страницы администрирования WordPress, чтобы узнать, какие значения возвращаются для WP_Screen->base.

Мы можем использовать базовое значение, чтобы по условию загружать наше уведомление администратора только на странице панели управления. Значение, на которое нам нужно проверить, это dashboard. Давайте также покажем альтернативное уведомление администратора, если мы не на странице панели управления администратора. Замените свое определение specific_admin_page() на:

Output base name of current admin page in the admin notice

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

Error type admin notice shown when were not on the expected admin page

Использование этого простого подхода дает нам немного гибкости при выводе уведомлений администратора на определенных страницах интерфейса администратора. Мы можем легко распространить это на "белый список" с любым количеством страниц администрирования, на которых мы хотим отображать уведомления администратора.

И еще раз замените функцию specific_admin_pages(), на этот раз следующим кодом:

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

Our success message shows on the admin comments page

И когда мы посещаем любую другую страницу администратора (не включенную в массив с нашим белым списком), мы видим альтернативное уведомление администратора.

Only allowed admin pages show the success message

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

Создайте новый файл с именем plugin-options.php внутри папки плагина admin-notices, добавленной нами ранее, и добавьте следующий код:

В верхней части admin-notices.php (непосредственно над объявлением класса) подключите класс параметров плагина в основной файл плагина с помощью строки:

Я не буду вдаваться в подробности о том, как работает код в plugin-options.php, поскольку из этого может получиться целое отдельное руководство! Если вы хотите освежить свои знания, я бы рекомендовал взглянуть на страницу WordPress Codex на добавление страниц параметров плагина.

В целом, все, что мы делаем, это добавляем новую страницу Уведомления Администратора в меню Настройки. Сама страница параметров плагина содержит одно текстовое поле, в которое вы можете ввести строку. При нажатии кнопки Сохранить изменения содержимое текстового поля сохраняется в базе данных WordPress.

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

Перейдите в Настройки > Уведомления администратора, чтобы просмотреть страницу параметров плагина.

Plugin options page

Как и ожидалось, уведомление администратора, которое мы добавили ранее, отображается на нашей странице параметров плагина. Сообщение об ошибке отображается, потому что наша страница параметров плагина не входит в массив $whitelist_admin_pages разрешенных страниц администрирования. Давайте исправим это сейчас.

Чтобы добавить нашу страницу параметров в массив, нам нужно знать базовое имя. Внутри specific_admin_page() измените блок div с уведомлением об ошибке администратора на следующее:

Мы по-прежнему получаем такое же уведомление об ошибке администратора, как и раньше, но на этот раз оно включает в себя базовое имя, которое нам нужно, которое выглядит так: settings_page_admin-notices/plugin-options. Это не то имя, которое мы могли бы легко угадать, поэтому стоило потратить время на его получение!

Добавьте базовое имя в массив $whitelist_admin_pages, который теперь должен выглядеть так:

Обновите страницу параметров плагина, чтобы увидеть обновленное уведомление администратора.

Updated admin notice

Теперь, когда мы знаем базовое имя страницы параметров плагина, мы можем легко создать уведомление администратора, которое отображается только на этой странице администрирования. Удалите settings_page_admin-notices/plugin-options из массива $whitelist_admin_pages и закомментируйте второй вызов функции add_action в init(). Затем добавьте третье действие, которое мы будем использовать для нашей страницы параметров плагина, только для уведомлений администратора. Теперь функция init() должна выглядеть так:

Давайте теперь отредактируем функцию обратного вызова plugin_admin_notice(). Добавьте этот новый метод в класс Gwyer_Admin_Notices:

Это очень похоже на specific_admin_page(), за исключением того, что мы удалили условное выражение. Кроме того, мы добавили кнопку Отклонить, добавив CSS класс is-dismissible, поэтому уведомление администратора также может быть закрыто.

Plugin options page only admin notice

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

Вывод

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

В третьей части мы продолжим расширение плагина тем, что покажем, как запускать уведомления администратора, когда происходят определенные события. Помните, что с открытым исходным кодом WordPress позволяет легко учиться и расширяться. Для этого нам нужно многое пересмотреть и изучить на Envato Market, если вам интересно.

Затем мы обратим наше внимание на то, как мы можем решить проблему с постоянными уведомлениями администратора, чтобы они не появлялись при обновлении страницы. Мы реализуем несколько разных методов в нашем пользовательском плагине, которые позволят нам это сделать.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.