WP REST API:按元价值(ACF)排序帖子?

时间:2017-01-02 作者:Mauro Bringolf

我正在请求使用WP REST API的帖子,需要根据ACF字段对它们进行排序。它的值表示一个日期(数字,jQuery日期格式yymmdd)。我知道如何使用普通的WP\\U查询,并尝试使用rest api执行相同的操作:

mydomain.com/wp-json/wp/v2/posts?filter[orderby]=meta_value_num&filter[meta_key]=my_field_name&filter[order]=DESC
事实上,我使用的是一个在RESTAPI中注册的自定义post类型,其他一切都很好地工作,所以我认为这不是一个特定于cpt的问题?

但帖子会按默认顺序显示(创建日期,从最晚到最早)。我错过了什么?rest api是否不支持此orderby参数?如果是这样,我自己如何实现它?

还有其他解决方法和建议吗?真的在寻找解决方案!感谢您的任何提示!

2 个回复
最合适的回答,由SO网友:iguanarama 整理而成

我猜您还没有使用REST\\u query\\u vars过滤器将meta\\u键和meta\\u值公开给REST API,所以应该这样做:

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\');
然后可以在查询中引用meta\\u键和meta\\u值。

请注意,这显然会将您的所有post元数据公开给API,这会带来潜在的安全隐患;我相信这就是为什么它在默认情况下不会被激活。

SO网友:Amjad
add_filter( \'rest_post_query\', function (  $args, $request ) {
    if ( isset( $request[\'meta_key\']) && !empty($request[\'meta_key\'] ) ) {
        $args[\'meta_key\'] = $request[\'meta_key\'];
    }
    return $args;
}, 10, 2);

add_filter( "rest_post_collection_params", function($query_params, $post_type){

    array_push($query_params[\'orderby\'][\'enum\'],\'meta_value\' );

    return $query_params;
}, 10, 2);

相关推荐

Get_Terms()Order by Term_Meta

我正在做一个get_terms() 我试图按自定义术语元排序的查询。自定义术语元键是\'order\' 它是一个数值(介于1和10之间)。我尝试了以下方法,但顺序似乎没有遵循元值-任何指针都是值得赞赏的。$type_terms = get_terms( \'type\', array( \'hide_empty\' => false, array( \'key\' => \'order\', ), \'or