在自定义帖子类型(患者)上,我有一个自定义字段,这是另一种类型(房间)的帖子对象。它仅显示在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时,我得到了:
按预期显示哪个post_ID-> post_title。但是,所有房间都出现了,而不仅仅是这三个房间。
我在这里做什么错了?
答案 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/