WordPress Уведомления Сделано легко

WordPress не предлагает какой-либо системы уведомлений. Все, что вы можете использовать это wp_mail() функция, но все настройки должны быть жестко закодированы, иначе вы должны создать отдельный экран настроек, чтобы позволить пользователю настроить параметры. На написание надежной, настраиваемой и простой в использовании системы уходит много часов. Но больше нет. Я покажу вам, как создать свою собственную систему уведомлений в течение нескольких минут с бесплатным плагином уведомления. Под уведомлением, я имею в виду любой вид уведомления. Большую часть времени, это будет электронная почта, но с плагином мы будем использовать, вы также можете отправить webhooks и другие виды уведомлений.

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

Код, который я написал, стал началом большого пути развития. Оказалось, что система, которую я создал, была достаточно гибкой, чтобы она могла работать как отдельный пакет. Так родился плагин Notification.

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

Уроки, извлеченные при разработке WordPress плагины

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

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

В этой статье мы рассмотрим:

  1. как установить плагин,
  2. идея плагина и его архитектуры,
  3. создание пользовательского сценария для уведомлений,
  4. создание действия (шаг 1 процесса),
  5. создание триггера (шаг 2 процесса),
  6. создание пользовательского типа уведомлений,
  7. как включить режим белой этикетки и расслоение плагина в вашем пакете.

Установка плагина

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

Большой предварительный просмотр

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

Идея плагина

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

Основными компонентами являются:

  • Уведомление
    Это может быть электронная почта, веб-крюк, push-уведомление или SMS.
  • Спусковой крючок
    Это то, что отправляет уведомление. Это эффективно WordPress действий.
  • Тег слияния
    Это небольшая часть динамического контента, как {post_title} .

Чтобы дать вам лучшее представление о том, как все это играет вместе, вы можете посмотреть это короткое видео:

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

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

Пользовательский сценарий

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

Этот сценарий был описан в другой статье, “Отправка форм без перезагрузки страницы: AJAX реализации в WordPress“.

Для простоты давайте сделаем его статической формой, но нет никаких проблем поместить действие в обработчик AJAX, а не в wp_mail() функцию.

Давайте создадим форму.

Форма

add_filter( 'the_content', 'report_a_bug_form' );
function report_a_bug_form( $content ) {

    // Display the form only on posts.
    if ( ! is_single() ) {
        return $content;
    }

    // Add the form to the bottom of the content.
    $content .= '<form action="' . admin_url( 'admin-post.php' ) . '" method="POST">
        <input type="hidden" name="post_id" value="' . get_ID() . '">
        <input type="hidden" name="action" value="report_a_bug">
        <textarea name="message" placeholder="' . __( 'Describe what's wrong...', 'reportabug' ) . '"></textarea>
        <button>' . __( 'Report a bug', 'reportabug' ) . '</button>
    </div>';

    return $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'] );

    // Redirect back to the article.
    wp_safe_redirect( get_permalink( $_POST['post_id'] ) );
    exit;

}

Вы можете прочитать больше о том, как использовать admin-post.php файл в WordPress Codex.

Это все, что нам нужно для создания пользовательского, настраиваемого уведомления. Давайте создадим спусковой крючок.

Регистрация пользовательского триггера

Спусковой крючок — это простой класс, который расширяет абстрактный триггер. Абстрактный класс делает всю работу за вас. Он помещает триггер в список, и он обрабатывает уведомления и теги слияния.

Начнем с триггерного заявления.

Минимальное определение триггера

class ReportBug extends BracketSpaceNotificationAbstractsTrigger {

    public function __construct() {

        // Add slug and the title.
        parent::__construct(
            'reportabug',
            __( 'Bug report sent', 'reportabug' )
        );

        // Hook to the action.
        $this->add_action( 'report_a_bug', 10, 2 );

    }

    public function merge_tags() {}

}

Все, что вам нужно сделать, это позвонить родительскому конструктору и передать триггер пули и красивое имя.

Затем, мы можем подключиться к нашей пользовательской деятельности. add_actionМетод очень похож на add_action() функцию; так, второй параметр является приоритетным, а последний – число аргументов. Отсутствует только параметр обратного вызова, потому что абстрактный класс делает это за нас.

Имея класс, мы можем зарегистрировать его в качестве нашего нового триггера.

register_trigger( new ReportBug() );

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

(Большой предварительный просмотр)

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

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

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

Аргументы в отношении обработки действий

public function action( $post_ID, $message ) {

    // If the message is empty, don't send any notifications.
    if ( empty( $message ) ) {
        return false;
    }

    // Set the trigger properties.
    $this->post    = get_post( $post_ID );
    $this->message = $message;

}

Обратите внимание на return false; заявление. Если вы вернетесь false из этого метода, триггер будет остановлен, и уведомление не будет отправлено. В нашем случае мы не хотим, чтобы уведомление было отправлено с пустым сообщением. В реальном мире необходимо проверить это до отправки формы.

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

Определение тегов слияния

public function merge_tags() {

    $this->add_merge_tag( new BracketSpaceNotificationDefaultsMergeTagUrlTag( array(
        'slug'        => 'post_url',
        'name'        => __( 'Post URL', 'reportabug' ),
        'resolver'    => function( $trigger ) {
            return get_permalink( $trigger->post->ID );
        },
    ) ) );

    $this->add_merge_tag( new BracketSpaceNotificationDefaultsMergeTagStringTag( array(
        'slug'        => 'post_title',
        'name'        => __( 'Post title', 'reportabug' ),
        'resolver'    => function( $trigger ) {
            return $trigger->post->post_title;
        },
    ) ) );

    $this->add_merge_tag( new BracketSpaceNotificationDefaultsMergeTagHtmlTag( array(
        'slug'        => 'message',
        'name'        => __( 'Message', 'reportabug' ),
        'resolver'    => function( $trigger ) {
            return nl2br( $trigger->message );
        },
    ) ) );

    $this->add_merge_tag( new BracketSpaceNotificationDefaultsMergeTagEmailTag( array(
        '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 метода, и они требуют конфигурации массив с тремя ключами:

  • Пули
    Статическое значение, которое будет использоваться в уведомлении (т.е. {post_url} ).
  • Имя
    Переведенная метка для тега слияния.
  • Распознавателя
    Функция, заменяя тег слияния фактическим значением.

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

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

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

(Большой предварительный просмотр)

Создание пользовательского типа уведомлений

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

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

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

Начнем с классовой декларации:

class CustomNotification extends BracketSpaceNotificationAbstractsNotification {

    public function __construct() {

        // Add slug and the title.
        parent::__construct( 
            'custom_notification',
            __( 'Custom Notification', 'textdomain' )
        );

    }

    public function form_fields() {}

    public function send( BracketSpaceNotificationInterfacesTriggerable $trigger ) {}

}

В конструкторе вы должны позвонить в конструктор класса родителя и передать пулю и красивое имя уведомления.

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

sendМетод вызывается триггером, и именно здесь можно вызвать сторонний API, с которым вы хотите интегрироваться.

Далее, вы должны зарегистрировать его с register_notification функцией.

register_trigger( new CustomNotification() );

Форма уведомления

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

Поэтому мы зарегистрируем в методе два поля: название и form_fields сообщение. Это выглядит следующим образом:

public function form_fields() {

    $this->add_form_field( new BracketSpaceNotificationDefaultsFieldInputField( array(
        'label'       => __( 'Title', 'textdomain' ),
        'name'        => 'title',
        'resolvable'  => true,
        'description' => __( 'You can use merge tags', 'textdomain' ),
    ) ) );

    $this->add_form_field( new BracketSpaceNotificationDefaultsFieldTextareaField( array(
        'label'       => __( 'Message', 'textdomain' ),
        'name'        => 'message',
        'resolvable'  => true,
        'description' => __( 'You can use merge tags', 'textdomain' ),
    ) ) );

}

Как вы можете видеть, каждое поле является объектом и зарегистрировано add_form_field методом. Список всех доступных типов полей можно найти в репозитории GitHub.

Каждое поле имеет переводную этикетку, уникальное название и набор других свойств. Можно определить, следует ли решать поле с помощью тегов слияния с resolvable ключом. Это означает, что, когда кто-то использует {post_title} тег слияния в этой области, он будет изменен с фактическим заголовком поста. Вы также можете предоставить description поле для лучшего пользовательского интерфейса.

На этом этапе пользовательский тип уведомлений может использоваться в интерфейсе плагина с любым доступным типом триггера.

(Большой предварительный просмотр)

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

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

Вот как вы можете получить к нему доступ:

public function send( BracketSpaceNotificationInterfacesTriggerable $trigger ) {

    $title   = $this->data['title'];
    $message = $this->data['message'];

    // @todo Write the integration here.

}

На этом этапе все поля решаются с помощью тегов слияния, что означает, что переменные готовы к отправке.

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

Белая маркировка и комплектации Плагин

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

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

Плагин Notification работает очень похоже, но ссылаясь на плагин гораздо проще, чем с Advanced Custom Fields.

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

require_once( 'path/to/plugin/notification/load.php' );

Плагин будет выяснить его местоположение и URL-адреса.

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

Он также включен как единый вызов функции:

notification_whitelabel( array(
    // Admin page hook under which the Notifications will be displayed.
    'page_hook'       => 'edit.php?post_type=page',
    // If display extensions page.
    'extensions'      => false,
    // If display settings page.
    'settings'        => false,
    // Limit settings access to user IDs.
    // This works only if settings are enabled.
    'settings_access' => array( 123, 456 ),
) );

По умолчанию вызов этой функции скроет все триггеры по умолчанию.

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

Заключение

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

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

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

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

Источник: smashingmagazine.com

Великолепный Журнал

Великолепный, сокрушительный, разящий (см. перевод smashing) независимый журнал о веб-разработке. Основан в 2006 году в Германии. Имеет няшный дизайн и кучу крутых авторов, которых читают 2 млн человек в месяц.

Добавить комментарий

%d такие блоггеры, как: