Formular Contact 7 - Butonul de Trimitere nu funcționează după cererea Ajax
Folosesc Contact Form 7 cu ajax jquery
. Prima parte este pentru ca utilizatorul să introducă numărul vehiculului
și email-ul
.
Dacă are succes, va încărca formularul Contact Form 7 prin ajax. Când dau click pe trimitere, se redirecționează către o pagină nouă și afișează 0. Am făcut o cercetare pe Google și am găsit funcția wpcf7-submit
.
Am încercat să fac o funcție de alertă și răspunde conform așteptărilor. Cum pot să o folosesc cu Contact Form 7 și să trimit detaliile formularului prin email dacă nu există erori în formular?
Cod
form.php
<?php
get_header();
// Include toate funcțiile temei
?>
<form name="season-form" class="form-horizontal" method="post" action="">
<div class="form-group form-group-lg">
<label for="carNo" id="label-cust">Număr Înmatriculare Vehicul</label>
<input type="text" class="form-control" name="vehicle_no" id="vehicle_no" placeholder="BHK1991">
</div>
<div class="form-group form-group-lg">
<label for="email" id="email">Email</label>
<input type="email" class="form-control" name="email" id="email" placeholder="emailulMeu@exemplu.com">
</div>
<button type="submit" class="btn btn-primary" id="submit_payment">Efectuează Plata</button>
</form>
<div id="result"></div>
<?php get_footer(); ?>
function.php
function _myConfirmHandler()
{
if(isset($_POST['vehicle_no']))
{
$vehicle_no = $_POST['vehicle_no'];
$email = $_POST['email'];
echo do_shortcode('[cfdb-table form="season parking form_copy" show="your-name,mail,your-platno,your-location" filter="your-platno=' . $vehicle_no . '" headers="your-name=Nume,mail=Email,your-platno=Număr Înmatriculare,your-location=Locație Parcare"]');
// Afișează Formularul
echo do_shortcode('[contact-form-7 id="6959" title="Payment season Form_Post"]');
}
wp_die();
}
add_action('wp_ajax_confirmRequest', '_myConfirmHandler');
add_action('wp_ajax_nopriv_confirmRequest', '_myConfirmHandler');
jquery.js
jQuery(document).ready(function($) {
$('#submit_payment').click(function(e){
e.preventDefault();
var str = $("form[name=season-form]").serialize();
//alert(str);
$.ajax({
type: "POST",
url: '//www.ktmparking.com.my/wp-admin/admin-ajax.php',
data: str + '&action=confirmRequest'
}).done(function(data){
$("#result").html(data);
$(".cal").datepicker({
showOn: "button",
dateFormat: "dd-mm-yy",
buttonImage: "http://theonlytutorials.com/demo/x_office_calendar.png",
buttonImageOnly: true,
showAnim: 'slideDown',
duration: 'fast',
showButtonPanel: true
});
$('.wpcf7-submit').click(function(e) {
e.preventDefault();
alert('Butonul de trimitere a fost apăsat!');
});
});
});
});
Trebuie să rescriu metoda post în formular și să trimit detaliile prin email dacă are succes?

Ați încărcat formularul CF-7 folosind ajax
, ceea ce înseamnă că scripturile necesare pentru acel formular nu au fost executate. Din această cauză, formularul dumneavoastră nu funcționează așa cum era de așteptat.
Trebuie să re-inițiați
scripturile CF-7 pentru formularul respectiv. Iată codul PHP actualizat.
Acum, ajax-ul dumneavoastră va arăta astfel:
<?php
function _myConfirmHandler()
{
if(isset($_POST['vehicle_no']))
{
$vehicle_no = $_POST['vehicle_no'];
$email = $_POST['email'];
echo do_shortcode('[cfdb-table form="season parking form_copy" show="your-name,mail,your-platno,your-location" filter="your-platno=' . $vehicle_no . '" headers="your-name=Name,mail=Email,your-platno=Registration No.,your-location=Parking Location"]');
// Afișează Formularul
echo do_shortcode('[contact-form-7 id="6959" title="Payment season Form_Post"]');
?>
<script>
jQuery('.wpcf7 > form').initForm();
var urL = jQuery('.wpcf7 > form').attr('action').split('#');
jQuery('.wpcf7 > form').attr('action', "#" + urL[1]);
</script>
<?php
}
wp_die();
}
?>
Actualizare: initForm nu mai este disponibil începând cu CF7 5.4
Mulțumim @Chris Pink

Mulțumesc pentru ajutor. Nu sunt acum la birou. Voi oferi actualizarea mai târziu. Pot afla ce face scriptul?

Acesta va iniția scriptul CF7
pe formularul tău. Încărcai formularul folosind ajax, motiv pentru care nu se iniția pe acel formular specific. Voi aștepta răspunsul tău. Programare plăcută :)

În legătură cu scriptul. De exemplu, funcția detaliată pentru 'wpc7InitForm()'

Am actualizat codul cu scriptul. Primește un răspuns, dar afișează doar spinner-ul de încărcare fără a trimite niciun e-mail sau a valida datele.

Să continuăm această discuție în chat.

Sunt recunoscător pentru acest răspuns pentru că m-a îndreptat în direcția corectă, dar trebuie să menționez că nu a funcționat pentru mine în forma actuală. Am primit o eroare care spunea că $form.wpc7InitForm() nu este o funcție, ceea ce m-a condus la o soluție găsită pe forumurile Wordpress. S-a dovedit că funcția nu este $form.wpc7InitForm()
, ci mai degrabă wpc7.initForm($form)
... vezi răspunsul lui @tapitoconnectey aproape de final - https://wordpress.org/support/topic/wpcf7initform-is-not-a-function/

@mroncetwice răspunsul a fost actualizat conform comentariului tău, sper că va funcționa acum fără nicio eroare. Mulțumesc pentru actualizare. :)
