Contact Form 7: как разрешить отправку формы только зарегистрированным пользователям

Почему важно ограничить отправку формы зарегистрированными пользователями

В ряде случаев необходимо, чтобы формы Contact Form 7 были доступны к отправке только для авторизованных пользователей. Это позволяет:

  • Защитить сайт от спама и фальшивых заявок;
  • Обеспечить сбор данных только от проверенных посетителей;
  • Автоматически связывать отправленные данные с профилем пользователя в WordPress;
  • Сократить нагрузку на обработку и модерацию заявок.

Рассмотрим, как реализовать это ограничение без сторонних плагинов, используя нативные хуки Contact Form 7 и WordPress.

Диагностика проблемы: форма доступна всем, включая гостей

По умолчанию Contact Form 7 не ограничивает отправку форм — любой посетитель может заполнить и отправить форму. В результате:

  • Появляется много спам-заявок;
  • Трудно анализировать данные, так как нет связи с аккаунтами пользователей;
  • Невозможно персонализировать сообщения и автозаполнение полей.

Шаг 1. Проверка, что пользователь авторизован, перед отправкой формы

Contact Form 7 предоставляет хук wpcf7_validate для добавления кастомных правил валидации. Используем его, чтобы блокировать отправку формы, если пользователь не залогинен.

add_filter('wpcf7_validate', 'cf7_restrict_to_logged_in_users', 20, 2); 
function cf7_restrict_to_logged_in_users($result, $tags) {
    if (!is_user_logged_in()) {
        $result->invalidate('', 'Ошибка: для отправки формы необходимо войти на сайт.');
    }
    return $result;
}

Этот код добавьте в файл functions.php вашей темы или в собственный плагин.

Шаг 2. Вывод сообщения и скрытие формы для гостей

Запрет отправки формы — уже хорошо, но лучше скрывать форму и показывать предупреждение гостям.

Добавим условие в шаблон формы Contact Form 7, например, с помощью шорткода:

[dynamictext is_user_logged_in "CF7_get_logged_in"]
<script>document.addEventListener('DOMContentLoaded', function() {
  if (!document.body.classList.contains('logged-in')) {
    document.querySelector('.wpcf7').style.display = 'none';
    var warning = document.createElement('div');
    warning.innerText = 'Чтобы отправить форму, пожалуйста, войдите на сайт.';
    warning.style.color = 'red';
    document.querySelector('.wpcf7').parentNode.insertBefore(warning, document.querySelector('.wpcf7'));
  }
});</script>

Но проще и правильнее добавить PHP-код, который заменяет форму на сообщение, если пользователь не авторизован:

add_filter('the_content', 'cf7_replace_form_for_guests');
function cf7_replace_form_for_guests($content) {
    if (is_page() && has_shortcode($content, 'contact-form-7')) {
        if (!is_user_logged_in()) {
            return '<p style="color:red;">Чтобы отправить форму, пожалуйста, войдите на сайт.</p>';
        }
    }
    return $content;
}

Шаг 3. Автоматическое заполнение полей из данных пользователя

Для удобства авторизованных пользователей можно автоматически заполнять поля формы, например, email и имя.

Contact Form 7 поддерживает фильтр wpcf7_form_hidden_fields и также можно использовать wpcf7_posted_data для динамического заполнения.

add_filter('wpcf7_form_hidden_fields', 'cf7_prefill_user_data');
function cf7_prefill_user_data($hidden_fields) {
    if (is_user_logged_in()) {
        $user = wp_get_current_user();
        $hidden_fields['your-name'] = $user->display_name;
        $hidden_fields['your-email'] = $user->user_email;
    }
    return $hidden_fields;
}

Также можно использовать shortcode с PHP:

function cf7_get_user_email() {
    if (is_user_logged_in()) {
        $user = wp_get_current_user();
        return $user->user_email;
    }
    return '';
}
add_shortcode('user_email', 'cf7_get_user_email');

В форме вставьте поле:

[email* your-email default:get user_email]

Проверка результата после внедрения

  • Выйдите из аккаунта и попробуйте открыть страницу с формой — должна показываться замена формы на сообщение.
  • Попытайтесь отправить форму как гость — должна появиться ошибка валидации.
  • Авторизуйтесь и проверьте, что форма доступна и поля автозаполняются.

Частые ошибки и как их исправить

  • Ошибка: Форма доступна гостям, несмотря на код.
    Причина: Кэширование страниц или плагин кеша не учитывает авторизацию.
    Исправление: Отключите кэширование для страниц с формами или используйте динамическое кеширование.
  • Ошибка: Сообщение об ошибке валидации не отображается.
    Причина: Некорректное использование хука wpcf7_validate.
    Исправление: Убедитесь, что фильтр добавлен с правильным приоритетом и параметрами.
  • Ошибка: Автозаполнение полей не работает.
    Причина: Неверно указаны имена полей в коде.
    Исправление: Проверьте названия полей в форме и в фильтрах совпадают.

Практические советы по безопасности и производительности

  • Используйте SSL (HTTPS) для всех форм, чтобы защитить данные пользователей при отправке.
  • Отключайте кэширование страниц с формами для корректной работы ограничений по авторизации.
  • Рекомендуется добавлять дополнительные меры защиты от спама (reCAPTCHA, Honeypot), даже при ограничении по авторизации.
  • Для сложных решений с авторизацией и формами рассмотрите возможность интеграции с плагинами пользовательских ролей и прав доступа.

Сравнение способов ограничения отправки форм

СпособПлюсыМинусы
Хук wpcf7_validateПростой, не требует сторонних плагинов, надежно блокирует отправкуФорма видна гостям; требуется дополнительный код для скрытия
Замена формы в контенте (PHP)Гости сразу видят сообщение, форма не отображаетсяТребует проверки и корректировки кэширования
Сторонние плагины ограничения доступаПростота настройки, готовые решенияДополнительная нагрузка, возможные конфликты с CF7

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Contact Form 7: Автозаполнение полей формы по IP-адресу пользователя
20.02.2026
Contact Form 7: как отключить автозаполнение полей формы
23.05.2026
Contact Form 7 и отправка данных на внешний сервер через REST API
10.03.2026
Contact Form 7: динамические формы с подгрузкой данных из внешних источников
07.04.2026
Contact Form 7: как разрешить отправку формы только зарегистрированным пользователям
08.07.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше