Как создать функцию автоматической отправки Email в WordPress с примерами кода

Автоматическая отправка Email-сообщений — важный функционал для многих сайтов на WordPress. Это может быть уведомление о новом заказе, напоминание пользователю, рассылка новостей или системные оповещения. В этой статье подробно разберём, как создать кастомную функцию для автоматической отправки Email с использованием стандартных возможностей WordPress и PHP, а также рассмотрим примеры кода и рекомендации по безопасности.

Почему стоит использовать встроенные функции WordPress для отправки Email

WordPress имеет встроенную функцию wp_mail(), которая является обёрткой над стандартной функцией PHP mail(). Она упрощает отправку Email, поддерживает подключение плагинов для замены метода отправки (например, SMTP) и автоматически подставляет корректные заголовки.

Использование wp_mail() обеспечивает совместимость с экосистемой WordPress, позволяет избежать проблем с кодировкой и форматированием писем.

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

Как создать функцию автоматической отправки Email в WordPress

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

Пример функции отправки Email

function wp8_send_custom_email($to, $subject, $message, $headers = array()) {
    // Проверяем корректность email
    if (!is_email($to)) {
        return new WP_Error('invalid_email', 'Неверный адрес электронной почты');
    }

    // Добавляем стандартный заголовок Content-Type для HTML писем
    if (empty($headers)) {
        $headers[] = 'Content-Type: text/html; charset=UTF-8';
    }

    // Отправляем письмо
    $sent = wp_mail($to, $subject, $message, $headers);

    if (!$sent) {
        return new WP_Error('mail_failed', 'Ошибка при отправке письма');
    }

    return true;
}

Функция принимает адрес получателя, тему письма, сообщение и необязательные заголовки. В ней происходит базовая валидация email и добавление заголовка для HTML-сообщений.

Автоматическая отправка письма при публикации записи

Свяжем отправку Email с событием публикации поста. Для этого используем хук publish_post:

function wp8_notify_admin_on_publish($ID, $post) {
    $admin_email = get_option('admin_email');
    $subject = 'Новая публикация на сайте';
    $message = 'Опубликована новая запись: ' . esc_html(get_the_title($ID)) . "<br>";
    $message .= 'Ссылка: ' . esc_url(get_permalink($ID));

    wp8_send_custom_email($admin_email, $subject, $message);
}
add_action('publish_post', 'wp8_notify_admin_on_publish', 10, 2);

Теперь при каждой публикации записи администратор будет получать уведомление на почту.

Использование плагинов для улучшения отправки Email

Стандартная отправка Email через wp_mail() зависит от настроек сервера, что может привести к попаданию писем в спам или неотправке. Чтобы избежать этого, рекомендуются плагины для SMTP:

  • WP Mail SMTP — позволяет настроить отправку почты через SMTP-серверы популярных почтовых сервисов (Gmail, Яндекс, Mail.ru и др.).
  • Post SMTP Mailer/Email Log — расширенный инструмент с логированием писем и диагностикой ошибок.

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

Обработка ошибок и безопасность отправки Email

При создании автоматических Email важно реализовать обработку ошибок, чтобы своевременно узнать о проблемах с отправкой. В приведённой функции возвращается объект WP_Error, который можно логировать или отправлять уведомления.

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

Для безопасного формирования текста письма используйте функции esc_html() для текста и esc_url() для ссылок, как показано в примере.

Реализация очереди отправки Email с WP-Cron

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

Пример планировщика отправки Email:

function wp8_schedule_email_sending() {
    if (!wp_next_scheduled('wp8_send_queued_emails')) {
        wp_schedule_event(time(), 'hourly', 'wp8_send_queued_emails');
    }
}
add_action('wp', 'wp8_schedule_email_sending');

function wp8_send_queued_emails_callback() {
    // Получаем очередь писем из базы или опций
    $emails = get_option('wp8_email_queue', array());

    foreach ($emails as $key => $email) {
        $result = wp8_send_custom_email($email['to'], $email['subject'], $email['message'], $email['headers']);
        if ($result === true) {
            unset($emails[$key]); // Удаляем отправленное письмо из очереди
        }
    }

    update_option('wp8_email_queue', $emails);
}
add_action('wp8_send_queued_emails', 'wp8_send_queued_emails_callback');

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

Заключение по теме

Создание автоматической отправки Email в WordPress — задача, которую можно решить собственными силами с помощью wp_mail() и хуков. Для сложных сценариев рекомендуются очереди и SMTP-плагины. Внимательное отношение к безопасности и обработке ошибок поможет сделать функционал надёжным и удобным.

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

WooCommerce: как отключить автологин после регистрации пользователя
17.05.2026
WooCommerce: как автоматически удалять товар из корзины после отмены оплаты
13.06.2026
Как удалить CSS и JS файлы в WordPress правильно
09.12.2025
Как создать собственный шорткод в WordPress с примером кода
03.11.2025
Как создать многоуровневое меню в WordPress с помощью плагинов и кода
27.11.2025