web-dev-qa-db-ja.com

WP JSON REST API(Ryan McCue)どのように特定のメタデータを持つ投稿に 'AND'リレーションで問い合わせるのですか?

私は私の投稿を照会するためにWp_queryクラスを使います。 15の投稿がページの読み込み時に取得されたテンプレートに含まれており、それらのフィルタリングは問題なく動作します。 JSON restful services を使用して、他の投稿を無限スクロールフェッチします。サーバー側のフィルタは問題なく動作しますが、サーバーから適切なクエリにロジックを転送する方法がわかりません。

サーバー上の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)

それをクエリに変換する方法何かのようなもの:

/ wp-json/posts?filter [meta_query] [key] =ホームページ、_newsml_id&[meta_query] [比較] = NOTEXISTS

または

/ wp-json/posts?filter [meta_query] [key] =ホームページ&filter [meta_query] [key] = _ newsml_id&[meta_query] [比較] = NOTEXISTS

7
DamianS1987

私自身の質問に答えて申し訳ありませんが、他の開発者にも役立つかもしれません。

必要な引数を返すこの追加のフィルタ '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);

これで、サーバー上に既に存在しているWp_queryの投稿フィルタを模倣するために、JSONをそのように呼び出して安心させることができます。

?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

9
DamianS1987

WP REST AP​​I V2はどうですか。私はこれがv2で働いていないと思います!

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

それはこのようなはずですか?

add_filter('rest_query_vars-meta_query', 'adjustQrry', 10, 1);
0
Amino