admin管理员组文章数量:1406741
Using v2 of the REST API, I'm wanting to query some posts by multiple meta keys. With v1 I was able to format the url like &filter[meta_value][month]=12&[meta_value][year]=2015
and it worked (after exposing the meta values to the API).
Now with v2, I can only get this to work by using the methods listed on this GitHub thread:
Basically, added the meta fields using the rest_query_vars
filter like:
add_filter( 'rest_query_vars', 'flux_allow_meta_query' );
function flux_allow_meta_query( $valid_vars )
{
$valid_vars = array_merge( $valid_vars, array( 'meta_key', 'meta_value', 'meta_compare' ) );
return $valid_vars;
}
With that, I can filter by one meta key using a url like wp-json/wp/v2/posts?filter[meta_key]=test&filter[meta_value]=on
.
However, it sounds like the only way to filter on multiple meta keys is to write a custom filter. Could someone point me in the right direction of doing that?
Using v2 of the REST API, I'm wanting to query some posts by multiple meta keys. With v1 I was able to format the url like &filter[meta_value][month]=12&[meta_value][year]=2015
and it worked (after exposing the meta values to the API).
Now with v2, I can only get this to work by using the methods listed on this GitHub thread: https://github/WP-API/WP-API/issues/1599#issuecomment-161166805
Basically, added the meta fields using the rest_query_vars
filter like:
add_filter( 'rest_query_vars', 'flux_allow_meta_query' );
function flux_allow_meta_query( $valid_vars )
{
$valid_vars = array_merge( $valid_vars, array( 'meta_key', 'meta_value', 'meta_compare' ) );
return $valid_vars;
}
With that, I can filter by one meta key using a url like wp-json/wp/v2/posts?filter[meta_key]=test&filter[meta_value]=on
.
However, it sounds like the only way to filter on multiple meta keys is to write a custom filter. Could someone point me in the right direction of doing that?
Share Improve this question asked Dec 2, 2015 at 23:01 Trevan HetzelTrevan Hetzel 2032 silver badges7 bronze badges 02 Answers
Reset to default 5Adding a custom endpoint is pretty straightforward.
I also modified the url to look more like
http://example/wp-json/namespace/v2/posts?filter[meta_value][month]=12&filter[meta_value][year]=2015
function wp_json_namespace_v2__init()
{
// create json-api endpoint
add_action('rest_api_init', function () {
// http://example/wp-json/namespace/v2/posts?filter[meta_value][month]=12&filter[meta_value][year]=2015
register_rest_route('namespace/v2', '/posts', array (
'methods' => 'GET',
'callback' => 'wp_json_namespace_v2__posts',
'permission_callback' => function (WP_REST_Request $request) {
return true;
}
));
});
// handle the request
function wp_json_namespace_v2__posts($request)
{
// json-api params
$parameters = $request->get_query_params();
// default search args
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'numberposts' => -1,
// limit to only ids
// 'fields' => 'ids',
);
// check the query and add valid items
if (isset($parameters['filter']['meta_value'])) {
foreach ($parameters['filter']['meta_value'] as $key => $value) {
switch ($key) {
case 'month':
if (is_numeric($value))
$args['monthnum'] = $value;
break;
case 'year':
if (is_numeric($value))
$args['year'] = $value;
break;
}
}
}
// run query
$posts = get_posts($args);
// return results
$data = array(
'success' => true,
'request' => $parameters,
'count' => count($posts),
'posts' => $posts,
);
return new WP_REST_Response($data, 200);
}
flush_rewrite_rules(true); // FIXME: <------- DONT LEAVE ME HERE
}
add_action('init', 'wp_json_namespace_v2__init');
I know this question was solved, but this plugin is out and solved my problem https://wordpress/plugins/wp-rest-filter/
本文标签: filtersQuery WP REST API v2 by multiple meta keys
版权声明:本文标题:filters - Query WP REST API v2 by multiple meta keys 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744850474a2628464.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论