Как создать подписку на новости в WordPress без плагинов

Подписка на новости — это важный элемент маркетинга для любого сайта на WordPress, особенно для тематических площадок, таких как wpmarketing.ru. Многие владельцы сайтов устанавливают сторонние плагины для сбора email-адресов, но это не всегда удобно: плагины могут нагружать сайт, конфликтовать с другими расширениями или требовать платных версий для расширенных функций. В этой статье мы подробно разберем, как реализовать подписку на новости без плагинов, используя только стандартные возможности WordPress и немного PHP-кода.

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

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

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

Начнем с создания простой формы для сбора email. Вставьте следующий код в нужное место темы, например, в файл footer.php или используйте виджет с поддержкой HTML:

<form action="" method="post" id="wpmarketing_subscribe_form">
  <label for="wpmarketing_email">Введите ваш email для подписки:</label><br>
  <input type="email" name="wpmarketing_email" id="wpmarketing_email" required>
  <input type="submit" name="wpmarketing_subscribe" value="Подписаться">
</form>

Это базовая форма с полем для email и кнопкой отправки. При нажатии данные будут отправлены на ту же страницу методом POST.

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

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

function wpmarketing_handle_subscription() {
  if (isset($_POST['wpmarketing_subscribe'])) {
    $email = sanitize_email($_POST['wpmarketing_email']);
    if (!is_email($email)) {
      echo '<div style="color:red;">Ошибка: введен некорректный email.</div>';
      return;
    }
    $subscribers = get_option('wpmarketing_subscribers', array());
    if (in_array($email, $subscribers)) {
      echo '<div style="color:green;">Вы уже подписаны на новости.</div>';
      return;
    }
    $subscribers[] = $email;
    update_option('wpmarketing_subscribers', $subscribers);
    echo '<div style="color:green;">Спасибо за подписку!</div>';
    wpmarketing_send_welcome_email($email);
  }
}
add_action('wp_head', 'wpmarketing_handle_subscription');

Здесь происходит:

  • Проверка, что форма отправлена;
  • Очистка и валидация email;
  • Получение текущего списка подписчиков из опций WP;
  • Проверка на дубликаты;
  • Добавление нового email и сохранение обратно в базу;
  • Вывод сообщения пользователю;
  • Отправка приветственного письма (функция ниже).

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

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

function wpmarketing_send_welcome_email($email) {
  $subject = 'Подписка на новости wpmarketing.ru';
  $message = "Здравствуйте!\n\nСпасибо за подписку на новости нашего сайта. Мы будем присылать вам только полезную информацию о WordPress и маркетинге.";
  $headers = array('Content-Type: text/plain; charset=UTF-8');
  wp_mail($email, $subject, $message, $headers);
}

WordPress использует функцию wp_mail, которая обертка вокруг стандартного PHP mail, но с дополнительными возможностями и фильтрами.

Хранение подписчиков: почему не использовать опции для большого списка

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

Пример создания таблицы и записи данных:

