WP integration
2 subscribers
2 links
Все, что подходит под тему WordPress
#wordpress #вордпресс #wp #плагин #plugin #theme #тема

Наши хэштеги в алфавитном порядке:
#form
#plugin

#плагин
#форма
Download Telegram
Channel created
Привет всем!
Пришло время и я начну записывать все вопросы/ответы, которые у меня появляются при создании сайта на WP🎉🎉🎉
КАК К ФОРМЕ ОТ ПЛАГИНА CONTACT FORM 7 ДОБАВИТЬ КАПТЧУ И ОТСЕЯТЬ СПАМ

❗️Метод 1: Встроенная каптча Contact Form 7 (Самый простой)
CF7 имеет свою встроенную функцию Really Simple CAPTCHA. Но важно знать: это дополнение устарело и не рекомендуется к использованию на публичных сайтах, так как боты давно научились его обходить. Используем его только для очень простой защиты от самых примитивных ботов.

Если решим использовать:
Установить и активировать плагин «Really Simple CAPTCHA».
В редакторе формы добавим тег [captcha captcha-784] (цифры будут случайными).
Обязательно добавим поле для ввода ответа, например: [text your-captcha].
Во вкладке «Письмо» убедимся, что не отправляете значение каптчи (your-captcha) в письме.

❗️Метод 2: Google reCAPTCHA v3 (Рекомендуемый и самый эффективный)
Это «невидимая» каптча, которая анализирует поведение пользователя и не требует никаких действий (щелчков по картинкам). Идеально для UX.
Шаг 1: Получение ключей от Google
Зайдем на Консоль reCAPTCHA. Выберем reCAPTCHA v3. Зарегистрируем свой сайт:
- Метки: Название вашего сайта.
- Домен: Добавим домен (например, вашсайт.ru, localhost для тестирования).
- Примем соглашение и нажмем «Отправить».
Получим два ключа:
🗝 Ключ сайта (SITE KEY)
🗝 Секретный ключ (SECRET KEY)

Шаг 2: Интеграция с Contact Form 7
В админке WordPress перейдем в Contact Form → Интеграция.
Найдем блок reCAPTCHA.
Вставим полученные ключи в соответствующие поля и нажмем «Сохранить изменения».

Шаг 3: Добавление каптчи в форму
В редакторе формы вставим тег [recaptcha] в то место, где должна отображаться (невидимая) каптча. Обычно ее размещают перед кнопкой отправки.

Шаг 4: Настройка порога (важно!)
Перейдем во вкладку «Дополнительные настройки» формы и добавим строку:
on_sent_ok: "add_redirect_link" - это устаревший метод. Лучше использовать событие wpcf7submit через JavaScript.
Более важная настройка — это порог проверки. Добавим в «Дополнительные настройки»:

recaptcha_threshold: 0.5
0.0 — очень вероятно бот.
1.0 — очень вероятно человек.
0.5 — стандартный порог. Можно повысить до 0.7 для строгости, если есть жалобы на ложные срабатывания.

❗️Метод 3: Cloudflare Turnstile (Отличная современная альтернатива)
Более удобная и приватная каптча от Cloudflare. Часто работает быстрее и не требует от пользователя решения головоломок в большинстве случаев.
Зарегистрируемся в Cloudflare Dashboard.
Перейдем в Turnstile.
Добавим сайт, получим Ключ сайта и Секретный ключ.
Установим и активируем плагин CF7 Turnstile или Contact Form 7 - Cloudflare Turnstile.
В настройках плагина введем ключи.
В редакторе CF7 появится новая кнопка для вставки тега Turnstile (например, [cf7-turnstile]).

❗️Метод 4: Honeypot-ловушка (Дополнительный слой защиты)
Это технический метод, который отлично работает в паре с reCAPTCHA. Он добавляет скрытое от людей (но видимое ботам) поле. Если поле заполнено — форма отправлена ботом.
Плагин Contact Form 7 Honeypot делает это идеально:
Установим и активируем Honeypot for Contact Form 7.
В редакторе формы просто добавим тег [honeypot your-email]. Поле your-email будет скрыто с помощью CSS.

#form, #plugin, #плагин, #форма
ПРОДОЛЖЕНИЕ👇
❗️Метод 5: Кастомная защита через фильтры и хуки (Для разработчиков)
Можно добавить собственную логику проверки.

Пример: Проверка времени заполнения формы (очень эффективно против спам-ботов)
Добавим в functions.php вашей темы:

add_filter( 'wpcf7_spam', 'my_custom_anti_spam_check', 10, 2 );

function my_custom_anti_spam_check( $spam, $submission ) {
if ( $spam ) {
return $spam; // Если CF7 уже пометил как спам, дальше не проверяем
}// Проверка на слишком быструю отправку (менее 5 секунд)
$posted_data = $submission->get_posted_data();
if ( isset( $_POST['_wpcf7_start_time'] ) ) {
$time_to_fill = time() - (int) $_POST['_wpcf7_start_time'];
if ( $time_to_fill < 5 ) { // Меньше 5 секунд
$spam = true;
$submission->add_spam_log( array(
'agent' => 'my_custom_check',
'reason' => 'Слишком быстрая отправка формы (' . $time_to_fill . ' сек).',
) );
}
}

// Проверка на наличие ссылок в поле "Имя" (частый признак спама)
if ( ! empty( $posted_data['your-name'] ) ) {
if ( preg_match( '/https?:\/\/|www\.|\.(com|ru|net|org)/i', $posted_data['your-name'] ) ) {
$spam = true;
$submission->add_spam_log( array(
'agent' => 'my_custom_check',
'reason' => 'В поле имени обнаружена ссылка.',
) );
}
}

return $spam;
}

