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

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

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

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

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

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

Для начала нужно определить, какие функции нам необходимы:

  • Форма подписки с полем для email
  • Валидация и проверка формата email
  • Сохранение подписчика в базе данных
  • Подтверждение подписки через email (double opt-in)
  • Управление списком подписчиков в админке
  • Возможность отправлять рассылки (опционально)

Далее мы реализуем каждый пункт с примерами кода и рекомендациями.

Создание формы подписки с валидацией

Начнем с простой формы, которую можно вывести на любую страницу с помощью шорткода. В functions.php вашей темы или в отдельном плагине добавьте следующий код:

function wptickets_subscribe_form() {
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['wptickets_email'])) {
        $email = sanitize_email($_POST['wptickets_email']);
        if (!is_email($email)) {
            echo '<p style="color:red;">Введите корректный email.</p>';
        } else {
            // Здесь будет обработка подписки
            echo '<p style="color:green;">Спасибо за подписку! Проверьте почту для подтверждения.</p>';
        }
    }
    return '<form method="post"><input type="email" name="wptickets_email" placeholder="Ваш email" required><button type="submit">Подписаться</button></form>';
}
add_shortcode('wptickets_subscribe', 'wptickets_subscribe_form');

Этот код создает шорткод [wptickets_subscribe], который выводит форму с полем email и кнопкой. При отправке проверяется корректность email и выводится сообщение.

Сохранение подписчика в базе данных WordPress

Для хранения подписчиков создадим отдельную таблицу при активации плагина или с помощью функции:

function wptickets_create_subscribers_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wptickets_subscribers';
    $charset_collate = $wpdb->get_charset_collate();
    
    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        email varchar(100) NOT NULL,
        confirmed tinyint(1) DEFAULT 0 NOT NULL,
        confirm_token varchar(64) DEFAULT '' 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__, 'wptickets_create_subscribers_table');

Таблица хранит email, статус подтверждения, уникальный токен для подтверждения, и дату подписки.

Реализация подтверждения подписки через email (double opt-in)

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

function wptickets_handle_subscription($email) {
    global $wpdb;
    $table = $wpdb->prefix . 'wptickets_subscribers';
    $token = wp_generate_password(20, false, false);
    $exists = $wpdb->get_var($wpdb->prepare("SELECT id FROM $table WHERE email = %s", $email));
    if ($exists) {
        return 'Вы уже подписаны';
    }
    $wpdb->insert($table, [
        'email' => $email,
        'confirmed' => 0,
        'confirm_token' => $token,
        'subscribed_at' => current_time('mysql')
    ]);
    $confirm_link = add_query_arg([
        'wptickets_confirm' => $token,
        'email' => urlencode($email)
    ], home_url());
    $subject = 'Подтвердите подписку на новости';
    $message = "Здравствуйте,

Пожалуйста, подтвердите вашу подписку, перейдя по ссылке:
$confirm_link

Если вы не подписывались, просто игнорируйте это письмо.";
    wp_mail($email, $subject, $message);
    return 'Письмо с подтверждением отправлено на ваш email';
}

Далее нужно обработать переход по ссылке, для этого подключим хук init:

function wptickets_confirm_subscription() {
    if (isset($_GET['wptickets_confirm'], $_GET['email'])) {
        $token = sanitize_text_field($_GET['wptickets_confirm']);
        $email = sanitize_email($_GET['email']);
        global $wpdb;
        $table = $wpdb->prefix . 'wptickets_subscribers';
        $subscriber = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table WHERE email = %s AND confirm_token = %s", $email, $token));
        if ($subscriber && $subscriber->confirmed == 0) {
            $wpdb->update($table, ['confirmed' => 1], ['id' => $subscriber->id]);
            wp_die('Подписка подтверждена. Спасибо!');
        } else {
            wp_die('Неверная ссылка или подписка уже подтверждена.');
        }
    }
}
add_action('init', 'wptickets_confirm_subscription');

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

Для удобства можно добавить отдельную страницу в админке, где будут отображаться все подписчики и их статус подтверждения. Пример простого меню и таблицы:

function wptickets_admin_menu() {
    add_menu_page('Подписчики', 'Подписчики', 'manage_options', 'wptickets_subscribers', 'wptickets_subscribers_page');
}
add_action('admin_menu', 'wptickets_admin_menu');

function wptickets_subscribers_page() {
    global $wpdb;
    $table = $wpdb->prefix . 'wptickets_subscribers';
    $subscribers = $wpdb->get_results("SELECT * FROM $table ORDER BY subscribed_at DESC");
    echo '<h1>Список подписчиков</h1>';
    echo '<table class="wp-list-table widefat fixed striped"><thead><tr><th>Email</th><th>Подтвержден</th><th>Дата подписки</th></tr></thead><tbody>';
    foreach ($subscribers as $sub) {
        echo '<tr><td>' . esc_html($sub->email) . '</td><td>' . ($sub->confirmed ? 'Да' : 'Нет') . '</td><td>' . esc_html($sub->subscribed_at) . '</td></tr>';
    }
    echo '</tbody></table>';
}

Так вы сможете быстро видеть, кто подписался и подтвердил подписку.

Рекомендации по плагинам для расширения функционала подписки

Если вы хотите не реализовывать всё вручную, а использовать готовые решения, обратите внимание на следующие плагины:

  • MailPoet — позволяет создавать и отправлять рассылки прямо из WordPress, есть удобный редактор и управление подписчиками.
  • Subscribe2 — простой плагин для подписки с уведомлениями о новых публикациях.
  • WPForms — мощный конструктор форм с поддержкой подписок и интеграцией с популярными почтовыми сервисами.

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

Заключение

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

Если хотите, могу помочь дополнительно с кодом отправки рассылок или интеграцией с API популярных сервисов.

Как создать автоматический отчет по тикетам в WPtickets для WordPress
24.01.2026
Создание комплексного фильтра по свойствам тикетов в WPtickets для WordPress
14.04.2026
Автоматизация уведомлений в WPtickets для эффективной поддержки клиентов
30.12.2025
Установка и настройка WPtickets плагина для поддержки клиентов в WordPress
24.11.2025
Автоматическое отклонение тикетов в WPtickets: настройка и примеры
28.01.2026