function wpmarketing_create_subscribers_table() {
  global $wpdb;
  $table_name = $wpdb->prefix . 'wpmarketing_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 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__, 'wpmarketing_create_subscribers_table');

function wpmarketing_save_subscriber_to_db($email) {
  global $wpdb;
  $table_name = $wpdb->prefix . 'wpmarketing_subscribers';
  $wpdb->insert($table_name, array('email' => $email), array('%s'));
}

Для использования этой схемы замените код, который сохраняет email в опции, на вызов wpmarketing_save_subscriber_to_db($email). Также добавьте соответствующие проверки и обработку ошибок.

Защита от спама и безопасность

Форму подписки нужно защитить от автоматических ботов и спама. Для этого можно:

  • Добавить простую капчу, например, Google reCAPTCHA;
  • Использовать скрытое поле honeypot, которое заполняют только боты;
  • Использовать nonce WordPress для проверки подлинности отправки формы;
  • Ограничить частоту отправок с одного IP.

Пример добавления nonce в форму и проверка его на сервере:

<form action="" method="post" id="wpmarketing_subscribe_form">
  <label for="wpmarketing_email">Введите ваш email для подписки:</label><br>
  <input type="email" name="wpmarketing_email" id="wpmarketing_email" required>
  <input type="hidden" name="wpmarketing_nonce" value="<?php echo wp_create_nonce('wpmarketing_subscribe_nonce'); ?>">
  <input type="submit" name="wpmarketing_subscribe" value="Подписаться">
</form>
function wpmarketing_handle_subscription() {
  if (isset($_POST['wpmarketing_subscribe'])) {
    if (!isset($_POST['wpmarketing_nonce']) || !wp_verify_nonce($_POST['wpmarketing_nonce'], 'wpmarketing_subscribe_nonce')) {
      echo '<div style="color:red;">Ошибка безопасности. Попробуйте снова.</div>';
      return;
    }
    // остальная обработка...
  }
}
add_action('wp_head', 'wpmarketing_handle_subscription');

Интеграция с сервисами email-маркетинга

Если вам нужны более продвинутые возможности рассылки — сегментация, автоматизация, шаблоны писем — можно отправлять собранные email в такие сервисы, как Mailchimp, Sendinblue, UniSender и другие с помощью их API.

Пример отправки email в Mailchimp через их API:

function wpmarketing_add_subscriber_to_mailchimp($email) {
  $api_key = 'ваш_api_ключ';
  $list_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(array(
    'email_address' => $email,
    'status' => 'subscribed'
  ));

  $args = array(
    'body' => $json,
    'headers' => array(
      'Authorization' => 'apikey ' . $api_key,
      'Content-Type' => 'application/json'
    ),
    'method' => 'POST',
    'data_format' => 'body'
  );

  $response = wp_remote_post($url, $args);
  if (is_wp_error($response)) {
    // обработка ошибки
  }
}

Для автоматизации вы можете вызвать эту функцию вместо сохранения в базу или опцию.

Вывод подписчиков и управление ими в админке

Чтобы просматривать список подписчиков, можно добавить страницу в админ-панель WordPress. Ниже пример добавления простой страницы с выводом списка email из опций:

function wpmarketing_add_admin_menu() {
  add_menu_page('Подписчики', 'Подписчики', 'manage_options', 'wpmarketing_subscribers', 'wpmarketing_render_subscribers_page');
}
add_action('admin_menu', 'wpmarketing_add_admin_menu');

function wpmarketing_render_subscribers_page() {
  if (!current_user_can('manage_options')) {
    return;
  }
  $subscribers = get_option('wpmarketing_subscribers', array());
  echo '<h1>Список подписчиков</h1>';
  if (empty($subscribers)) {
    echo '<p>Подписчики отсутствуют.</p>';
    return;
  }
  echo '<table class="wp-list-table widefat fixed striped">';
  echo '<thead><tr><th>Email</th></tr></thead>';
  echo '<tbody>';
  foreach ($subscribers as $email) {
    echo '<tr><td>' . esc_html($email) . '</td></tr>';
  }
  echo '</tbody></table>';
}

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

Итог

Реализация подписки на новости в WordPress без плагинов — это отличный способ получить полный контроль над процессом и снизить зависимость от сторонних решений. Такой подход подойдет для небольших и средних сайтов, где важна легкость и безопасность. В дальнейшем вы сможете расширять функционал, интегрируя API сервисов рассылки или улучшая интерфейс в админке. Для маркетинга на wpmarketing.ru это поможет наладить качественную коммуникацию с аудиторией и повысить вовлеченность.

Если хотите готовое решение с расширенным функционалом, обратите внимание на плагины из каталога WPSHOP, например, My Popup для создания всплывающих окон подписки или WPRemark для рассылки и управления подписчиками.

Как сделать автоматический маркетинговый UTM-генератор в WordPress
06.03.2026
Как добавить и удалить поля в оформлении заказа WooCommerce без плагинов
31.05.2026
Как создать динамическую страницу продуктов в WordPress с AJAX
02.04.2026
Как автоматизировать управление маркетинговыми аналитиками в WordPress
27.01.2026
Как автоматизировать управление подписками в WordPress
11.01.2026