Как добавить скрытое поле-таймер для этой проверки:
В вашу форму добавим:

<label>Ваше имя (обязательно)
[text* your-name] </label>

[hidden _wpcf7_start_time]

И в «Дополнительные настройки» формы:

skip_mail: on_sent_ok

И в JS (через wp_footer или отдельный файл):

document.addEventListener('DOMContentLoaded', function() {
const forms = document.querySelectorAll('.wpcf7-form');
forms.forEach(form => {
const timeField = form.querySelector('input[name="_wpcf7_start_time"]');
if (timeField) {
timeField.value = Math.floor(Date.now() / 1000); // Текущее время в секундах
}
});
});

#form, #plugin, #плагин, #форма

👇ПРОДОЛЖЕНИЕ
❗️Метод 6: Установить Antispam Bee вместо Akismet (

Добавьте в форму CF7 скрытое поле:
[hidden antispam-bee-field "antispam-bee-value"]

Способ 1
в functions.php:
add_filter('wpcf7_form_hidden_fields', 'add_antispam_bee_to_cf7');
function add_antispam_bee_to_cf7($hidden_fields) {
// Проверяем, активен ли Antispam Bee
if (class_exists('Antispam_Bee')) {
$hidden_fields['comment'] = ''; // Пустое поле-ловушка
$hidden_fields['antispam_bee_user'] = wp_get_current_user()->user_login;
}
return $hidden_fields;
}

Способ 2: Полная интеграция через хуки (рекомендуется)
Этот способ позволяет Antispam Bee проверять отправки CF7 как обычные комментарии:
// Подключаем проверку Antispam Bee к CF7
add_filter('wpcf7_spam', 'antispam_bee_cf7_check', 10, 1);

function antispam_bee_cf7_check($spam) {
if ($spam) {
return $spam; // Если уже спам, дальше не проверяем
}

// Проверяем, активен ли Antispam Bee
if (!class_exists('Antispam_Bee') || !method_exists('Antispam_Bee', 'is_spam')) {
return $spam;
}

// Собираем данные как для комментария
$comment_data = array(
'comment_type' => 'contact_form',
'comment_author' => isset($_POST['your-name']) ? sanitize_text_field($_POST['your-name']) : '',
'comment_author_email' => isset($_POST['your-email']) ? sanitize_email($_POST['your-email']) : '',
'comment_author_url' => isset($_POST['your-url']) ? esc_url($_POST['your-url']) : '',
'comment_content' => isset($_POST['your-message']) ? sanitize_textarea_field($_POST['your-message']) : '',
'comment_author_IP' => $_SERVER['REMOTE_ADDR'],
'comment_agent' => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '',
'comment_date' => current_time('mysql'),
'comment_date_gmt' => current_time('mysql', 1),
);

// Проверяем через Antispam Bee
if (Antispam_Bee::is_spam($comment_data, true)) {
$spam = true;

// Можно добавить логирование
if (defined('WP_DEBUG') && WP_DEBUG) {
error_log('Antispam Bee заблокировал отправку формы CF7');
}
}

return $spam;
}

Способ 3: Комбинированное решение с полем-ловушкой
add_action('wpcf7_form_hidden_fields', 'add_antispam_bee_honeypot');
add_filter('wpcf7_validate', 'validate_antispam_bee_honeypot', 10, 2);

// Добавляем скрытое поле-ловушку
function add_antispam_bee_honeypot($fields) {
// Только для форм CF7
$fields['ab_confirm_email'] = '';
return $fields;
}

// Проверяем поле-ловушку
function validate_antispam_bee_honeypot($result, $tags) {
// Проверяем, заполнено ли поле-ловушка (боты его заполнят)
if (isset($_POST['ab_confirm_email']) && !empty($_POST['ab_confirm_email'])) {
$result->invalidate('ab_confirm_email', 'Спам обнаружен');
$result->set_status('spam');
}

// Дополнительная проверка времени заполнения (как в Antispam Bee)
if (isset($_POST['_wpcf7_timestamp'])) {
$submit_time = time() - intval($_POST['_wpcf7_timestamp']);
if ($submit_time < 3) { // Менее 3 секунд
$result->set_status('spam');
}
}

return $result;
}

// Добавляем timestamp к форме
add_filter('wpcf7_form_elements', 'add_timestamp_to_cf7');
function add_timestamp_to_cf7($form) {
$timestamp = '<input type="hidden" name="_wpcf7_timestamp" value="' . time() . '" />';
return $form . $timestamp;
}

❗️❗️❗️ИТОГ и лучшая стратегия:

* Google reCAPTCHA v3 или Cloudflare Turnstile.
Установим Honeypot for Contact Form 7. Связка «невидимая каптча + honeypot» отсеет 99% спама.
Для параноиков/высоконагруженных сайтов: Добавим кастомную проверку времени заполнения из метода 5.
Можно установить Antispam Bee, см. выше

Что не делать:
✖️Не использовать старую встроенную каптчу (Really Simple CAPTCHA).
✖️Не забывать обновлять плагины.

Надеюсь, эта многослойная защита сделает наши формы практически неуязвимыми для спама, сохранив при этом удобство для реальных пользователей.
#form, #plugin, #плагин, #форма
WP integration pinned «Оглавление 1. КАК К ФОРМЕ ОТ ПЛАГИНА CONTACT FORM 7 ДОБАВИТЬ КАПТЧУ»