shortcode – Załaduj formularz grawitacyjny przez ajax, używając kodu do_shortcode
Ponownie ładuję mój formularz za pomocą ajax po potwierdzeniu.
To działa idealnie i analizuję mój form_id
do funkcji akcji w porządku …
// code to trigger stuff when forms have submitted
$(document).on('gform_confirmation_loaded', function(event, form_id){
// run code for white label site editor form
if(form_id == 12) {
// reload our form
$.ajax({
cache: false,
timeout: 30000,
url: admin_ajax_url,
type: 'GET',
data: {
action : 'gf_reload_editor_form',
post_id : post_id,
form_id : form_id,
isAjax : true
},
success: function (data) {
// remove the old confirmed form
$('#gform_ajax_wrapper_'+form_id).remove();
// reload form into our site editor aside
$('#site_editor').prepend(data);
}
});
}
});
Powyższy kod działa świetnie.
Problem polega na ponownym załadowaniu formularza za pomocą do_shortcode
.
class WhiteLabel
{
public function __construct()
{
// ajax reload form actions
add_action('wp_ajax_nopriv_gf_reload_editor_form', [ $this, 'gf_reload_editor_form' ], 20 );
add_action('wp_ajax_gf_reload_editor_form', [ $this, 'gf_reload_editor_form' ], 20 );
}
public function gf_reload_editor_form ()
{
// get the form id
$form_id = $_GET['form_id'];
// do shortcode to output gravity form
echo do_shortcode('[gravityform id="'.$form_id.'" title="false" description="false" ajax="true" update]');
die();
}
}
new WhiteLabel();
OK, więc wszystko powyżej wygląda przystojnie dori, to dlatego, że tak jest. Przetestowałem mój inny zwyczaj do_shortcode
funkcje i wychodzą dobrze.
Problem tkwi w do_shortcode('[gravityform ... ]')
Pewnie zastanawiasz się, dlaczego po prostu nie użyję gravity_form()
funkcja php…
gravity_form( $form_id, false, false, false, '', true );
To też działa dobrze! Spowoduje to ponowne załadowanie doskonale działającego formularza ajax.
Problem w tym, że muszę użyć do_shortcode
ponieważ muszę dołączyć update
nieruchomość. The update
właściwość nie może być używana z gravity_form()
funkcja php.
The update
właściwość jest wprowadzana za pomocą wtyczki Gravity Forms: Post Update, która umożliwia mojemu formularzowi aktualizację bieżącego posta zamiast tworzenia nowego.
To sprawiło, że pomyślałem, kiedy ładuję formularz, używając tego samego do_shortcode
metoda przy początkowym ładowaniu strony, której używam do_shortcode
wewnątrz pętli. W ten sposób formularz musi wiedzieć, jakie dane pocztowe pobrać i wstępnie wypełnić dane wejściowe formularza itp.
Więc spróbowałem tego..
public function gf_reload_editor_form ()
{
// get the post id and set post data
$post_id = $_GET['post_id'];
$post = get_post($post_id);
setup_postdata($post);
// get the form id
$form_id = $_GET['form_id'];
// do shortcode to output gravity form
echo do_shortcode('[gravityform id="'.$form_id.'" title="false" description="false" ajax="true" update]');
die();
}
..myśląc o do_shortcode
może pomyśleć, że jest wewnątrz pętli. Ale to też nie zadziałało.
Wszelkie pomysły, proszę, byłyby świetne dzięki, ponieważ jestem zakłopotany.