Вопрос или проблема
Я пытаюсь интегрировать функцию «подписаться на рассылку» в свой блог на WordPress.
Пользователи просто должны ввести свое имя и адрес электронной почты, нажать кнопку подписки. Это должно отправить мне электронное письмо, и я добавляю их в список рассылки.
Я активировал плагин WP SMTP Mail и ввел соответствующую информацию о почтовом сервере, чтобы WordPress мог отправлять электронные письма, попросил WordPress отправить мне тестовое сообщение, и это сработало.
Теперь я хочу получать электронное письмо каждый раз, когда кто-то заполняет свое имя и электронную почту и нажимает на подписку.
Если я делаю это сейчас, это просто ничего не делает, страница перезагружается без отправки электронного письма.
Я прикрепил свой код ниже, может кто-нибудь помочь мне с этим?
Код для формы подписки sidebar.php
– это не плагин.
<form action="newsletter_signup.php" method="post">
<p><input class="full" type="text" name="name" placeholder="Ваше имя*"></p>
<p><input class="full" type="email" name="Email" placeholder="Ваш адрес электронной почты*"></p>
<p><input type="submit" class="sub-btn" value="Подписаться"></p>
</form>
Код в файле newsletter_signup.php
:
<?php
require_once('wp-load.php');
$name = $_POST['name'];
$Email = $_POST['Email'];
$to = '[email protected]';
wp_mail($to, $name, 'От: ' . $Email);
echo 'Ваш запрос был отправлен, спасибо.';
?>
Это решение основано на нескольких плагинах WPMU Dev: PopUp Pro и интеграции с Mailchimp. Если вы являетесь членом WPMU Dev, то скачайте и установите их либо с их страниц проектов, либо через панель WPMU Dev в вашем административном интерфейсе WordPress.
Большая часть работы заключается в создании индивидуального стиля для всплывающего окна. Плагин интеграции с Mailchimp просто предоставляет шорткод, который можно добавить в тело всплывающего окна через кнопку TinyMCE, но мы все это рассмотрим позже.
Первый шаг после установки плагинов – настроить плагин интеграции с Mailchimp.
Следующее – это упрощенный подход к вашему вопросу. Он не охватывает все возможности, но он начинает процесс.
Это условное выражение, которое должно находиться там, где вы вставляете форму. Вы не указали, как именно вы вставляете форму, так что это предполагает, что вы можете выполнять PHP из этого места. Если это текстовый виджет, то возможно вам нужно будет сделать что-то немного другое, но основная концепция остается прежней.
Итак, у вас есть два состояния отображения – одно, если форма отправлена, и другое, если нет. Если нет, то очевидно, что вы отображаете форму. Но если форма была отправлена, то вы обрабатываете эти данные, отправляете сообщение и отображаете сообщение об успешной отправке.
<?php
// Проверьте было ли отправлено форму.
$formsubmit = ( isset( $_POST['formsubmit'] ) ) ? true : false;
if ( $formsubmit ) {
// Если форма отправлена, обработайте электронную почту и
// отобразите сообщение об успехе.
// Получите значения формы (не забудьте очистить данные).
$name = sanitize_text_field( $_POST['name'] );
$email = sanitize_email( $_POST['email'] );
// Кому доставляется сообщение?
$to = '[email protected]';
// Тема и текст сообщения:
$subject = "Подписка на веб-форму";
$message = "Следующая подписка была отправлена: \r\n";
$message .= "Имя: " . $name . "\r\n";
$message .= "Электронная почта: " . $email;
// Отправьте сообщение.
wp_mail( $to, $subject, $message );
// Отобразите сообщение об успехе.
echo '<p>Ваш запрос был отправлен, спасибо.</p>';
} else {
// Если форма не была отправлена, отобразите форму. ?>
<form action="newsletter_signup.php" method="post">
<p><input class="full" type="text" name="name" placeholder="Ваше имя*"></p>
<p><input class="full" type="email" name="email" placeholder="Ваш адрес электронной почты*"></p>
<p><input type="submit" class="sub-btn" value="Подписаться"></p>
<input type="hidden" name="formsubmit" value="1" />
</form>
<?php } ?>
Это не является «конечным решением». Существуют разные подходы к этому вопросу. Моя цель с этим ответом – дать простой стартовый пункт, который работает, справляется с тем, что большинство людей забывают очистить вводимые данные формы, и исправляет использование wp_mail()
, которое было некорректным в исходном вопросе.
Отсюда идут дополнительные возможности. Одним из них было бы разделить обработчик и отображение на отдельные процессы, чтобы вы могли отображать HTML (то есть через шорткод) в зависимости от того, была ли отправлена форма, и могли обрабатывать весь PHP в отдельной функции. Для этого вам нужно будет поместить эти элементы в функции, которые будут подключены к некоторым фильтрам и/или действиям.
Ответ или решение
Обработка формы подписки с использованием метода POST на WordPress
Введение
Создание функции подписки на рассылку новостей на вашем блоге WordPress может стать мощным инструментом для взаимодействия с вашей аудиторией. В этом руководстве мы рассмотрим, как правильно обработать форму подписки с использованием метода POST в WordPress, а также обсудим важные аспекты, такие как валидация данных и отправка уведомлений по электронной почте.
Шаг 1: Создание формы подписки
Для начала, создайте простую HTML-форму в вашем файле sidebar.php
. Убедитесь, что ваша форма использует метод POST и указывает на правильный обработчик, а именно на newsletter_signup.php
.
<form action="newsletter_signup.php" method="post">
<p><input class="full" type="text" name="name" placeholder="Ваше имя*" required></p>
<p><input class="full" type="email" name="email" placeholder="Ваш адрес электронной почты*" required></p>
<p><input type="submit" class="sub-btn" value="Подписаться"></p>
</form>
Шаг 2: Обработка данных формы
В вашем файле newsletter_signup.php
вам нужно обработать данные формы. Мы будем использовать функции для очистки и проверки данных перед отправкой электронной почты, что важно для обеспечения безопасности вашего сайта.
<?php
require_once('wp-load.php');
// Проверяем, была ли отправлена форма
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = sanitize_text_field($_POST['name']);
$email = sanitize_email($_POST['email']);
// Задаем адрес для получения уведомления
$to = 'your_email@example.com';
$subject = "Подписка на рассылку";
$message = "Новая подписка:\nИмя: $name\nEmail: $email";
// Отправка письма
if (wp_mail($to, $subject, $message)) {
echo 'Ваш запрос был отправлен. Спасибо!';
} else {
echo 'Произошла ошибка. Пожалуйста, попробуйте еще раз.';
}
}
?>
Объяснение кода:
-
Подключение WordPress: Первая строка кода загружает файлы WordPress. Это необходимо для использования функций WordPress, таких как
wp_mail()
. -
Проверка метода запроса: Мы проверяем, был ли метод запроса POST для обработки данных только после отправки формы.
-
Очистка и валидация данных: Используются функции
sanitize_text_field()
иsanitize_email()
для очистки данных, что помогает предотвратить атаки через внедрение кода. -
Отправка электронной почты: Используя
wp_mail()
, вы можете отправить составленное сообщение на указанный адрес.
Шаг 3: Обработка ответов и визуальное подтверждение
Убедитесь, что ваше сообщение о подтверждении отправляется пользователю после успешной отправки данных. Если отправка не удалась, отобразите соответствующее сообщение об ошибке.
Заключение
Теперь у вас есть простая, но эффективная форма подписки на рассылку для вашего блога на WordPress. Следуя этим шагам, вы сможете легко интегрировать функцию подписки, позволяющую пользователям оставлять свои контактные данные и получать уведомления по электронной почте.
Помните, что безопасность и удобство использования являются приоритетами в любом веб-разработке. Регулярно проверяйте ваши формы на наличие возможных уязвимостей и обеспечивайте корректную работу отправки уведомлений.