wpurok.ru wordpress WPUrok

Создание подписки на рассылку в WordPress без плагинов: пошаговое руководство

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

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

Использование плагинов — удобный способ, но он имеет свои недостатки:

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

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

Основные этапы создания подписки на рассылку

Разобьём задачу на несколько ключевых шагов:

  1. Создание формы подписки на фронтенде.
  2. Обработка данных формы и валидация.
  3. Сохранение подписчиков в базе данных.
  4. Отправка письма подтверждения (опционально).
  5. Интеграция с почтовым сервисом или экспорт подписчиков.

Создание формы подписки на фронтенде

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

function wpurok_subscribe_form_shortcode() {
    ob_start();
    ?>
    <form action="" method="post" id="wpurok-subscribe-form">
        <label for="wpurok-email">Введите ваш email:</label><br>
        <input type="email" name="wpurok_email" id="wpurok-email" required>
        <button type="submit" name="wpurok_subscribe">Подписаться</button>
    </form>
    <?php
    return ob_get_clean();
}
add_shortcode('wpurok_subscribe_form', 'wpurok_subscribe_form_shortcode');

Теперь вы можете вставить шорткод [wpurok_subscribe_form] в любую страницу или запись, и форма появится.

Обработка данных формы и валидация

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

function wpurok_handle_subscribe_form() {
    if ( isset($_POST['wpurok_subscribe']) ) {
        $email = sanitize_email($_POST['wpurok_email']);
        if ( !is_email($email) ) {
            echo '<div style="color:red;">Ошибка: введён некорректный email.</div>';
            return;
        }

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

        // Проверяем, есть ли уже такой email
        $exists = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $table WHERE email = %s", $email));
        if ( $exists ) {
            echo '<div style="color:orange;">Вы уже подписаны на рассылку.</div>';
            return;
        }

        // Вставляем email
        $inserted = $wpdb->insert($table, [
            'email' => $email,
            'date_subscribed' => current_time('mysql')
        ]);

        if ( $inserted ) {
            echo '<div style="color:green;">Спасибо за подписку!</div>';
        } else {
            echo '<div style="color:red;">Ошибка при сохранении данных.</div>';
        }
    }
}
add_action('wp', 'wpurok_handle_subscribe_form');

Данный код обрабатывает POST-запрос, проверяет корректность email и сохраняет его в отдельную таблицу базы данных.

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

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

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

    $sql = "CREATE TABLE $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        email varchar(100) NOT NULL,
        date_subscribed datetime DEFAULT '0000-00-00 00:00:00' 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__, 'wpurok_create_subscribers_table' );

Если вы добавляете код в functions.php, временно вызовите wpurok_create_subscribers_table() вручную для создания таблицы.

Отправка письма подтверждения подписки

Чтобы улучшить взаимодействие с пользователем и избежать фальшивых подписок, полезно отправлять письмо с подтверждением. Для этого добавим функцию отправки email с помощью встроенной wp_mail():

function wpurok_send_confirmation_email($email) {
    $subject = 'Подтверждение подписки на рассылку';
    $message = "Здравствуйте!\nСпасибо за подписку на нашу рассылку.

Если вы не подписывались, просто проигнорируйте это письмо.";
    $headers = ['Content-Type: text/plain; charset=UTF-8'];

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

Вызовите эту функцию после успешного добавления email в базу:

if ( $inserted ) {
    wpurok_send_confirmation_email($email);
    echo '<div style="color:green;">Спасибо за подписку! Проверьте вашу почту для подтверждения.</div>';
} else {
    echo '<div style="color:red;">Ошибка при сохранении данных.</div>';
}

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

Для массовой рассылки и автоматизации рекомендуется выгружать подписчиков из базы и импортировать их в сервисы MailChimp, SendPulse, UniSender и другие. Ваша таблица wpurok_subscribers содержит все необходимые данные.

Чтобы выгрузить подписчиков, создайте простой экспорт в CSV:

function wpurok_export_subscribers_csv() {
    if ( !current_user_can('manage_options') ) {
        return;
    }
    global $wpdb;
    $table = $wpdb->prefix . 'wpurok_subscribers';
    $subscribers = $wpdb->get_results("SELECT email,date_subscribed FROM $table", ARRAY_A);

    if ( empty($subscribers) ) {
        echo '<p>Подписчиков нет.</p>';
        return;
    }

    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="subscribers.csv"');
    $output = fopen('php://output', 'w');
    fputcsv($output, ['Email', 'Дата подписки']);

    foreach ($subscribers as $subscriber) {
        fputcsv($output, $subscriber);
    }
    fclose($output);
    exit;
}
// Вы можете вызвать эту функцию через кастомный админ-пункт или вручную

Дополнительные советы по безопасности и улучшению

Используйте nonce для защиты формы

Чтобы защитить форму от CSRF-атак, добавьте nonce:

function wpurok_subscribe_form_shortcode() {
    ob_start();
    ?>
    <form action="" method="post" id="wpurok-subscribe-form">
        <?php wp_nonce_field('wpurok_subscribe_action', 'wpurok_subscribe_nonce'); ?>
        <label for="wpurok-email">Введите ваш email:</label><br>
        <input type="email" name="wpurok_email" id="wpurok-email" required>
        <button type="submit" name="wpurok_subscribe">Подписаться</button>
    </form>
    <?php
    return ob_get_clean();
}

function wpurok_handle_subscribe_form() {
    if ( isset($_POST['wpurok_subscribe']) ) {
        if ( !isset($_POST['wpurok_subscribe_nonce']) || !wp_verify_nonce($_POST['wpurok_subscribe_nonce'], 'wpurok_subscribe_action') ) {
            echo '<div style="color:red;">Ошибка безопасности. Попробуйте снова.</div>';
            return;
        }
        // Остальной код обработки формы
    }
}
add_action('wp', 'wpurok_handle_subscribe_form');

Добавьте AJAX-обработку для удобства

Чтобы улучшить UX, можно реализовать отправку формы без перезагрузки страницы через AJAX. Для этого подключите скрипт и создайте обработчик в PHP. Это более сложный этап, но значительно повысит интерактивность.

Используйте WP Cron для регулярных рассылок

Если хотите автоматизировать отправку писем подписчикам, изучите WP Cron — встроенный планировщик задач. С его помощью можно запускать рассылки по расписанию.

Итоги и полезные ссылки

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

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

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее