Php ACF/load_字段不适用于自定义Post对象

Php ACF/load_字段不适用于自定义Post对象,php,wordpress,advanced-custom-fields,custom-taxonomy,Php,Wordpress,Advanced Custom Fields,Custom Taxonomy,对于自定义post类型的患者,我有一个自定义字段,它是类型为room的另一个post对象。它显示为WP admin上的下拉列表,并列出所有房间。我试图根据房间类别限制房间,因此只有类别为“空闲”的房间才会显示。非常直截了当 这是我正在使用的代码 add_filter('acf/load_field/name=room', 'populateRooms'); function populateRooms($field) { $field['choices'] = array();

对于自定义post类型的患者,我有一个自定义字段,它是类型为room的另一个post对象。它显示为WP admin上的下拉列表,并列出所有房间。我试图根据房间类别限制房间,因此只有类别为“空闲”的房间才会显示。非常直截了当

这是我正在使用的代码

add_filter('acf/load_field/name=room', 'populateRooms');
function populateRooms($field)
{
    $field['choices'] = array();
    wp_reset_query();
    $query = new WP_Query(array(
        'post_type' => 'room',
        'orderby' => 'menu_order',
        'order' => 'ASC',
        'posts_per_page' => -1,
        'tax_query' => array(
            array(
                'taxonomy' => 'room_category',
                'field'=>'slug',
                'terms' => 'vacant',
            )
        )
    ));
    $field['choices'] = array();
    foreach ($query->posts as $room_id => $matched_room) {
        $choices[$matched_room->ID] = $matched_room->post_title;
    }
    if (is_array($choices)) {
        foreach ($choices as $key => $choice) {
            $field['choices'][$key] = $choice;
        }
    }
    wp_reset_query();
    return $field;
}
当我加载页面时,所有房间都会显示出来,包括那些不属于“空闲”类别的房间,这不是我想要的。当我回显$choices时,我得到以下信息:

这将显示帖子ID->帖子标题,如预期的那样。然而,所有的房间都出现了,不仅仅是这3个


我做错了什么?

我想你要做的是用post\u object/query过滤字段的搜索结果,而不是使用load\u字段过滤器

您更新的内容似乎是针对复选框、选择、单选按钮和其他具有选项的字段

add_filter('acf/fields/post_object/query/name=room', function ($args, $field, $id) {
    $args['tax_query'] = [
        [
            'taxonomy' => 'room_category',
            'field' => 'slug',
            'terms' => 'vacant'
        ]
    ];

    return $args;
}, 10, 3);

有关更多信息:

如果您执行var_dump$field['choices',它会输出什么;就在return$字段之前;?显示阵列的图像就是输出。我说的是回声,但我的意思是回声;但是,既然你问了:array3{[1295]=>string5366-1[1415]=>string5438-4[1251]=>string5212-1},那意味着你的钩子不起作用了。您确定您的字段在此添加过滤器'acf/load'字段/name=room'、'populateRooms'中有名称room吗;它有一个名为Room的字段,你可以在这张图中看到自定义字段的设置:也许我的方法是错误的,我会尝试一下@Leathel一定要让我知道事情的进展:这个答案非常有效!谢谢你的帮助@Leathel没问题: