Как сделать редирект на Сontact form7 при успешной отправки сообщения если отключен JS?

Ссылка скопирована
1 ответ

Доброго времени суток! У стояло перенаправление из офф. документации:

<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 );

Как сделать редирект на Сontact form7 при успешной отправки сообщения если отключен JS?

Даниил Конев @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

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Ольга Сеть Ответ

Если вы отключили 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;
});

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:

  • не challenge для /wp-json/contact-form-7/;
  • не блокировать admin-ajax.php, если используется;
  • исключить страницу с формой из агрессивных правил.

Вывод: редирект через wpcf7mailsent без JS невозможен, потому что нет самого события. Либо серверный hook с проверкой, либо вернуть JS и правильно настроить Cloudflare.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно