Как добавить капчу в формы WordPress без плагинов

Защита форм обратной связи или регистрации на сайте 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 — там есть отличные инструменты, которые помогут повысить безопасность и удобство сайта.

Автоматическое удаление старого контента в WordPress: практическое руководство
30.01.2026
Как использовать WPCommunity для создания сообщества на WordPress
23.03.2026
Как создать собственный шорткод в WordPress
13.11.2025
Как создать собственный тип данных (Custom Post Type) в WordPress
10.03.2026
Динамические breadcrumbs в WordPress с поддержкой WooCommerce: практическое руководство
13.03.2026