В WordPress часто возникает задача ограничить отправку форм только для авторизованных пользователей. Это важно для защиты от спама, обеспечения качества данных и повышения безопасности сайта. В этой статье мы подробно разберем, как реализовать такую проверку на примере популярных плагинов и кастомного кода.
Почему важно ограничивать отправку форм для неавторизованных пользователей
Без ограничений формы на сайте могут заполнять любые посетители, включая ботов и спамеров. Это приводит к:
- засорению базы данных мусорными записями;
- повышению нагрузки на сервер;
- рискам безопасности;
- некорректным данным, если форма связана с бизнес-процессами.
Поэтому логично разрешать отправку форм только тем, кто прошел авторизацию на сайте.
Реализация ограничения отправки формы в популярных плагинах
Contact Form 7
Contact Form 7 — один из самых популярных плагинов для создания форм. Чтобы ограничить отправку только авторизованными пользователями, можно добавить простой фильтр в functions.php вашей темы:
add_filter('wpcf7_validate', 'wpstart_cf7_validate_logged_in', 20, 2);
function wpstart_cf7_validate_logged_in($result, $tag) {
if (!is_user_logged_in()) {
$result->invalidate('', 'Отправка формы доступна только авторизованным пользователям. Пожалуйста, войдите на сайт.');
}
return $result;
}
Этот код блокирует отправку формы, если пользователь не авторизован, показывая сообщение об ошибке.
Gravity Forms
В Gravity Forms есть возможность добавлять условия отображения и проверки на уровне форм. Чтобы запретить отправлять форму неавторизованным пользователям, воспользуемся хуком gform_pre_submission_filter:
add_filter('gform_pre_submission_filter', 'wpstart_gf_restrict_form_submission');
function wpstart_gf_restrict_form_submission($form) {
if (!is_user_logged_in()) {
wp_die('Отправка формы доступна только авторизованным пользователям. Пожалуйста, войдите на сайт.');
}
return $form;
}
Этот код останавливает отправку и выводит сообщение, если пользователь не вошел в систему.
Самодельная форма с ограничением на PHP
Если вы создаете форму вручную, то проверку авторизации можно сделать в обработчике формы. Пример кода, который проверяет пользователя и выводит сообщение:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!is_user_logged_in()) {
echo '<p style="color:red;">Ошибка: отправка доступна только авторизованным пользователям.</p>';
} else {
// Обработка данных формы
$name = sanitize_text_field($_POST['name']);
// Дальнейшая обработка
echo '<p style="color:green;">Форма успешно отправлена.</p>';
}
}
Не забудьте подключить WordPress функции в файле, если обработчик вне шаблона, чтобы использовать is_user_logged_in() и sanitize_text_field().
Как скрыть форму от неавторизованных пользователей с помощью шорткода
Иногда удобнее полностью скрыть форму, а не просто блокировать отправку. Для этого можно создать шорткод с проверкой:
function wpstart_shortcode_loggedin_form() {
if (!is_user_logged_in()) {
return '<p>Пожалуйста, войдите, чтобы отправить форму.</p>';
}
return do_shortcode('[contact-form-7 id="123" title="Контактная форма"]');
}
add_shortcode('wpstart_loggedin_form', 'wpstart_shortcode_loggedin_form');
Теперь в редакторе WordPress можно вставить шорткод [wpstart_loggedin_form], и форма будет видна только авторизованным пользователям.
Использование плагина Clearfy Pro для управления доступом к формам
Плагин Clearfy Pro имеет модуль для управления доступом к различным элементам сайта, включая формы. Это позволяет без кода быстро ограничить доступ к формам для гостей.
После установки и активации Clearfy Pro в разделе «Оптимизация» можно включить опцию ограничения отправки форм для неавторизованных пользователей. Такой подход подойдет тем, кто не хочет вникать в программирование.
Советы по безопасности и UX при ограничении отправки форм
При реализации ограничения стоит учитывать:
- Показывайте понятные сообщения для неавторизованных пользователей.
- Обеспечьте простой доступ к странице входа или регистрации.
- Не скрывайте форму полностью, если это важно для SEO — лучше блокировать отправку.
- Тестируйте работу на разных устройствах и браузерах.
Так вы не отпугнете посетителей и сохраните безопасность.