Зачем создавать автоматические email-рассылки в WordPress без плагинов
Автоматические email-рассылки — важный инструмент для взаимодействия с пользователями: уведомления о новых публикациях, персональные предложения, напоминания и многое другое. Многие используют готовые плагины, но иногда нужно обойтись без них, чтобы не перегружать сайт или получить гибкий контроль над процессом. В этой статье расскажу, как реализовать рассылки самостоятельно, используя стандартные возможности WordPress и PHP.
Такой подход полезен, если вы хотите минимизировать зависимости, контролировать логику отправки, интегрировать рассылки с вашим уникальным функционалом или использовать кастомные шаблоны писем.
Основные возможности WordPress для отправки email
WordPress из коробки поддерживает отправку почты через функцию wp_mail(). Она является оберткой над PHP-функцией mail() и позволяет отправлять письма с указанными заголовками, вложениями, HTML-форматом. Однако для надежной доставки лучше использовать SMTP-серверы.
Важные моменты, которые нужно учесть:
- Настройка SMTP — чтобы письма не попадали в спам. Можно использовать сторонние SMTP-сервисы (Gmail, Mailgun, SendGrid) и подключать их через код.
- Планирование рассылок — WordPress поддерживает WP-Cron, который запускает задачи по расписанию.
- Хранение данных рассылок — можно использовать кастомные таблицы или метаполя для контроля статусов отправки и логов.
Пример: базовая автоматическая рассылка новых публикаций подписчикам
Рассмотрим пример, как отправлять письма подписчикам при публикации новой записи без плагинов.
1. Создаем функцию отправки письма
function wpto_send_new_post_email($post_id) {
if (get_post_status($post_id) != 'publish') return;
$post = get_post($post_id);
$subject = 'Новая статья на сайте: ' . $post->post_title;
$message = 'Привет!\n\nОпубликована новая статья: ' . $post->post_title . "\n";
$message .= 'Читать здесь: ' . get_permalink($post_id) . "\n\n";
$message .= 'Спасибо, что с нами!';
// Получаем список email подписчиков
$subscribers = get_option('wpto_email_subscribers', array());
foreach ($subscribers as $email) {
wp_mail($email, $subject, $message);
}
}
add_action('publish_post', 'wpto_send_new_post_email');В этом примере при публикации поста (статус publish) всем email из опции wpto_email_subscribers отправляется письмо с информацией о новой статье.
2. Как добавить и хранить подписчиков
Проще всего добавить подписчиков в опцию WordPress. Для этого можно реализовать форму подписки на фронтенде и обработчик:
function wpto_handle_subscribe() {
if (!isset($_POST['wpto_subscribe_email'])) return;
$email = sanitize_email($_POST['wpto_subscribe_email']);
if (!is_email($email)) return;
$subscribers = get_option('wpto_email_subscribers', array());
if (!in_array($email, $subscribers)) {
$subscribers[] = $email;
update_option('wpto_email_subscribers', $subscribers);
}
}
add_action('init', 'wpto_handle_subscribe');Форма подписки может выглядеть так:
<form method="post" action="">
<input type="email" name="wpto_subscribe_email" placeholder="Ваш email" required>
<button type="submit">Подписаться</button>
</form>Добавляем SMTP для надежной доставки
Для повышения шансов попадания письма в папку «Входящие» стоит настроить отправку через SMTP. Сделать это можно с помощью фильтра phpmailer_init:
function wpto_smtp_configure($phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.example.com';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 587;
$phpmailer->Username = 'your_smtp_login';
$phpmailer->Password = 'your_smtp_password';
$phpmailer->SMTPSecure = 'tls';
$phpmailer->From = 'no-reply@yourdomain.com';
$phpmailer->FromName = 'Ваш сайт';
}
add_action('phpmailer_init', 'wpto_smtp_configure');Замените параметры на реальные данные вашего SMTP провайдера.
Планирование регулярных рассылок через WP-Cron
Если нужно делать не моментальную рассылку, а регулярную, например, раз в день отправлять подборку новых статей, используйте WP-Cron.
Добавление расписания
function wpto_custom_cron_schedule($schedules) {
$schedules['daily_at_9'] = array(
'interval' => 86400,
'display' => 'Каждый день в 9:00'
);
return $schedules;
}
add_filter('cron_schedules', 'wpto_custom_cron_schedule');Регистрация и запуск задачи
if (!wp_next_scheduled('wpto_daily_email_event')) {
wp_schedule_event(strtotime('09:00:00'), 'daily_at_9', 'wpto_daily_email_event');
}
add_action('wpto_daily_email_event', 'wpto_send_daily_digest');
function wpto_send_daily_digest() {
// Логика выборки новых статей за последние 24 часа
$args = array(
'date_query' => array(
array(
'after' => '1 day ago'
)
),
'post_status' => 'publish'
);
$posts = get_posts($args);
if (empty($posts)) return;
$message = "Добрый день!\nСегодня опубликованы новые статьи:\n";
foreach($posts as $post) {
$message .= $post->post_title . ': ' . get_permalink($post->ID) . "\n";
}
$subscribers = get_option('wpto_email_subscribers', array());
foreach ($subscribers as $email) {
wp_mail($email, 'Ежедневная подборка статей', $message);
}
}Советы и рекомендации по реализации email-рассылок без плагинов
- Храните подписчиков в базе аккуратно, предусмотрите возможность отписки.
- Используйте HTML-шаблоны для писем, но не забывайте про текстовую версию.
- Регулярно проверяйте логи отправки, чтобы выявить проблемы с доставкой.
- Для сложных сценариев рассылок можно интегрировать внешние сервисы через API, сохраняя управление из WordPress.
- Оптимизируйте производительность: отправка большого числа писем может тормозить сайт, используйте очереди или внешние cron-задачи.
Интеграция с WPShop: использование плагина My Popup для сбора email
Если хотите собрать подписчиков с помощью удобного интерфейса, рекомендуем плагин My Popup от WPShop. Он позволяет создавать всплывающие формы с подпиской и интегрируется с вашей функцией обработки email, достаточна лишь вызвать сохранение email в опцию.
Так вы получите удобный и гибкий механизм сбора подписчиков, а рассылку сможете делать с помощью описанного выше кастомного кода.