Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. WordPress
Code

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

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

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

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

Прикрепленное уведомление администратора

Мы уже знаем, как отображать уведомление администратора, которое может быть отклонено. Все, что нам нужно сделать, это добавить CSS класс is-dismissible к элементу div. Тем не менее, это только временное действие, и будет отклонять уведомление только для текущей страницы. Как только страница перезагружается, оно снова появляется.

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

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

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

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

Затем добавьте функцию обратного вызова reject_admin_notice() в тот же класс:

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

Standard admin notice with custom CSS ID

Нам нужно добавить код JavaScript, чтобы сделать вызов Ajax, поэтому добавьте папку js в корневую папку плагина admin-notices и внутри создайте файл с именем admin-notices.js. Добавьте код в новый файл, чтобы проверить его правильную загрузку, выводя консольное сообщение.

В Gwyer_Plugin_Options::init() добавьте новый вызов add_action для размещения нашего файла скрипта:

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

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

Добавьте свойство класса в Gwyer_Plugin_Options:

Затем в create_admin_menu_page() используйте это новое свойство, чтобы сохранить дескриптор на странице параметров плагина:

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

Если все пойдет хорошо, вы увидите сообщение admin-notices.js загружен!, выводимое на консоль браузера.

Admin notice JavaScript loaded

Обновите код JavaScript в admin-notices.php следующим образом:

Здесь мы слушаем событие click на ID an1, который мы добавили в наше уведомление администратора ранее. Как только элемент нажимается, выполняется запрос Ajax. Давайте рассмотрим следующий запрос.

В Gwyer_Dismissible_Admin_Notices::init() добавьте новый вызов add_action:

Это запустит функцию обратного вызова после срабатывания Ajax запроса display_dismissible_admin_notice. Помните, что это первоначально было определено как свойство data.action в нашем запросе Ajax.

Теперь добавьте функцию обратного вызова display_dismissible_admin_notice в Gwyer_Dismissible_Admin_Notices:

Сохраните изменения, перезагрузите страницу параметров плагина и нажмите кнопку отмены уведомления администратора, чтобы увидеть запрос Ajax в действии!

The Ajax request in action

Если запрос был успешным, вы увидите сообщение Processing Ajax request... DONE!, отображенное в консоли браузера.

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

В Gwyer_Dismissible_Admin_Notices::init() добавьте второй вызов register_activation_hook():

И добавьте функцию обратного вызова create_custom_option в класс:

Теперь, когда активируется плагин, создается пользовательская опция gwyer-reject и устанавливается в true.

Обновите display_dismissible_admin_notice(), чтобы обновить пользовательскую опцию при срабатывании запроса Ajax:

Теперь все, что осталось сделать, это обновить  update_download_admin_notice(), чтобы проверить значение настраиваемой опции и вывести уведомление администратора, только если оно установлено в true.

Деактивируйте и активируйте плагин, чтобы проверить добавленный код. Перейдите на страницу параметров плагина, отклоните уведомление администратора и обновите страницу. Уведомление больше не должно быть видимым. Ура!

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

Чтобы все было просто, это был тривиальный пример использования запроса Ajax для установки опции пользовательского уведомления. На практике вам следует использовать значение nonce (число, используемое один раз) для проверки запроса Ajax как минимальной меры безопасности.

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

Уведомление о запрете пользовательского действия

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

Примечание: Используйте этот метод с осторожностью или вы рискуете быстро оттолкнуть пользователей своих плагинов!

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

В отличие от предыдущего метода, когда нам приходилось плясать с бубном, чтобы сделать уведомление администратора отклоняемым навсегда, решение для этого метода является приятно простым!

Во-первых, закомментируйте все вызовы функций в Gwyer_Dismissible_Admin_Notices::init(). Затем добавьте новую функцию add_action():

Определите обратный вызов следующим образом:

Вот и все! Я же сказал, что это просто, не так ли?

Единственное, что мы сделали по-другому в этот раз, это использовали WordPress функцию is_plugin_active(), чтобы проверить, установлен ли и активирован ли плагин Hello Dolly. Если нет, is_plugin_active() вернет false, и наше уведомление администратора появится.

Example of a nag admin notice

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

Это хорошо работает для отдельных плагинов, но что, если вы хотите напомнить пользователям активировать несколько плагинов? Вместо жесткого кодирования в информации о плагинах Hello Dolly мы могли бы создать массив для белого списка наших необходимых плагинов.

Замените install_plugin_to_dismiss_admin_notice() на:

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

List of required plugins

Пользовательские уведомления администратора

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

Во-первых, однако, закомментируйте все вызовы функций в Gwyer_Dismissible_Admin_Notices::init(), чтобы мы начинали с чистого листа.

Нам нужно добавить CSS для наших пользовательских типов уведомлений администратора, поэтому в корневую папку плагина добавьте папку css и внутри создайте файл с именем admin-notices.css. Чтобы установить его на всех страницах администратора, добавьте новый вызов add_action в Gwyer_Plugin_Options::init().

Затем для вызова функции обратного вызова enqueue_styles() добавьте этот метод в тот же класс:

Теперь давайте настроим новый метод вывода наших пользовательских уведомлений администратора. В Gwyer_Admin_Notices::init() добавьте:

Затем добавьте обратный вызов, чтобы отобразить список пользовательских уведомлений администратора:

Наконец, добавьте CSS в admin-notices.css, чтобы стилизовать наши пользовательские уведомления администратора:

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

Some examples of custom admin notices

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

Я не буду вдаваться в подробности об используемом пользовательском CSS. Это просто забавно, и большинство стилей довольно просты и понятны.

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

Попробуйте код на своем проекте

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

Заключение

Спасибо, что присоединились ко мне в этом курсе из четырех частей. Надеюсь, теперь у вас будет гораздо больше уверенности при внедрении уведомлений администратора в свои собственные проекты.

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

Создание собственных пользовательских уведомлений тоже довольно просто, но на практике лучше не злоупотреблять их использованием в своих проектах. В большинстве случаев лучше придерживаться стилей 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.