Как сделать редирект на Сontact form7 при успешной отправки сообщения если отключен JS?
Доброго времени суток! У стояло перенаправление из офф. документации:
<script> document.addEventListener( 'wpcf7mailsent', function( event ) { setTimeout( () => { location = 'http://example.com/'; }, 3000 ); // Wait for 3 seconds to redirect. }, false ); </script> |
<script> document.addEventListener( 'wpcf7mailsent', function( event ) { setTimeout( () => { location = 'http://example.com/'; }, 3000 ); // Wait for 3 seconds to redirect. }, false ); </script>
Так как из форм сыпался спам в Cloudflare настроил проверку POST запросов, теперь страница обновляется. Для этого пришлось отключить JS для обработки успешного запроса. Путем добавления в конфиг :
define('WPCF7_LOAD_JS', false);
Сообщения успешно отправляются, сообщение об успешной отправки появляется. Как теперь сделать перенаправление на страницу успешной отправки ?
Дополнительные вопросы
Если dom как-то меняется в момент успешной отправки, можно это отслеживать с помощью MutationObserver.
Потом это же всё ещё форма, правильно? У неё есть событие submit, перепишите это на:
let myForm = document.querySelector('.my-selector') myForm.addEventListener( 'submit', function( event ) { setTimeout( () => { location = 'http://example.com/'; }, 3000 ); // Wait for 3 seconds to redirect. }, false ); |
let myForm = document.querySelector('.my-selector') myForm.addEventListener( 'submit', function( event ) { setTimeout( () => { location = 'http://example.com/'; }, 3000 ); // Wait for 3 seconds to redirect. }, false );
Даниил Конев @Ivseti Автор вопроса Фронтенд HTML, CSS и немного JS с PHP Вроде получилось. Посмотрел документацию на WP Kama. Написал простенькое условие, сработало.
add_action('wpcf7_mail_sent', 'wpcf7mailsent_redirect'); function wpcf7mailsent_redirect() { if ( 'wpcf7_mail_sent' == true ) { $new_url = 'https://ya.ru'; header('Location: '.$new_url); exit(); } } |
add_action('wpcf7_mail_sent', 'wpcf7mailsent_redirect'); function wpcf7mailsent_redirect() { if ( 'wpcf7_mail_sent' == true ) { $new_url = 'https://ya.ru'; header('Location: '.$new_url); exit(); } }
Ответы на вопрос 0
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Если вы отключили JavaScript Contact Form 7 через
WPCF7_LOAD_JS = false, событиеwpcf7mailsentбольше не сработает. Это событие существует только в клиентском JS Contact Form 7. При обычной POST-отправке без JS редирект нужно делать на серверной стороне, но CF7 из коробки не рассчитан на полноценный серверный redirect после отправки так же удобно, как через JS.Самый рабочий вариант — оставить JS Contact Form 7 включенным, а Cloudflare настроить так, чтобы он не ломал AJAX-запросы формы. Если полностью отключать JS, вы теряете нормальные события отправки, inline-валидацию и часть поведения формы.
Если всё же нужен редирект без JS, можно попробовать hook после успешной отправки:
add_action('wpcf7_mail_sent', function ($contact_form) { if ((int) $contact_form->id() !== 123) { return; } wp_safe_redirect(home_url('/thank-you/')); exit; });
Но здесь есть нюанс: в зависимости от режима отправки CF7 и headers редирект может конфликтовать с AJAX/REST-ответом. Поэтому такой код нужно проверять именно в вашем сценарии с отключенным JS.
Более чистая схема: сделать отдельную страницу-обработчик или свою форму, если принципиально нужна работа без JavaScript и серверный редирект. Contact Form 7 в современных версиях ориентирован на JS/REST.
По Cloudflare лучше не отключать JS формы, а настроить исключение для эндпоинтов CF7:
/wp-json/contact-form-7/;admin-ajax.php, если используется;Вывод: редирект через
wpcf7mailsentбез JS невозможен, потому что нет самого события. Либо серверный hook с проверкой, либо вернуть JS и правильно настроить Cloudflare.