Используйте контактную форму 7 с Ajax

Я создал плагин в wordpress для формы и ajax. Когда страница успешно загружает контент через ajax, я хочу использовать контактную форму 7 на странице. Я использую do_shortcode() как объяснение в форме контакта 7 faqs, но он не отображает форму. Ниже приведен пример кода, который я делаю:

function.php

 add_action( 'wp_enqueue_scripts', 'ajax_test_enqueue_scripts' ); function ajax_test_enqueue_scripts() { wp_enqueue_script( 'season', plugins_url( '/form-submit.js', __FILE__ ), array('jquery'), '1.0', true ); wp_localize_script( 'season', 'myAjax', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) )); } add_action('wp_ajax_confirmRequest', '_myConfirmHandler'); add_action('wp_ajax_nopriv_confirmRequest', '_myConfirmHandler'); function _myConfirmHandler() { if(isset($_POST['vehicle_no'])) { $vehicle_no = $_POST['vehicle_no']; $email = $_POST['email']; echo "Your Data: <br>$vehicle_no <br>$email<p />"; echo do_shortcode('[cfdb-table form="season parking form_copy" filter="your-platno=' . $vehicle_no . '"]'); echo do_shortcode('[contact-form-7 id="6871" title="season parking form_copy"]'); } exit; } 

JQuery

 jQuery(document).ready(function($) { $('#submit_payment').click(function(e){ e.preventDefault(); var str = $("form[name=season-form]").serialize(); $.ajax({ type: "POST", url: myAjax.ajax_url, data: str + '&action=confirmRequest' }).done(function(data){ $("#result").html(data); }); }); }); 
  1. Он просто выведет [contact-form-7 id="6871" title="season parking form_copy"]
  2. Я также использую Бланк контактной формы, но отображаю данные без проблем.
  3. Нужно ли enqueue скрипт в контактную форму 7. Если нужно, как это сделать?

Трудно дать 100% ответ, не видя кода того, как регистрируется короткий код, но из вашего описания это звучит так, будто он не регистрируется при обработке запросов ajax. Причина, вероятно, связана с тем, что запросы ajax обрабатываются в контексте «admin», а короткие коды – это артефакт переднего конца, и поэтому автор плагина может решить не регистрировать вообще, когда на стороне администратора.

существует несколько возможных решений

  • Не пытайтесь (и не пытайтесь никогда) использовать do_shortcode просто вызвать api, который генерирует do_shortcode напрямую
  • Зарегистрируйте короткий код самостоятельно.
  • Используйте конечную точку wp-json с register_rest_route вместо admin-ajax.php . Он не воспринимает контекст администратора, и он несколько быстрее, так как он не выполняет инициализацию, связанную с администратором.