Wordpress. Как передать данные полученные в Ajax (admin-ajax.php) в свой тег формы (шорткод) contactForms7?

202
16 июля 2021, 04:00

Я использую Ajax в wordpress для передачи списка запчастей, а полученные данные хочу передать в форму contactForms7.

Уже настроил Ajax в wordpress по этой инструкции - https://wp-kama.ru/id_2018/ajax-v-wordpress.html и создал свой тег формы (шорткод) в форму cf7, как это было написано здесь (работает нормально) - https://wp-kama.ru/plugin/contact-form-7/sozdanie-tegov-formy#dobavlenie-tega-formy-shortkoda-v-contact-form-7-variant-2

А вот связать получаемые данные в AJAX c этим тегом формы (шорткодом) для вставки в форму cf7 не удается.

Вот ссылка на мой проект web4hotel.ru/vellift

Не могу понять, то ли мне нужно связывать хуки и передавать данные через параметры, то ли использовать глобальную переменную для передачи данных из одной функции в другую?

PHP почти не знаю, да и вообще новичок.

Пробовал использовать global - не вышло. Пробовал запускать хуки из функции Ajax - не срабатывает шорткод в contactForms7.

Пожалуйста, помогите разобраться как перенести полученный список запчастей через Ajax в форму contactForms7. Уже несколько дней не могу решить.

//global $result;
/* AJAX из React*/
function react_callback() {
  $data = json_decode(file_get_contents('php://input'));
  $data = $data->arrObj;

  foreach($data as $obj){
      $result .= "$obj->id : $obj->winch : $obj->name : $obj->amount шт.; \n<br/>";
  };
    print_r($result);
    wp_die();
    //return apply_filters('wpcf7_form_elements', $result );
}
add_filter( 'wp_ajax_react', 'react_callback' );
add_filter( 'wp_ajax_nopriv_react', 'react_callback' );
/* Добавление тега формы (шорткода) в Contact Form 7 (в шаблон письма) */
add_filter( 'wpcf7_form_elements', 'do_shortcode');
function my_shortcod_cf7_func() {
   return "Список деталей:  \n<br/>". $result;
}
add_shortcode('my_shortcod_cf7', 'my_shortcod_cf7_func');
Answer 1

Насчёт $global. Строка $global $result; должна присутствовать как в react_callback(), так и в my_shortcod_cf7_func(). А у вас в my_shortcod_cf7_func() $result локальная переменная, равна null. Но это не поможет.

Во вкладке response браузера вы видите выдачу из react_callback(). Страница не работает так, как вам хочется, в силу непонимания процессов клиент-серверного взаимодействия.

Страница формируется php. В этот момент работает CF7, создаёт форму, использует хуки. Вы своей функцией передаёте туда $result = null. react_callback() не вызывается, процесс php завершает работу и отправляет сформированную страницу в браузер. В форме имеем то, что на картинке.

При срабатывании ajax, в свою очередь, не вызывается функция my_shortcod_cf7_func(). Данные, сформированные в react_callback(), уходят назад в браузер, вы видите их во вкладке response, и на этом всё.

Вам нужно выбранные пользователем запчасти не через ajax отправлять, а просто через JS записывать в hidden (или не hidden) input формы CF7. Этот input должен быть прописан в форме в админке. При отправке формы всё содержимое уйдёт в письме.

READ ALSO
Преобразователь сатоши в биткоин

Преобразователь сатоши в биткоин

Задача такая меня постигла, имеем в базе ячейку money тип ячейки bigint туда пишется баланс сатоши, так как различного рода зачисления удобней...

283
phpoffice phpword сохранение файла

phpoffice phpword сохранение файла

Каким образом корректно отдавать файлы сформированные php word?

448
Параметры и тип byte

Параметры и тип byte

Почему я получаю ошибку компиляции? Среда разработки подсказывает, что нужно сделать тип возвращаемого значения intbyte, short в типе возвращаемого...

118
Запись звука в android

Запись звука в android

Я новичок в этом деле, но может кто подскажет есть ли возможность записи звука в Android, чтобы не использовать MediaRecorderAudioSource

101