問題描述

我使用 Wp_query 類查詢我的帖子。 15 個帖子都是在頁面載入中獲取的模板,並且它們的過濾工作正常。使用 JSON restful services 進行其他帖子的無限捲動。伺服器端的過濾器工作正常,但我不知道如何將邏輯從伺服器傳輸到正確的查詢。

Meta_query 陣列傳遞給伺服器上的 Wp_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)

如何將其轉換成查詢?就像是:

/wp-json /帖過濾 [meta_query] [鍵] =主頁,_newsml_id& 安培; [meta_query] [比較] = NOTEXISTS

要麼

?/wp-json /帖過濾 [meta_query] [鍵] =主頁& 安培; 過濾 [meta_query] [鍵] = _ newsml_id& 安培; [meta_query] [比較] = NOTEXISTS

最佳解決方案

對不起,回答我自己的問題,但也可能會幫助其他一些開發商。

我建立了這個額外的過濾器’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);

現在,我可以像這樣呼叫 JSON restful 來模仿伺服器上已經有的 Wp_query 帖子過濾器:

?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

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

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。