简体   繁体   English

WP JSON REST API(Ryan McCue)如何使用“ AND”关系查询具有特定元数据的帖子?

[英]WP JSON REST API (Ryan McCue) how to query posts with specific meta data with 'AND' relation?

I use Wp_query class to query my posts. 我使用Wp_query类查询我的帖子。 15 posts are in a template fetched on page load and their filtering works fine. 在页面加载时获取的模板中有15个帖子,其过滤效果很好。 Infinity scroll fetches for other posts using JSON restful services . 使用JSON Restful服务为其他帖子获取Infinity滚动获取。 The filter on the server side works fine but I don't know how to transfer the logic from the server to a proper query. 服务器端的过滤器工作正常,但我不知道如何将逻辑从服务器传输到正确的查询。

Meta_query array passed to Wp_query on the server: 传递给服务器上Wp_query的Meta_query数组:

meta_query

  0 =>  array (size=3)
    'key' => string 'homepage' (length=8)
    'value' => string 'false' (length=5)
    'compare' => string 'NOT EXISTS' (length=10)
  1 => array (size=2)
    'key' => string '_newsml_id' (length=10)
    'compare' => string 'NOT EXISTS' (length=10)
  'relation' => string 'AND' (length=3)

How to translate that into the query? 如何将其转换为查询? something like: 就像是:

/wp-json/posts?filter[meta_query][key]=homepage,_newsml_id&[meta_query][compare]=NOTEXISTS / wp-json / posts?filter [meta_query] [key] = homepage,_newsml_id&[meta_query] [compare] = NOTEXISTS

or 要么

/wp-json/posts?filter[meta_query][key]=homepage&filter[meta_query][key]=_newsml_id&[meta_query][compare]=NOTEXISTS / wp-json / posts?filter [meta_query] [key] = homepage&filter [meta_query] [key] = _ newsml_id&[meta_query] [compare] = NOTEXISTS

(sorry for duplicating questions , I just wanted to get the possibly most accurate answer) (很抱歉重复问题 ,我只是想获得可能最准确的答案)

Sorry for answering my own question but it may help some other devs too. 很抱歉回答我自己的问题,但也可能对其他一些开发人员有所帮助。

I created this additional filter 'json_query_var-meta_query'that returns the necessary arguments. 我创建了这个额外的过滤器'json_query_var-meta_query',该过滤器返回必要的参数。

function adjustQrry($data){
    $args = array();
    $args['relation'] = 'AND';

    foreach ($data as $key=>$value) {
        if ( 'relation' === $key ) {
            $args['relation'] = $data['relation'];
        }
        if (  substr($key, 0, 3) === 'key' ) {
            $arg_num = substr($key, 3);
            $args[(int)$arg_num]['key'] = $value;
        }
        if (  substr($key, 0, 7) === 'compare' ) {
            $arg_num_comp = substr($key, 7);
            $args[(int)$arg_num_comp]['compare'] = $value;
        }
    }
    return $args;
}

add_filter('json_query_var-meta_query', 'adjustQrry', 10, 1);

Now, I can call JSON restful like that to mimic the Wp_query posts filter already on the server: 现在,我可以像这样调用JSON restful来模仿服务器上已经存在的Wp_query posts过滤器:

?filter[meta_query][key]=_newsml_categories_newsstream&filter[meta_query][key2]=homepage&filter[meta_query][relation]=AND&filter[meta_query][compare]=NOT%20EXISTS&filter[meta_query][compare2]=NOT%20EXISTS

Ref: https://github.com/WP-API/WP-API/issues/337 参考: https : //github.com/WP-API/WP-API/issues/337

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM