通过多个元键查询WP REST API v2

时间:2015-12-02 作者:Trevan Hetzel

使用RESTAPI的v2,我想通过以下方式查询一些帖子multiple 元键。使用v1,我可以将url格式化为&filter[meta_value][month]=12&[meta_value][year]=2015 而且它起到了作用(在向API公开了元数据之后)。

现在有了v2,我只能通过使用GitHub线程上列出的方法来实现这一点:https://github.com/WP-API/WP-API/issues/1599#issuecomment-161166805

基本上,使用rest_query_vars 过滤器类型:

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; }

有了它,我可以过滤one 使用url的元键,如wp-json/wp/v2/posts?filter[meta_key]=test&filter[meta_value]=on.

然而,听起来过滤多个元键的唯一方法是编写一个自定义过滤器。有人能给我指出正确的方向吗?

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

添加custom endpoint 非常简单。

我还修改了url,使其看起来更像

http://example.com/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.com/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\');

SO网友:ricardorios

我知道这个问题已经解决了,但这个插件解决了我的问题https://wordpress.org/plugins/wp-rest-filter/

相关推荐

创建帖子,包含来自远程API的数据

我需要一些帮助和指导。因此,我正在开发一个网站(自定义主题),目标是从远程API获取数据。我希望能够将数据存储在各个帖子中(一种自定义帖子类型),当有人向远程API添加或删除数据时,它应该会更新网站上的帖子。我使用的API的结构如下:https://pippinsplugins.com/edd-api/products我知道如何从中获取数据并解码JSON等。$url = \'https://pippinsplugins.com/edd-api/products\'; $username