Подписка на новости — это важный элемент маркетинга для любого сайта на 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 для рассылки и управления подписчиками.