Как создать автоматические email-рассылки в WordPress без плагинов

Зачем создавать автоматические 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 в опцию.

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

Как исправить ошибку WooCommerce «Невозможно создать заказ» при смене способа оплаты
08.05.2026
Как успешно использовать WPRemark для автоматизации обработки форм в WordPress
09.01.2026
Как отключить AJAX пагинацию в WordPress без плагинов
30.12.2025
Как автоматизировать поддержку многоязычности в WordPress с помощью Polylang и WPTO
18.03.2026
Как использовать хуки в WordPress: практические примеры и советы
10.11.2025