ACF / load_field无法用于自定义发布对象

时间:2019-06-20 17:07:20

标签: php wordpress advanced-custom-fields custom-taxonomy

在自定义帖子类型(患者)上,我有一个自定义字段,这是另一种类型(房间)的帖子对象。它仅显示在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时,我得到了:

enter image description here

按预期显示哪个post_ID-> post_title。但是,所有房间都出现了,而不仅仅是这三个房间。

我在这里做什么错了?

1 个答案:

答案 0 :(得分:1)

我认为您想要做的是使用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/