На многих сайтах, включая те, что построены на 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 популярных сервисов.