管理页面上的ACF ACF_form可以工作,但当它通过ajax加载时就会中断



我正在使用acf_form((将表单嵌入到管理页面上的元盒中,使用以下代码(简化(:

$submitted_user_id = 'user_3';
$form_settings = array(
'fields' => ['field_625008b509dca'],
'form_attributes' => array(
'method' => 'POST',
'action' => admin_url("admin-post.php"),
),
'post_id' => $submitted_user_id,
);
acf_form( $form_settings );

并在admin_init中调用必要的acf_form_head((,如下所示:

function append_acf_form_head() {
acf_form_head();
}
add_action( 'admin_init', 'append_acf_form_head', 1 );

这很好,并在提交时更新值。然而,我想通过ajax拉入这个表单,以便从上面的选择过滤器传递user_id。

ajax也工作得很好,并使用传递的user_id拉入表单,但在提交时,表单不会保存数据,而是重定向到"wp-admin/admin-post.php"。

这是functions.php:中ajax功能的php代码

add_action( 'wp_ajax_test_action', 'test_action' );
function test_action() {
// Same acf_form() function as above
wp_die()
}

最后是JS:

$('button#support-ticket-user-filter').on('click', function(e) {
e.preventDefault();
var data = {
'action': 'test_action',
'user_id': $('select#get_user_id').val()
};
$.post(ajaxurl, data, function(response) {
$('#listings-result').append( response );
});
});

有什么想法吗?为什么它在第一种情况下能完美工作,但在第二种情况下却不能?也许这与ajaxurl有关?

非常感谢!

对于任何寻找解决方案的人;我发现了一种有点古怪的方法,目前可以奏效。ACF支持团队提到,这不是开箱即用的功能,但现在已作为功能请求包含在内。对于那些试图实现这一点的人来说,诀窍是永久嵌入一个"伪表单",该表单加载必要的东西以使其全部工作——然后将其挂接到通过ajax拉入的表单中:

因此,在元框中嵌入了一个永久的伪表单:

// This dummy form is required to load all the acf stuff for the ajax version 
$dummy_form_settings = array(
// Do not declare any fields
'post_id' => $submitted_user_id, // Make sure the ID corresponds ( for users in my case )
'form' => true,
);
acf_form( $dummy_form_settings );

我们只想从这个伪表单中得到"更新"按钮,这是一个真正有效的按钮,而不是通过ajax拉入的表单中的按钮。因此,该功能将删除提交按钮,如下所示:

$form_settings = array(
'fields' => ['field_625008b509dca'],
'form_attributes' => array(
'method' => 'POST',
),
'html_before_fields' => sprintf(
'<input type="hidden" name="user_id" value="' . $submitted_user_id . '">',
),
'post_id' => $submitted_user_id,
'form' => true,
'html_submit_button' => '', // The important bit
);
acf_form( $form_settings );
wp_die();

现在,您基本上只剩下一个正确提交的表单。

相关内容

  • 没有找到相关文章

最新更新