Как закрыть модальное окно после успешной отправки cf7?

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

Модальное окно сделано на jquery modal
закрывается вот такой ссылкой
<a href="#" rel="modal:close">Close</a>
никак не получается закрыть после отправки

function custom_cf7_script() {     ?&gt;     &lt;script type="text/javascript"&gt;         document.addEventListener('wpcf7mailsent', function(event) {             // Проверяем, что форма отправлена успешно             if ('ac0b387' == event.detail.contactFormId) {                 // Ждем 5 секунд и закрываем модальное окно                 setTimeout(function() {                     // Закрываем модальное окно                     jQuery.modal.close();                 }, 5000);             }         }, false);     &lt;/script&gt;     &lt;?php }  add_action('wp_footer', 'custom_cf7_script');

function custom_cf7_script() { ?&gt; &lt;script type="text/javascript"&gt; document.addEventListener('wpcf7mailsent', function(event) { // Проверяем, что форма отправлена успешно if ('ac0b387' == event.detail.contactFormId) { // Ждем 5 секунд и закрываем модальное окно setTimeout(function() { // Закрываем модальное окно jQuery.modal.close(); }, 5000); } }, false); &lt;/script&gt; &lt;?php } add_action('wp_footer', 'custom_cf7_script');

Дополнительно:

Выполните отладку log-ами (результат?):

&lt;?php  function custom_cf7_script() {   ?&gt;   &lt;script type="text/javascript"&gt;     document.addEventListener('wpcf7mailsent', function(event) {       console.log('wpcf7mailsent отработал');       // Проверяем, что форма отправлена успешно       if ('ac0b387' == event.detail.contactFormId) {         console.log("if ('ac0b387' == event.detail.contactFormId) отработал");         // Ждем 5 секунд и закрываем модальное окно         setTimeout(function() {           console.log('setTimeout отработал');           // Закрываем модальное окно           jQuery.modal.close();           console.log(jQuery.modal);           console.log(jQuery.modal.close());         }, 5000);       }     }, false);   &lt;/script&gt;   &lt;?php }  add_action('wp_footer', 'custom_cf7_script');

&lt;?php function custom_cf7_script() { ?&gt; &lt;script type="text/javascript"&gt; document.addEventListener('wpcf7mailsent', function(event) { console.log('wpcf7mailsent отработал'); // Проверяем, что форма отправлена успешно if ('ac0b387' == event.detail.contactFormId) { console.log("if ('ac0b387' == event.detail.contactFormId) отработал"); // Ждем 5 секунд и закрываем модальное окно setTimeout(function() { console.log('setTimeout отработал'); // Закрываем модальное окно jQuery.modal.close(); console.log(jQuery.modal); console.log(jQuery.modal.close()); }, 5000); } }, false); &lt;/script&gt; &lt;?php } add_action('wp_footer', 'custom_cf7_script');

Как закрыть модальное окно после успешной отправки cf7?

if ('ac0b387' == event.detail.contactFormId) {

Попробуйте вместо хэша использовать ID формы. Его видно в адресной строке при редактировании формы.

что эта функция делает? Ответ. Она ничего не делает, т.к. ничего не возвращает. Это пустая функция. Так функция не пишется. Напишите так.

function custom_cf7_script() { $content = "&lt;script&gt;document.addEventListener('wpcf7mailsent', function(event) {// Проверяем, что форма отправлена успешно  if ('ac0b387' == event.detail.contactFormId) {// Ждем 5 секунд и закрываем модальное окно  setTimeout(function() {// Закрываем модальное окно  jQuery.modal.close();}, 5000);}}, false);&lt;/script&gt;"; return $content; } add_action('wp_footer', 'custom_cf7_script');

function custom_cf7_script() { $content = "&lt;script&gt;document.addEventListener('wpcf7mailsent', function(event) {// Проверяем, что форма отправлена успешно if ('ac0b387' == event.detail.contactFormId) {// Ждем 5 секунд и закрываем модальное окно setTimeout(function() {// Закрываем модальное окно jQuery.modal.close();}, 5000);}}, false);&lt;/script&gt;"; return $content; } add_action('wp_footer', 'custom_cf7_script');

Что указано в <a href="#" rel="modal:close">Close</a> чтобы закрыть мод. окно? rel="modal:close"? Вы смотрели что нужно для этого выполнения? Вероятно правильно написанная функция. Для верности попробуйте написать так.

&lt;a onclick="custom_cf7_script();" href="#" rel="modal:close"&gt;Close&lt;/a&gt;

&lt;a onclick="custom_cf7_script();" href="#" rel="modal:close"&gt;Close&lt;/a&gt;

, тогда по идее окно должно закрыться после нажатия на Close через 5 сек. И ещё. Эта функция должна быть прописана в файле function.php, если это не так, то пропишите её в этом файле, который находится в корневой папке ваше темы. Но я думаю что функция в function.php, если нет то исправьте это. Этот так, на всякий случай, для верности. И ещё для большей уверенности допишите в конце

add_action('wp_footer', 'custom_cf7_script'); add_shortcode('cf7close', 'custom_cf7_script');

add_action('wp_footer', 'custom_cf7_script'); add_shortcode('cf7close', 'custom_cf7_script');

Тем самым вы создали шорткод для закрытия мод. окна. Откройте админку, потом в боковом меню "Contact Form 7 " - "Контактные формы", найдите вашу форму, нажмите на название, и в редакторе самой формы вставьте в самый низ [cf7close], после [submit "Отправить"] Т.е. это будет выглядеть так

[submit "Отправить"]  [cf7close]

[submit "Отправить"] [cf7close]

Тогда по идее после нажатия на а мод. окно должно закрыться.

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

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

Заказать помощь
Лучший ответ
1
Павел Админов Ответ

Для Contact Form 7 событие wpcf7mailsent — правильное. Если модальное окно не закрывается, значит либо событие не срабатывает, либо ID формы сравнивается неправильно, либо метод закрытия вызывается не для той библиотеки модального окна.

В новых версиях CF7 event.detail.contactFormId обычно число, а не строка с префиксом. Поэтому сравнивайте с реальным ID формы из админки, например 123, а не ac0b387, если это не ID формы.

document.addEventListener('wpcf7mailsent', function (event) {
  console.log('CF7 sent', event.detail.contactFormId);
 
  if (Number(event.detail.contactFormId) !== 123) {
    return;
  }
 
  setTimeout(function () {
    jQuery.modal.close();
  }, 5000);
});

document.addEventListener('wpcf7mailsent', function (event) { console.log('CF7 sent', event.detail.contactFormId); if (Number(event.detail.contactFormId) !== 123) { return; } setTimeout(function () { jQuery.modal.close(); }, 5000); });

Если используете jQuery Modal, метод jQuery.modal.close() должен работать, но только если библиотека уже загружена и текущее окно открыто именно через неё. Проверьте в консоли:

typeof jQuery.modal
jQuery.modal.close()

typeof jQuery.modal jQuery.modal.close()

Если модалка открывается по ссылке rel="modal:open", можно закрыть и через клик по элементу закрытия:

jQuery('[rel="modal:close"]').trigger('click');

jQuery('[rel="modal:close"]').trigger('click');

PHP-вставку лучше не писать прямо в wp_footer, а подключить отдельный JS-файл или хотя бы убедиться, что скрипт выводится после CF7 и jQuery Modal. Для отладки сначала оставьте console.log до всех условий. Если log не появляется, событие не ловится. Если появляется, но окно не закрывается — проблема в методе закрытия.

И не забудьте про UX: 5 секунд после успешной отправки — долго. Обычно достаточно 1.5-2 секунды, чтобы пользователь увидел сообщение об успехе, а потом модалка закрылась.

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

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

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

комментарий

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

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