В этой статье подробно разберём, как настроить автоматическую отправку email уведомлений при создании или публикации новой записи в WordPress. Это полезно для сайтов с блогом, новостями или каталогами, где необходимо информировать редакторов, администраторов или подписчиков о новых материалах.
Почему стандартных возможностей WordPress недостаточно для email уведомлений
По умолчанию WordPress отправляет базовые системные письма (например, о сбросе пароля). Но для более тонкой настройки уведомлений о публикации записей нужна кастомизация. Многие ищут готовые плагины, но зачастую их функционал ограничен или избыточен.
К тому же, без доработок письма могут уходить в спам или иметь плохой дизайн. Поэтому лучше реализовать отправку писем через собственный код с правильной обработкой событий.
Использование хука transition_post_status для отслеживания публикации записи
Для автоматической отправки email при публикации записи удобно использовать хук transition_post_status. Он позволяет отследить изменение статуса записи, например, с draft на publish.
Рассмотрим пример функции, которая будет срабатывать при публикации записи:
function wp_shablon_send_email_on_publish( $new_status, $old_status, $post ) {
if ( 'publish' === $new_status && 'publish' !== $old_status && 'post' === $post->post_type ) {
$to = get_option('admin_email');
$subject = 'Новая запись опубликована: ' . $post->post_title;
$message = 'Здравствуйте!\n\nБыла опубликована новая запись на сайте: "' . $post->post_title . '".\nПосмотреть запись: ' . get_permalink( $post->ID );
wp_mail( $to, $subject, $message );
}
}
add_action( 'transition_post_status', 'wp_shablon_send_email_on_publish', 10, 3 );В этом коде мы проверяем, что статус изменился на publish, и если это запись типа post, отправляем email на адрес администратора.
Как улучшить письмо: HTML формат и дополнительные получатели
Функция wp_mail поддерживает HTML письма, для этого нужно добавить заголовки. Также можно отправлять письма нескольким адресатам и добавить копии.
Пример расширенной функции:
function wp_shablon_send_html_email_on_publish( $new_status, $old_status, $post ) {
if ( 'publish' === $new_status && 'publish' !== $old_status && 'post' === $post->post_type ) {
$to = get_option('admin_email');
$cc = 'editor@example.com';
$subject = 'Новая запись опубликована: ' . $post->post_title;
$message = '<h2>Опубликована новая запись на сайте</h2>' .
'<p><strong>Заголовок:</strong> ' . $post->post_title . '</p>' .
'<p><strong>Ссылка:</strong> <a href="' . get_permalink( $post->ID ) . '">' . get_permalink( $post->ID ) . '</a></p>';
$headers = array('Content-Type: text/html; charset=UTF-8', 'Cc: ' . $cc);
wp_mail( $to, $subject, $message, $headers );
}
}
add_action( 'transition_post_status', 'wp_shablon_send_html_email_on_publish', 10, 3 );Так письмо будет выглядеть аккуратно и его легче воспринимать.
Подключение SMTP для надежной отправки писем
Чтобы письма не попадали в спам и гарантированно доставлялись, рекомендовано использовать SMTP-сервер. Для WordPress есть удобные плагины, например:
- Postman SMTP — простой в настройке и популярный плагин.
- WP Mail SMTP — функциональный плагин с поддержкой популярных почтовых сервисов.
После установки и настройки SMTP ваши письма будут отправляться через выбранный почтовый сервер, что значительно улучшит доставляемость.
Как отправлять email подписчикам или определённым ролям пользователей
Если вы хотите уведомлять не только администратора, но и других пользователей, например, подписчиков или редакторов, можно получить список пользователей по роли и отправить им письма.
function wp_shablon_email_to_role_on_publish( $new_status, $old_status, $post ) {
if ( 'publish' === $new_status && 'publish' !== $old_status && 'post' === $post->post_type ) {
$users = get_users( array( 'role' => 'editor' ) );
$subject = 'Новая запись опубликована: ' . $post->post_title;
$message = 'Опубликована новая запись: ' . $post->post_title . '\n' . get_permalink( $post->ID );
foreach ( $users as $user ) {
wp_mail( $user->user_email, $subject, $message );
}
}
}
add_action( 'transition_post_status', 'wp_shablon_email_to_role_on_publish', 10, 3 );Так вы сможете автоматически уведомлять нужную аудиторию по ролям.
Использование плагина для расширенных уведомлений
Если хочется более гибких настроек без кода, можно использовать плагин Clearfy Pro. Он позволяет настраивать различные автоматические действия, включая уведомления, фильтровать типы уведомлений и адресатов.
Также стоит обратить внимание на специализированные плагины для email рассылок, но они уже выходят за рамки простых уведомлений о публикации.
Практические советы по отладке и безопасности
Перед использованием кода на боевом сайте:
- Проверьте работу на тестовом сайте.
- Убедитесь, что wp_mail работает корректно, отправив тестовое письмо.
- Используйте nonce и проверки прав, если добавляете формы для управления рассылкой.
- Не отправляйте слишком много писем, чтобы не попасть в спам-фильтры.
Эти простые меры помогут избежать проблем и обеспечить стабильную работу уведомлений.