Настройка плагина Contact Form 7 для WordPress
Contact Form 7 — самый популярный бесплатный плагин форм для WordPress, установленный на десятках миллионов сайтов. Минималистичен: не хранит заявки в базе по умолчанию, не имеет визуального редактора — только шорткоды и хуки. Для простых форм обратной связи этого достаточно.
Создание формы
После установки: Контакты → Добавить. Форма создаётся через простой шорткод-синтаксис:
[text* your-name placeholder "Ваше имя"]
[email* your-email placeholder "Email"]
[tel your-phone placeholder "+7 (___) ___-__-__"]
[textarea your-message placeholder "Сообщение" 10x5]
[submit "Отправить"]
Звёздочка после типа поля (text*, email*) означает обязательность. Форма вставляется на страницу шорткодом [contact-form-7 id="123"].
Настройка почты
Вкладка Mail в редакторе формы:
To: [email protected]
From: [your-name] <[email protected]>
Reply-To: [your-email]
Subject: Заявка с сайта: [your-name]
Body:
Имя: [your-name]
Email: [your-email]
Телефон: [your-phone]
Сообщение: [your-message]
Вкладка Mail (2) — второе письмо, например автоответ клиенту.
Хранение заявок в базе
CF7 сам по себе заявки не сохраняет — только шлёт письма. Для хранения устанавливается аддон Flamingo:
Плагины → Добавить → Flamingo → Установить
После установки в меню появляется «Flamingo» с разделом «Inbound Messages» — все отправки форм там.
Защита от спама
Встроенная защита — honeypot и интеграция с Akismet:
// В настройках формы - вкладка Additional Settings
acceptance_as_validation: on
Для reCAPTCHA v3: Контакты → Интеграция → reCAPTCHA — ввести ключи от Google. Тег [recaptcha] добавляется в форму.
Turnstile от Cloudflare подключается через плагин CF7 Turnstile.
Кастомная валидация
add_filter( 'wpcf7_validate_tel', function( $result, $tag ) {
$value = isset( $_POST[ $tag->name ] ) ? trim( $_POST[ $tag->name ] ) : '';
if ( $tag->is_required() && ! preg_match( '/^\+7[\d\s\-\(\)]{10,}$/', $value ) ) {
$result->invalidate( $tag, 'Введите корректный российский номер телефона' );
}
return $result;
}, 10, 2 );
Обработка отправки
add_action( 'wpcf7_mail_sent', function( $contact_form ) {
$submission = WPCF7_Submission::get_instance();
if ( ! $submission ) return;
$data = $submission->get_posted_data();
$name = sanitize_text_field( $data['your-name'] ?? '' );
$email = sanitize_email( $data['your-email'] ?? '' );
// Отправить в Telegram, CRM и т.д.
send_telegram_notification( "Новая заявка от $name ($email)" );
} );
Динамические значения по умолчанию
CF7 поддерживает специальные теги для подстановки динамических данных:
[hidden page-url "https://[_site_url][_url]"]
[hidden user-login "[_user_login]"]
[text* name default:"[_logged_in_user first_name]"]
Для более гибких значений — фильтр wpcf7_form_tag:
add_filter( 'wpcf7_form_default_value', function( $value, $tag ) {
if ( 'current-product' === $tag->name ) {
return get_the_title(); // подставить заголовок текущей страницы
}
return $value;
}, 10, 2 );
Файловые вложения
[file upload-file limit:2mb filetypes:pdf|doc|docx]
Файлы прикрепляются к письму и удаляются с сервера после отправки. Для сохранения файлов — нужен кастомный код:
add_action( 'wpcf7_mail_sent', function( $form ) {
$submission = WPCF7_Submission::get_instance();
$uploaded = $submission->uploaded_files();
foreach ( $uploaded as $field => $path ) {
// скопировать $path в /uploads/submissions/
copy( $path, WP_CONTENT_DIR . '/uploads/submissions/' . basename( $path ) );
}
} );
Ограничения CF7
Нет условной логики, нет многошаговых форм, нет хранения заявок «из коробки», нет визуального редактора. Для простого «имя + телефон + сообщение» — отлично подходит. Для сложных форм лучше смотреть на Gravity Forms или WPForms.
Сроки
Настройка одной-двух форм с почтой и защитой от спама — 2–4 часа.







