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/
在自定义 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/