Вы искали способ создания системы уведомлений при использовании WordPress? Познакомьтесь с плагином «Уведомление», решением «все-в-одном» для любой пользовательской системы уведомлений WordPress.
WordPress не предлагает никакой системы уведомлений. Все, что вы можете использовать, это функция wp_mail ()
но все настройки должны быть жестко запрограммированы, иначе вам нужно создать отдельный экран настроек, чтобы пользователь мог настроить параметры. Для написания надежной, настраиваемой и простой в использовании системы требуется много часов. Но не больше. Я покажу вам, как создать свою собственную систему уведомлений в течение нескольких минут с помощью бесплатного плагина Notification. По уведомлению я имею в виду любое уведомление . В большинстве случаев это будет электронная почта, но с плагином, который мы будем использовать, вы также можете отправлять веб-узлы и другие виды уведомлений.
При создании проекта для одного из моих клиентов я столкнулся с этой проблемой, которую я описал. Требовалось иметь несколько пользовательских уведомлений по электронной почте с настраиваемым контентом. Вместо жесткого кодирования каждого предупреждения я решил создать систему. Я хотел, чтобы он был очень гибким, и цель заключалась в том, чтобы как можно быстрее кодировать новые сценарии.
Код, который я написал, стал началом отличного путешествия. Оказалось, что система, которую я создал, была достаточно гибкой, чтобы она могла работать как отдельный пакет. Вот как родился плагин Notification.
Предположим, вы хотите отправить электронное письмо о том, что профиль пользователя обновляется одним из членов вашего сайта. WordPress не предоставляет эту функциональность, но с плагином Notification вы можете создать такое электронное письмо за считанные минуты. Или предположим, что вы хотите синхронизировать свои продукты WooCommerce с сторонним программным обеспечением, отправив веб-сайт на отдельный URL-адрес каждый раз, когда публикуется новый продукт. Это также легко сделать с плагином.
Уроки, извлеченные при разработке плагинов WordPress
Хорошая разработка и поддержка плагинов приводят к большему количеству загрузок. Больше загрузок означает больше денег и лучшую репутацию. Узнайте, как вы можете разрабатывать качественные продукты с семью золотыми правилами. Читать дальше →
В этой статье вы узнаете, как интегрировать плагин в ваше собственное приложение и как создать усовершенствованную систему уведомлений WordPress более быстро и легко, чем когда-либо.
В этой статье мы расскажем:
- как установить плагин,
- идея плагина и его архитектура,
- создание пользовательского сценария для уведомлений,
- создание действия (шаг 1 процесса),
- создание триггера (шаг 2 процесса),
- создание пользовательского типа уведомления,
- как включить режим белых меток и расслоить плагин в вашем пакете.
Установка плагина
Чтобы создать свои собственные сценарии, вам понадобится плагин Notification. Просто установите его из репозитория WordPress.org на панели инструментов WordPress или загрузите его из репозитория GitHub.
Позже в этой статье вы узнаете, как скрыть этот плагин от ваших клиентов и заставить его работать как интегрированная часть вашего плагина или темы .
Идея плагина
Прежде чем перейти в редактор кода, вам нужно знать, как выглядит архитектура плагина. Плагин содержит множество различных компонентов, но его ядро - действительно несколько абстрактных классов.
Основными компонентами являются:
- Уведомление
Это может быть электронное письмо, webhook, push-уведомление или SMS. - Триггер
Это то, что отправляет уведомление. Это эффективно действие WordPress. - Сетка слияния
Это небольшая часть динамического содержимого, например{post_title}
.
Чтобы дать вам лучшее представление о том, как все это играет вместе, вы можете посмотреть это короткое видео:
Ядро плагина Notification действительно просто API. Все триггеры по умолчанию, такие как Опубликованные публикации и Зарегистрированные пользователем — это вещи, построенные поверх этого API.
Поскольку плагин был создан для разработчиков, добавление собственных триггеров очень просто. Все, что требуется, — это действие WordPress, которое представляет собой всего лишь одну строку кода и декларацию класса.
Пользовательский сценарий
Давайте разработаем простой сценарий. Мы добавим текстовую область и кнопку в конец каждого сообщения, позволяя сообщать об ошибках в статье. Затем мы вышлем уведомление при отправке формы.
Этот сценарий был рассмотрен в другой статье «Передача форм без перезагрузки страницы: реализация AJAX в WordPress».
Для простоты сделаем это статической формой, но нет никакой проблемы с помещением действия в обработчик AJAX, а не в функцию wp_mail ()
.
Давайте создадим форму.
Форма
add_filter ('the_content', 'report_a_bug_form');
function report_a_bug_form ($ content) {
// Показывать форму только в сообщениях.
если (! is_single ()) {
return $ content;
}
// Добавьте форму в конец содержимого.
$ content. = '
Обратите внимание, что многие компоненты отсутствуют, такие как WordPress nonces, обработка ошибок и отображение результата действия, но это не относится к данной статье. Чтобы лучше понять, как справиться с этими действиями, прочитайте статью, упомянутую выше.
Подготовка к действию
Чтобы вызвать уведомление, нам понадобится только одно действие. Это не должно быть настраиваемым действием, как показано ниже. Вы можете использовать любое из действий, уже зарегистрированных в ядре WordPress или другом плагине.
Обработчик форм и действий
add_action ('admin_post_report_a_bug', 'report_a_bug_handler');
add_action ('admin_post_nopriv_report_a_bug', 'report_a_bug_handler');
function report_a_bug_handler () {
do_action ('report_a_bug', $ _POST ['post_id']$ _POST ['message']);
// Переадресовываем обратно в статью.
wp_safe_redirect (get_permalink ($ _POST ['post_id']));
Выход;
}
Вы можете узнать больше о том, как использовать файл admin-post.php
в коде WordPress.
Это все, что нам нужно для создания настраиваемого, настраиваемого уведомления. Давайте создадим триггер.
Регистрация пользовательского триггера
Триггер — это просто класс, который расширяет абстрактный триггер. Абстрактный класс делает для вас всю работу. Он помещает триггер в список и обрабатывает уведомления и теги слияния.
Начнем с объявления триггера.
Минимальное определение триггера
класс ReportBug extends BracketSpace Notification Abstracts Trigger {
public function __construct () {
// Добавить slug и заголовок.
Родитель :: __ конструкт (
'сообщить об ошибке',
__ ('Сообщение об ошибке отправлено', 'reportabug')
);
// Крюк к действию.
$ this-> add_action ('report_a_bug', 10, 2);
}
public function merge_tags () {}
}
Все, что вам нужно сделать, это вызвать родительский конструктор и передать триггерный пул и приятное имя.
Затем мы можем подключиться к нашему пользовательскому действию. Метод add_action
очень похож на функцию add_action ()
; поэтому вторым параметром является приоритет, а последний — количество аргументов. Только параметр обратного вызова отсутствует, потому что абстрактный класс делает это для нас.
Имея класс, мы можем зарегистрировать его как наш новый триггер.
register_trigger (новый ReportBug ());
Теперь это полностью рабочий триггер. Вы можете выбрать его из списка при создании нового уведомления.
Хотя триггер работает, и мы уже можем отправить уведомление, которое мы хотим, оно не очень полезно. У нас нет способа показать получателю, у которого сообщение имеет ошибку и что такое сообщение.
Тогда было бы время, чтобы зарегистрировать теги слияния и настроить контекст триггера с параметрами действия, которые у нас есть: идентификатор сообщения и сообщение.
Чтобы сделать это, мы можем добавить еще один метод к классу триггеров. Это обратный вызов действия, где мы можем уловить аргументы действия.
Обработка аргументов действий
действие публичной функции ($ post_ID, $ message) {
// Если сообщение пустое, не отправляйте никаких уведомлений.
if (empty ($ message)) {
return false;
}
// Установите свойства триггера.
$ this-> post = get_post ($ post_ID);
$ this-> message = $ message;
}
Обратите внимание на return false,
. Если вы вернете false
из этого метода, триггер будет остановлен и уведомление не будет отправлено. В нашем случае мы не хотим, чтобы уведомление отправлялось с пустым сообщением. В реальном мире вы хотите подтвердить это до отправки формы.
Затем мы просто задаем свойства класса триггера, полный объект сообщения и сообщение. Теперь мы можем использовать их, чтобы добавить теги слияния к нашему триггеру. Мы можем просто заполнить содержание метода merge_tags
который мы объявили ранее.
Определение тегов слияния
public function merge_tags () {
$ this-> add_merge_tag (новый BracketSpace Notification Defaults MergeTag UrlTag (массив (
'slug' => 'post_url',
'name' => __ ('Почтовый URL', 'reportabug'),
'resolver' => function ($ trigger) {
return get_permalink ($ trigger-> post-> ID);
},
)));
$ this-> add_merge_tag (новый BracketSpace Notification Defaults MergeTag StringTag (массив (
'slug' => 'post_title',
'name' => __ ('Post title', 'reportabug'),
'resolver' => function ($ trigger) {
return $ trigger-> post-> post_title;
},
)));
$ this-> add_merge_tag (новый BracketSpace Notification Defaults MergeTag HtmlTag (массив (
'slug' => 'message',
'name' => __ ('Message', 'reportabug'),
'resolver' => function ($ trigger) {
return nl2br (сообщение $ trigger->);
},
)));
$ this-> add_merge_tag (новый BracketSpace Notification Defaults MergeTag EmailTag (массив (
'slug' => 'post_author_email',
'name' => __ ('Post author email', 'reportabug'),
'resolver' => function ($ trigger) {
$ author = get_userdata ($ trigger-> post-> post_author);
return $ author-> user_email;
},
)));
}
Это добавит четыре тега слияния, все готовые к использованию во время составления уведомления.
Тег слияния представляет собой экземпляр специального класса. Вы можете видеть, что существует множество типов этих тегов, и мы используем их в зависимости от значения, которое возвращается от преобразователя. Вы можете увидеть все теги слияния в репозитории GitHub.
Все теги слияния добавляются с помощью метода add_merge_tag
и для них требуется массив конфигурации с тремя ключами:
- slug
Статическое значение, которое будет использоваться в уведомлении (т. Е.{post_url}
). - имя
Переведенная метка для тега слияния. - resolver
Функция, которая заменяет тег слияния фактическим значением.
Резольвер не обязательно должен быть закрытием, как в нашем случае, но использовать его удобно. Вы можете передать имя функции как строку или массив, если это метод в другом классе.
В функции resolver доступен только один аргумент: экземпляр класса триггера. Таким образом, мы можем получить доступ к свойствам, которые мы только что установили в методе action
и вернуть нужное нам значение.
И это все! Теги слияния недоступны для использования с нашим триггером, и мы можем настроить как можно больше уведомлений об отчете об ошибке.
Создание пользовательского типа уведомления
Плагин Notification предлагает не только настраиваемые триггеры, но и настраиваемые типы уведомлений. Плагин поставляется с двумя типами: электронная почта и webhook, но у него есть простой API для регистрации ваших собственных уведомлений.
Он работает очень похоже на пользовательский триггер: вам также нужен класс и вызов одной простой функции для регистрации.
Я показываю только пример; реализация будет зависеть от системы, которую вы хотите интегрировать. Возможно, вам потребуется включить стороннюю библиотеку и вызвать ее API или работать в файловой системе WordPress, но в приведенном ниже руководстве вы найдете основной процесс.
Начнем с объявления класса:
класс CustomNotification extends BracketSpace Notification Abstracts Notification {
public function __construct () {
// Добавить slug и заголовок.
Родитель :: __ конструкт (
'Custom_notification',
__ («Пользовательское уведомление», «textdomain»)
);
}
public function form_fields () {}
публичная функция send ( BracketSpace Notification Interfaces Triggerable $ trigger) {}
}
В конструкторе вы должны вызвать конструктор класса родителя и передать его имя и сообщение.
Метод form_fields
используется для создания формы конфигурации для уведомлений. (Например, уведомление по электронной почте будет иметь тему, тело и т. Д.)
Метод send
вызывается триггером, и там вы можете вызвать сторонний API, с которым хотите интегрироваться.
Затем вы должны зарегистрировать его с помощью функции register_notification
.
register_trigger (новый CustomNotification ());
Форма уведомления
Может быть случай, когда у вас есть уведомление без полей конфигурации. Это нормально, но, скорее всего, вы захотите предоставить администратору WordPress способ настройки содержимого уведомлений с помощью тегов слияния.
Именно поэтому мы будем регистрировать два поля, название и сообщение в методе form_fields
. Это выглядит так:
public function form_fields () {
$ this-> add_form_field (новое BracketSpace Notification Defaults Field InputField (массив (
'label' => __ ('Title', 'textdomain'),
'name' => 'title',
'resolvable' => true,
'description' => __ ('Вы можете использовать теги слияния', 'textdomain'),
)));
$ this-> add_form_field (новое BracketSpace Notification Defaults Field TextareaField (массив (
'label' => __ ('Message', 'textdomain'),
'name' => 'message',
'resolvable' => true,
'description' => __ ('Вы можете использовать теги слияния', 'textdomain'),
)));
}
Как вы можете видеть, каждое поле является объектом и зарегистрировано с помощью метода add_form_field
. Список всех доступных типов полей можно найти в репозитории GitHub.
Каждое поле имеет переводимую метку, уникальное имя и набор других свойств. Вы можете определить, должно ли поле быть разрешено с помощью тегов слияния с помощью разрешаемого ключа
. Это означает, что когда кто-то использует тег слияния {post_title}
в этом поле, он будет изменен с фактическим заголовком сообщения. Вы также можете указать поле
для лучшего пользовательского опыта.
На этом этапе ваш настраиваемый тип уведомления можно использовать в интерфейсе плагина с любым доступным типом триггера.
Отправка пользовательского уведомления
Чтобы это действительно работало, мы должны использовать метод send
в нашем объявлении класса уведомления. Это место, где вы можете написать вызов API или использовать файловую систему WordPress или любой WordPress API и делать все, что вам нравится, с данными уведомления.
Вот как вы можете получить к нему доступ:
публичная функция send ( BracketSpace Notification Interfaces Triggerable $ trigger) {
$ title = $ this-> data ['title'];
$ message = $ this-> data ['message'];
// @todo Запишите здесь интеграцию.
}
На этом этапе все поля разрешены с помощью тегов слияния, что означает, что переменные готовы к отправке.
Это дает вам бесконечные возможности для интеграции WordPress с любой услугой, будь то ваш локальный поставщик SMS, другая установка WordPress или любой внешний API, с которым вы хотите общаться.
Белая маркировка и объединение плагина
Не идеальна для создания зависимости плагина, который можно легко деактивировать и удалить. Если вы создаете систему, которая действительно требует, чтобы плагин Notification всегда был доступен, вы можете связать плагин с вашим собственным кодом.
Если вы раньше использовали плагин расширенных пользовательских полей, вы, вероятно, знакомы с процедурой связывания. Просто скопируйте файлы плагина в свой плагин или тему и вызовите плагин вручную.
Плагин Notification работает очень аналогично, но вызывать плагин намного проще, чем с помощью дополнительных пользовательских полей.
Просто скопируйте файлы плагина и потребуйте один файл, чтобы он работал.
require_once ('путь / to / plugin / notification / load.php');
Плагин выяснит свое местоположение и URL-адреса.
Но связать плагин может быть недостаточно. Возможно, вам нужно полностью скрыть, что вы используете это стороннее решение. Вот почему плагин Notification поставляется с белым ярлыком, который вы можете активировать в любое время.
Он также включен как единый вызов функции:
notification_whitelabel (массив (
// Крюк администратора, под которым отображаются уведомления.
'page_hook' => 'edit.php? post_type = page',
// Если отображается страница расширений.
'extensions' => false,
// Если страница настроек дисплея.
'settings' => false,
// Ограничить доступ к идентификаторам пользователей.
// Это работает, только если настройки включены.
'settings_access' => массив (123, 456),
));
По умолчанию вызов этой функции скроет все триггеры по умолчанию.
Используя обе технологии, белую маркировку и комплектацию, полностью спрячет любые ссылки на источник плагина, и решение будет вести себя как полностью интегрированная часть вашей системы.
Заключение
Плагин Notification — это решение «все-в-одном» для любой пользовательской системы уведомлений WordPress. Его очень легко настроить, и он работает из коробки. Все триггеры, которые зарегистрированы, будут работать с любым типом уведомления, и если у вас есть какие-либо дополнительные требования, вы можете сэкономить некоторое время, используя существующее расширение.
Если вы хотите узнать больше деталей и передовые технологии, перейдите на сайт документации.
Я всегда открыт для новых идей, поэтому, если у вас есть, вы можете связаться со мной здесь, в комментариях, через вопросы GitHub или в Twitter.
Загрузите плагин из репозитория и попробуйте!