Как создать функционал подписки на новости в WordPress: практическое руководство

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

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

Несмотря на большое количество готовых плагинов для подписки (MailChimp, Newsletter, MailPoet и др.), иногда хочется иметь полный контроль над процессом, избежать зависимости от сторонних сервисов и минимизировать нагрузку на сайт. Такой подход особенно полезен при узких задачах или уникальных требованиях.

Собственный функционал позволит:

  • Управлять списком подписчиков в базе данных WordPress;
  • Настраивать дизайн формы подписки под стиль сайта;
  • Гибко настраивать отправку писем (например, через SMTP);
  • Интегрировать подписку с другими функциями сайта, например, с заказами или пользовательскими данными.

Далее мы пошагово разберём, как реализовать такую систему.

Создание кастомного плагина для подписки на новости в WordPress

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

Шаг 1: Создаём структуру плагина

Создайте папку wporders-newsletter в директории wp-content/plugins. В ней создайте файл wporders-newsletter.php с содержимым:

<?php
/**
 * Plugin Name: WPOrders Newsletter
 * Description: Простая подписка на новости с сохранением адресов в базе.
 * Version: 1.0
 * Author: WPOrders
 */

// Защита от прямого доступа
if (!defined('ABSPATH')) {
    exit;
}

// Функция активации плагина — создаёт таблицу подписчиков
function wporders_newsletter_activate() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wporders_subscribers';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
      id mediumint(9) NOT NULL AUTO_INCREMENT,
      email varchar(100) NOT NULL,
      subscribed_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
      PRIMARY KEY  (id),
      UNIQUE KEY email (email)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'wporders_newsletter_activate');

Этот код создаст таблицу для хранения email адресов подписчиков при активации плагина.

Шаг 2: Добавляем форму подписки через шорткод

Чтобы встраивать форму подписки в записи, страницы и виджеты, реализуем шорткод.

// Функция вывода формы подписки
function wporders_newsletter_form() {
    $html = '<form method="post" action="">'
          . '<input type="email" name="wporders_email" placeholder="Введите ваш email" required>'
          . '<input type="submit" name="wporders_subscribe" value="Подписаться">'
          . '</form>';
    
    // Обработка отправки формы
    if (isset($_POST['wporders_subscribe'])) {
        $email = sanitize_email($_POST['wporders_email']);
        if (is_email($email)) {
            global $wpdb;
            $table = $wpdb->prefix . 'wporders_subscribers';
            $exists = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $table WHERE email = %s", $email));
            if ($exists) {
                $html .= '<p>Этот email уже подписан.</p>';
            } else {
                $wpdb->insert($table, ['email' => $email]);
                $html .= '<p>Спасибо за подписку!</p>';
            }
        } else {
            $html .= '<p>Введите корректный email.</p>';
        }
    }
    return $html;
}
add_shortcode('wporders_newsletter', 'wporders_newsletter_form');

Теперь вы можете добавить форму в любом месте сайта, вставив шорткод [wporders_newsletter].

Шаг 3: Отправка приветственного письма подписчику

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

// Отправка письма после добавления подписчика
function wporders_newsletter_send_email($email) {
    $subject = 'Спасибо за подписку на новости!';
    $message = 'Вы успешно подписались на новости нашего сайта. Ожидайте интересные обновления.';
    $headers = ['Content-Type: text/html; charset=UTF-8'];

    wp_mail($email, $subject, $message, $headers);
}

// Вызовем функцию после вставки email в базу
if (isset($_POST['wporders_subscribe'])) {
    $email = sanitize_email($_POST['wporders_email']);
    if (is_email($email)) {
        global $wpdb;
        $table = $wpdb->prefix . 'wporders_subscribers';
        $exists = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $table WHERE email = %s", $email));
        if (!$exists) {
            $wpdb->insert($table, ['email' => $email]);
            wporders_newsletter_send_email($email);
            echo '<p>Спасибо за подписку!</p>';
        } else {
            echo '<p>Этот email уже подписан.</p>';
        }
    } else {
        echo '<p>Введите корректный email.</p>';
    }
}

Обратите внимание, что для корректной отправки писем желательно настроить SMTP сервер, например, через плагин WP Mail SMTP.

Интеграция с внешними почтовыми сервисами

Если вы хотите расширить функционал и добавить массовую рассылку, стоит подключить популярные сервисы, например MailChimp или Sendinblue.

Чаще всего это делается через их API. Для примера рассмотрим интеграцию с MailChimp с помощью PHP и wp_remote_post.

function wporders_newsletter_subscribe_mailchimp($email) {
    $api_key = 'ВАШ_API_КЛЮЧ';
    $list_id = 'ID_СПИСКА';
    $data_center = substr($api_key,strpos($api_key,'-')+1);

    $url = 'https://' . $data_center . '.api.mailchimp.com/3.0/lists/' . $list_id . '/members/';

    $json = json_encode([
        'email_address' => $email,
        'status' => 'subscribed'
    ]);

    $response = wp_remote_post($url, [
        'method' => 'POST',
        'headers' => [
            'Authorization' => 'apikey ' . $api_key,
            'Content-Type' => 'application/json'
        ],
        'body' => $json
    ]);

    if (is_wp_error($response)) {
        return false;
    }

    $code = wp_remote_retrieve_response_code($response);
    return $code == 200 || $code == 204;
}
<

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

Обработка отписки и GDPR

Важно предусмотреть возможность легкой отписки пользователей и соответствие требованиям законодательства о защите данных (например, GDPR).

Для этого:

  • Добавьте в письма ссылку для отписки, которая будет вести на страницу с формой удаления email из базы;
  • Реализуйте отдельный шорткод и обработчик, который удаляет email из таблицы подписчиков;
  • Сохраняйте только необходимые данные и не передавайте их третьим лицам без согласия.

Пример обработки отписки:

// Шорткод для отписки
function wporders_newsletter_unsubscribe_form() {
    $html = '<form method="post" action="">'
          . '<input type="email" name="wporders_unsub_email" placeholder="Введите ваш email" required>'
          . '<input type="submit" name="wporders_unsubscribe" value="Отписаться">'
          . '</form>';

    if (isset($_POST['wporders_unsubscribe'])) {
        $email = sanitize_email($_POST['wporders_unsub_email']);
        if (is_email($email)) {
            global $wpdb;
            $table = $wpdb->prefix . 'wporders_subscribers';
            $deleted = $wpdb->delete($table, ['email' => $email]);
            if ($deleted) {
                $html .= '<p>Вы успешно отписаны.</p>';
            } else {
                $html .= '<p>Этот email не найден в списке подписчиков.</p>';
            }
        } else {
            $html .= '<p>Введите корректный email.</p>';
        }
    }
    return $html;
}
add_shortcode('wporders_unsubscribe', 'wporders_newsletter_unsubscribe_form');

Заключение и рекомендации по развитию функционала подписки

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

  • Двойную подписку (double opt-in) с подтверждением по email;
  • Интеграцию с WooCommerce для подписки покупателей;
  • Расширенную статистику и отчёты;
  • Использование AJAX для отправки формы без перезагрузки страницы;
  • Шаблоны писем и персонализацию.

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

Добавление поля комментария к заказу в WooCommerce
20.12.2025
Как создать собственный тип записей в WordPress: практическое руководство
04.12.2025
Как добавить автоматическое возврашение денег в WooCommerce
27.01.2026
Кастомизация email уведомлений о статусах заказов в WooCommerce
10.01.2026
Добавление пользовательского поля в форму оформления заказа WooCommerce без плагинов
24.12.2025