ACF/load_field 不适用于自定义 Post 对象

ACF/load_field not working for custom Post Object

在自定义 post 类型(患者)上,我有一个自定义字段,它是另一个 post 类型(房间)对象。它显示为 WP-admin 上的一个下拉列表,并列出了所有房间。我正在尝试根据类别限制房间,因此只会显示类别 "vacant" 中的房间。非常直接。

这是我使用的代码

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;
}

当我加载页面时,所有房间都会显示出来,包括不在类别 "vacant" 中的房间,这不是我想要的。当我回显 $choices 时,我得到这个:

如预期的那样显示 post_ID -> post_title。但是所有房间都出现了,而不仅仅是这 3 个。

我做错了什么?

我认为您想做的是使用 post_object/query 过滤字段的搜索结果,而不是使用 load_field 过滤器。

您更新的似乎是复选框、选择、单选按钮和其他带选项的字段。

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

更多信息:https://www.advancedcustomfields.com/resources/acf-fields-post_object-query/