Статьи

Создание настраиваемых писем с комментариями: понимание API

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

В частности, мы привыкли видеть электронные письма для:

  • Регистрация пользователей
  • Напоминания пароля
  • Уведомления о комментариях
  • …и так далее.

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

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

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

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

Итак, в этой серии из двух частей мы рассмотрим API для настройки модерации наших комментариев и уведомлений о комментариях.

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

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


Функция, которая отвечает за отправку уведомлений о комментариях, — это функция wp_notify_postauthor .

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

Это гласит:

Эту функцию можно заменить с помощью плагинов. Если плагины не переопределяют эти функции, они будут использоваться вместо этого.

Дезинфицирует URL для использования в перенаправлении.

Теперь два наиболее важных вывода из этой части документации следующие:

  • «Функцию можно заменить с помощью плагинов».
  • Msgstr «Дезинфицирует URL для использования в перенаправлении.»

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

Фактически, это поднимает важную стратегию, когда речь идет о разработке проектов с открытым исходным кодом.

Одним из наиболее мощных аспектов разработки с открытым исходным кодом является сама его природа: это открытый исходный код.

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

Для этого достаточно просто найти функцию в основном приложении. Вы можете сделать это с помощью вашей IDE или путем просмотра WordPress Trac .

Несмотря на это, для целей этого поста рассматриваемая функция находится в wp-includes/pluggable.php .

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


Обратите внимание, что часть того, что делает WordPress таким мощным, — это система хуков. Вспомните из предыдущего поста, что есть два типа хуков: Действия и Фильтры .

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

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

И так как мы ищем функциональность специально для отображения контента для электронной почты, то мы должны искать фильтр.

Итак, apply_filters все сказанное, мы ищем вызов (или вызовы) для apply_filters и эта функция обеспечивает три:

  • $notify_message = apply_filters('comment_notification_text', $notify_message, $comment_id);
  • $subject = apply_filters('comment_notification_subject', $subject, $comment_id);
  • $message_headers = apply_filters('comment_notification_headers', $message_headers, $comment_id);

Но что хорошего в том, чтобы найти фильтры, если мы на самом деле не знаем, как их использовать?


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

  • comment_notification_text отвечает за управление фактическим содержанием электронной почты
  • comment_notification_subject управляет строкой темы письма
  • comment_notification_headers имеют дело с тем, как отображается электронная почта (как правило, именно здесь мы устанавливаем простой текст, скажем, HTML)

Достаточно просто, правда? Конечно, это только половина.

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


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

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

Мы также будем использовать последнюю тему — Twentytwelve — которая поставляется с WordPress 3.5. Итак, пока что, начните настройку среды разработки, и вы будете готовы перейти к следующей статье.


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

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

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

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