WP API V2:ACF查询帖子
WP API V2: Query posts by ACF
我想通过过滤添加了高级自定义字段的自定义元来查询我的 post。这是一个布尔元,所以每个 post 都会有这样的东西:
{
...
"acf" : {
"highlight" : true
}
...
}
即使我将 meta_key 和 meta_value 暴露给 function.php
中的 REST API:[=16,我也无法按此元值进行过滤=]
function my_add_meta_vars ($current_vars) {
$current_vars = array_merge ($current_vars, array ('meta_key', 'meta_value'));
return $current_vars;
}
add_filter ('rest_query_vars', 'my_add_meta_vars');
但如果我尝试:
GET
http://localhost/wp-json/wp/v2/posts?filter[meta_key]=highlight&filter[meta_value]=true
我看到所有 post 就好像过滤器被忽略了一样。
我能够通过此自定义解决此问题:
add_filter( 'rest_query_vars', function ( $valid_vars ) {
return array_merge( $valid_vars, array( 'highlight', 'meta_query' ) );
} );
add_filter( 'rest_post_query', function( $args, $request ) {
$highlight = $request->get_param( 'highlight' );
if ( ! empty( $highlight ) ) {
$args['meta_query'] = array(
array(
'key' => 'highlight',
'value' => $highlight,
'compare' => '=',
)
);
}
return $args;
}, 10, 2 );
并以这种方式进行查询(突出显示是 acf 布尔值)
GET /wp-json/wp/v2/posts?highlight=1
我想通过过滤添加了高级自定义字段的自定义元来查询我的 post。这是一个布尔元,所以每个 post 都会有这样的东西:
{
...
"acf" : {
"highlight" : true
}
...
}
即使我将 meta_key 和 meta_value 暴露给 function.php
中的 REST API:[=16,我也无法按此元值进行过滤=]
function my_add_meta_vars ($current_vars) {
$current_vars = array_merge ($current_vars, array ('meta_key', 'meta_value'));
return $current_vars;
}
add_filter ('rest_query_vars', 'my_add_meta_vars');
但如果我尝试:
GET http://localhost/wp-json/wp/v2/posts?filter[meta_key]=highlight&filter[meta_value]=true
我看到所有 post 就好像过滤器被忽略了一样。
我能够通过此自定义解决此问题:
add_filter( 'rest_query_vars', function ( $valid_vars ) {
return array_merge( $valid_vars, array( 'highlight', 'meta_query' ) );
} );
add_filter( 'rest_post_query', function( $args, $request ) {
$highlight = $request->get_param( 'highlight' );
if ( ! empty( $highlight ) ) {
$args['meta_query'] = array(
array(
'key' => 'highlight',
'value' => $highlight,
'compare' => '=',
)
);
}
return $args;
}, 10, 2 );
并以这种方式进行查询(突出显示是 acf 布尔值)
GET /wp-json/wp/v2/posts?highlight=1