Как создать простую систему подписок на новости в WordPress

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

Почему стоит сделать собственную систему подписок в WordPress

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

Кроме того, вы сможете:

  • Хранить подписчиков в собственной базе данных, не отдавая их данные третьим лицам.
  • Настраивать внешний вид и логику подписки под дизайн и задачи сайта.
  • Интегрировать подписку с вашими рассылками без ограничений, используя например SMTP-сервер.

Основные шаги создания системы подписок на новости

Для реализации системы нам потребуется:

  • Создать базу данных (таблицу) для хранения email подписчиков.
  • Сделать форму подписки на сайте.
  • Обработать отправку формы и добавить email в базу.
  • Создать механизм рассылки новостей подписчикам.

Давайте разберем каждый шаг подробно и с примерами кода.

Создаем таблицу для подписчиков

Для хранения подписчиков в базе данных WordPress создадим новую таблицу. Это удобно и безопасно. Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wpticket_create_subscribers_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpticket_subscribers';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id bigint(20) 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);
}
add_action('after_setup_theme', 'wpticket_create_subscribers_table');

Этот код создает таблицу с полями: id, email и датой подписки. Уникальный индекс по email не позволит добавить одного и того же подписчика дважды.

Создаем форму подписки с защитой от спама

Форма подписки должна быть простой, но с защитой от спама. Используем nonce и проверку email. Пример формы для вставки в шаблон или виджет:

function wpticket_subscription_form() {
    ob_start();
    ?>
    <form method="post" action="">
        <input type="email" name="wpticket_email" required placeholder="Введите ваш email">
        <?php wp_nonce_field('wpticket_subscribe_action', 'wpticket_subscribe_nonce'); ?>
        <button type="submit">Подписаться</button>
    </form>
    <?php
    return ob_get_clean();
}

Для вывода формы используйте в шаблоне echo wpticket_subscription_form();

Обработка формы и добавление подписчика

Добавим обработчик, который сработает при отправке формы, проверит данные и добавит email в таблицу. Вставьте этот код в functions.php или плагин:

function wpticket_handle_subscription() {
    if (isset($_POST['wpticket_email'])) {
        if (!isset($_POST['wpticket_subscribe_nonce']) || !wp_verify_nonce($_POST['wpticket_subscribe_nonce'], 'wpticket_subscribe_action')) {
            wp_die('Ошибка безопасности. Попробуйте еще раз.');
        }

        $email = sanitize_email($_POST['wpticket_email']);
        if (!is_email($email)) {
            echo '<p style="color:red;">Неверный формат email.</p>';
            return;
        }

        global $wpdb;
        $table = $wpdb->prefix . 'wpticket_subscribers';

        $exists = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $table WHERE email = %s", $email));

        if ($exists) {
            echo '<p style="color:green;">Вы уже подписаны на новости.</p>';
        } else {
            $inserted = $wpdb->insert($table, [
                'email' => $email,
                'subscribed_at' => current_time('mysql')
            ]);

            if ($inserted) {
                echo '<p style="color:green;">Спасибо за подписку!</p>';
            } else {
                echo '<p style="color:red;">Произошла ошибка, попробуйте позже.</p>';
            }
        }
    }
}
add_action('wp_head', 'wpticket_handle_subscription');

Этот код проверяет nonce, валидирует email, проверяет, есть ли уже такой подписчик, и добавляет нового, если его нет. Сообщения информируют пользователя о результате.

Настройка рассылки новостей подписчикам

Чтобы отправлять новости подписчикам, можно использовать WP Cron или запускать рассылку вручную через админку. Для примера реализуем функцию отправки письма всем подписчикам.

Функция отправки письма всем подписчикам

function wpticket_send_newsletter($subject, $message) {
    global $wpdb;
    $table = $wpdb->prefix . 'wpticket_subscribers';
    $subscribers = $wpdb->get_col("SELECT email FROM $table");

    if (empty($subscribers)) {
        return false;
    }

    foreach ($subscribers as $email) {
        wp_mail($email, $subject, $message);
    }

    return true;
}

Вы можете вызвать эту функцию из консоли, административной панели или привязать к какой-то кнопке. Например:

// Пример вызова
wpticket_send_newsletter('Новые новости сайта', 'Здравствуйте! У нас обновления, заходите на сайт.');

Дополнительные улучшения и защита системы подписок

Валидация и защита от спама

Для снижения количества спама можно добавить капчу (например, Google reCAPTCHA) или скрытое поле honeypot. Это поможет отсеять ботов.

Подтверждение подписки (Double Opt-In)

Для повышения качества базы подписчиков стоит реализовать подтверждение подписки через email. После заполнения формы пользователю отправляется письмо со ссылкой, по которой нужно перейти для активации подписки. Это предотвращает добавление некорректных и чужих адресов.

Управление подписчиками через админку

Добавьте страницу в админ-панель для просмотра и удаления подписчиков. Это можно сделать с помощью add_menu_page и вывода таблицы с базовыми операциями.

Заключение

Создание собственной системы подписок в WordPress – отличное решение для контроля над рассылками и удобства пользователей. Мы рассмотрели полный цикл: от создания таблицы в базе до отправки писем подписчикам. Такой подход позволит вам адаптировать систему под свои задачи, минимизировать зависимости и повысить безопасность. При необходимости систему можно расширять, добавляя подтверждения, интеграции с внешними сервисами и статистику.

Как создать автоматическое сообщение о изменении статуса тикета в WordPress
21.03.2026
Как создать автоматические ответы в тикет-системе WordPress
03.02.2026
Как настроить разрешения и ролевую систему в тикет-системе WordPress
16.02.2026
Отладка и решение проблем с AJAX-запросами в WordPress: практическое руководство
26.04.2026
Как создать автоматические эскалации в тикет-системе WordPress
09.02.2026