使用DO_SHORT代码通过AJAX加载重力表单

时间:2019-05-27 作者:joshmoto

确认后,我将使用ajax重新加载表单。

这是完美的工作,我正在分析form_id 对动作功能很好。。。

// 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);

            }
        });

    }

});

上面的代码工作得很好。

问题是使用重新加载表单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();

好的,所以上面的一切看起来都很好,dori,那是因为它是。我已经测试了我的其他习惯do_shortcode 功能,输出良好。

问题在于do_shortcode(\'[gravityform ... ]\')


你可能想知道为什么我不用gravity_form() php函数。。。

gravity_form( $form_id, false, false, false, \'\', true );
这也很好用!这将重新加载一个工作正常的ajax表单。


问题是,我需要do_shortcode 因为我需要包括update 所有物这个update 属性不能用于gravity_form() php函数。

这个update 属性是使用Gravity Forms: Post Update 插件,使我的表单能够更新当前帖子,而不是创建新帖子。

这让我想到,当我使用相同的do_shortcode 方法,我正在使用do_shortcode 在回路内部。这就是表单必须知道要获取哪些post数据并预先填充表单输入等的方式。

所以我尝试了这个。。

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();

}

。。思考do_shortcode 可能认为它在循环中。但是,这仍然不起作用。

如果您有任何想法,我都会非常感谢,因为我被难住了。

1 个回复
SO网友:joshmoto

我唯一能想到的办法是do_shortcode 工作是通过使用WP_Query.

<?php

// get current site
$args = [
    \'p\'          => $post_id,
    \'post_type\'  => \'any\'
];

// site wp query
$oSite = new WP_Query($args);

?>

<?php if ( $oSite->have_posts() ): ?>

    <?php while($oSite->have_posts()): $oSite->the_post() ?>

        <div id="gform_ajax_wrapper_<?=$form_id?>">
            <?=do_shortcode(\'[gravityform id="\'.$form_id.\'" title="false" description="false" ajax="true" update]\')?>
        </div>

    <?php endwhile; ?>

<?php else: ?>

    No site found. <?=$post_id?>

<?php endif; ?>

相关推荐

Geoip shortcodes in comments

我想知道如何从geoip插件添加国家/地区短代码(https://pl.wordpress.org/plugins/geoip-detect/) 输入注释字段。[geoip\\u detect2 property=“country”]据我所知,注释字段必须是所见即所得字段(默认情况下不是文本)。还有其他方法吗?通过自定义php函数或其他方式?你好,Michal