Защита форм обратной связи или регистрации на сайте WordPress от спама – актуальная задача для любого разработчика. Многие решают её с помощью плагинов, но иногда хочется обойтись без них, чтобы не нагружать сайт. В этой статье подробно разберём, как добавить простую капчу в формы WordPress без использования плагинов, используя собственный код и минимальные ресурсы.
Почему стоит использовать собственную капчу без плагинов
Плагины для капчи, например Google reCAPTCHA, действительно надёжны и функциональны, но они:
- Добавляют дополнительный вес и запросы к внешним сервисам.
- Могут конфликтовать с другими плагинами.
- Зависимы от сторонних сервисов, что не всегда удобно для приватности или автономной работы.
Собственная капча позволяет контролировать процесс, минимизировать зависимости и гибко настраивать защиту под конкретный проект.
Создание простой текстовой капчи для формы обратной связи
Рассмотрим пример добавления простой вопросно-ответной капчи. В форме будет вопрос, например, "Сколько будет 3 + 4?", а пользователь должен ввести правильный ответ.
Добавление поля капчи в форму
Если у вас есть стандартная HTML-форма в шаблоне, добавим в неё поле капчи:
<form method="post" action="">
<label>Ваше имя:</label>
<input type="text" name="user_name" required>
<label>Ваш email:</label>
<input type="email" name="user_email" required>
<label>Сколько будет 3 + 4?</label>
<input type="text" name="wpboard_captcha" required>
<input type="submit" name="wpboard_submit" value="Отправить">
</form>
Обработка и проверка капчи в PHP
Добавим в файл functions.php или в файл обработки формы следующий код, который проверит ответ пользователя:
function wpboard_check_captcha($user_answer) {
$correct_answer = 7; // 3 + 4
return intval(trim($user_answer)) === $correct_answer;
}
if (isset($_POST['wpboard_submit'])) {
$captcha_answer = $_POST['wpboard_captcha'] ?? '';
if (!wpboard_check_captcha($captcha_answer)) {
echo '<p style="color:red;">Ошибка: неправильный ответ на капчу.</p>';
} else {
// Здесь продолжаем обработку формы, например, отправку письма
echo '<p style="color:green;">Форма успешно отправлена.</p>';
}
}
Такой подход прост и эффективен против спам-ботов, которые не умеют отвечать на вопрос.
Улучшение капчи: динамические вопросы и защита от обхода
Чтобы повысить надёжность капчи, можно сделать вопросы динамическими и хранить правильный ответ в сессии. Пример:
- При загрузке формы генерируем случайный арифметический пример.
- Сохраняем ответ в сессии.
- При отправке формы сверяем введённый ответ с сохранённым.
Пример генерации и проверки:
session_start();
// Генерация вопроса
if (!isset($_SESSION['wpboard_captcha_answer'])) {
$a = rand(1, 9);
$b = rand(1, 9);
$_SESSION['wpboard_captcha_question'] = "Сколько будет $a + $b?";
$_SESSION['wpboard_captcha_answer'] = $a + $b;
}
// В форме выводим вопрос:
// <label><?php echo $_SESSION['wpboard_captcha_question']; ?></label>
// Проверка при отправке
if (isset($_POST['wpboard_submit'])) {
$user_answer = $_POST['wpboard_captcha'] ?? '';
if (intval(trim($user_answer)) !== $_SESSION['wpboard_captcha_answer']) {
echo '<p style="color:red;">Ошибка: неправильный ответ на капчу.</p>';
} else {
echo '<p style="color:green;">Форма успешно отправлена.</p>';
unset($_SESSION['wpboard_captcha_answer']);
}
}
Такой метод препятствует автоматическому обходу капчи, так как вопрос меняется при каждой загрузке.
Использование WPRemark для улучшения комментариев и защиты от спама
Если у вас стоит плагин WPRemark, он уже содержит встроенные методы антиспама и капчи для комментариев. Можно комбинировать собственную капчу для форм с WPRemark для комментариев.
Альтернативные варианты капчи без плагинов
Кроме текстовой капчи, можно использовать:
- JavaScript-капчу: скрытое поле, которое заполняют только боты.
- Временные проверки: блокировка отправки, если форма заполнялась слишком быстро.
- Простейшие логические задачи или вопросы, понятные человеку.
Например, скрытое поле honeypot:
<input type="text" name="wpboard_honeypot" style="display:none" autocomplete="off">
И проверка, что оно пустое:
if (!empty($_POST['wpboard_honeypot'])) {
// Спам-запрос
exit('Обнаружен спам');
}
Заключение по добавлению капчи без плагинов
Добавление капчи без плагинов — это отличный способ легковесно защитить формы от спама, сохранив контроль над кодом и минимизировав зависимости. Главное — подобрать удобный для пользователей и эффективный для защиты вариант. Приведённые примеры легко адаптируются под любые формы и задачи.
Если вы хотите расширить функционал форм и комментариев, обращайте внимание на решения из WPShop — там есть отличные инструменты, которые помогут повысить безопасность и удобство сайта.