WordPress

shortcode – Załaduj formularz grawitacyjny przez ajax, używając kodu do_shortcode

  • 28 maja, 2019
  • 3 min read
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.

Warto przeczytać!  index.php zmienił się sam

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.

Warto przeczytać!  Jak porównać responsywne motywy w witrynie WordPress

Wszelkie pomysły, proszę, byłyby świetne dzięki, ponieważ jestem zakłopotany.


Źródło