管理页面上的 ACF acf_form 有效,但是当它通过 ajax 加载时它会中断

ACF acf_form on admin page works, but when it is loaded in via ajax it breaks

我正在使用 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 拉入此表单,以便从上面的 select 过滤器传递 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 支持团队提到这不是开箱即用的功能,但现在已作为功能请求包含在内。对于那些试图实现这一点的人来说,诀窍是永久嵌入一个 'dummy form' 来加载必要的东西以使其全部工作 - 然后将其挂钩到通过 ajax:[=12= 拉入的表单中]

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

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

我们想要从这个虚拟表单中得到的只是 'update' 按钮 - 这是实际起作用的按钮,而不是通过 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();

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