确认后,我将使用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
可能认为它在循环中。但是,这仍然不起作用。
如果您有任何想法,我都会非常感谢,因为我被难住了。