wordpress - WP REST API orderby meta_value

标签 wordpress rest

需要能够按元值对 REST API 自定义帖子查询的结果进行排序。

这样做有困难。

我已将我的帖子类型提供给 REST API,并且可以按日期、标题等进行排序...

但是当我尝试 Post Meta 时它不起作用。

我添加了以下代码来尝试启用该功能,但默认为按日期排序。

function my_add_meta_vars ($current_vars) {
  $current_vars = array_merge ($current_vars, array('meta_key', 'meta_value'));
  return $current_vars;
}
add_filter ('query_vars', 'my_add_meta_vars');
add_filter ('rest_query_vars', 'my_add_meta_vars');

我的 REST API 查询是
mysite.com/wp-json/wp/v2/hh_equipment?filter[orderby]=meta_value_num&meta_key=equipment_price&order=desc

我曾尝试按照 here 的说明进行操作,但无济于事。

运行 WordPress 4.8 并尝试在 4.7 上测试无济于事

最佳答案

引用下面的方法,
我修改了现有路由以添加一个新的 args 条目,该条目验证允许的 meta_key 值。也不需要以这种方式修改其余查询变量。

add_filter('rest_endpoints', function ($routes) {
    // I'm modifying multiple types here, you won't need the loop if you're just doing posts
    foreach (['some', 'types'] as $type) {
        if (!($route =& $routes['/wp/v2/' . $type])) {
            continue;
        }

        // Allow ordering by my meta value
        $route[0]['args']['orderby']['enum'][] = 'meta_value_num';

        // Allow only the meta keys that I want
        $route[0]['args']['meta_key'] = array(
            'description'       => 'The meta key to query.',
            'type'              => 'string',
            'enum'              => ['my_meta_key', 'another key'],
            'validate_callback' => 'rest_validate_request_arg',
        );
    }

    return $routes;
});

REF: https://github.com/WP-API/WP-API/issues/2308

关于wordpress - WP REST API orderby meta_value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44783932/

相关文章:

ios - 如何在iOS中发送带有特殊字符的JSON字符串?

facebook - 更改永久链接结构时是否可以保持社交份额计数?

php - wordpress下载php文件而不是查看网页

wordpress - 使用 WP JWT Auth 登录 Facebook

php - 在自定义帖子类型中显示标签面板

rest - Spring MVC 3.1 REST服务post方法返回415

php - Bootstrap 导航栏类无法正常工作

javascript - 我想使用所选按钮的 id,但如何从中获取 id? this.id 不起作用

api - 是否有 Restful 博客 API

rest - 使用 POST 作为 URL 字符限制的解决方法