1

C# を使用して、新しい REST API を介して WooCommerce 2.6 インストールから注文のリストを取得しています。

私がする必要があるのは、3 つの可能な状態のいずれかを持つ注文をフェッチすることですが、API では、呼び出しごとに 1 つのステータスしかフィルタリングできないようです。これは、WooCommerce 2.5x REST API で正常に機能していたコードの一部です。

// Create a list of parameters for filtering the result set
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters["status"] = "pending,processing,on-hold";
parameters["expand"] = "coupons,products,taxes";

// Use RestSharp to call the API
var client = new RestClient(wooHelper.ApiUrl);
...
var request = new RestRequest(url, Method.GET);
var response = client.Execute(request);

辞書の値parametersは API URL に追加されるため、最終的には次のようになります。

https://example.com/wp-json/wc/v1/orders?status=pending,processing,on-hold&expand=coupons,products,taxes&<other parameters for OAUTH>

2.5 API は、 の状態の 1 つを持つ注文のリストを返すために使用されていましたstatus。今、それstatusは値の1つではないというエラーが表示されますany...

保留中、処理中、または保留中の注文のリストを1 回の呼び出しで取得することは可能ですか、それとも API に対して 3 回別々に呼び出す必要がありますか?


編集:実際のエラー JSON は

{
    "code" : "rest_invalid_param",
    "message" : "Ung\u00fcltige(r) Parameter: status",
    "data" : {
        "status" : 400,
        "params" : {
            "status" : "status ist kein any, pending, processing, on-hold, completed, cancelled, refunded, failed"
        }
    }
}

編集 2: WooCommerce のソース コードを掘り下げると、次のコード スニペットが見つかりました。

/**
 * Query args.
 *
 * @param array $args
 * @param WP_REST_Request $request
 * @return array
 */
public function query_args( $args, $request ) {
    global $wpdb;

    // Set post_status.
    if ( 'any' !== $request['status'] ) {
        $args['post_status'] = 'wc-' . $request['status'];
    } else {
        $args['post_status'] = 'any';
    }

では、複数のステータスを渡すと、これは...$args['post_status']になりwc-pending,processing,on-holdますか?

解決策を待つ代わりに、3 つの別々の呼び出しを実行するだけだと思います...

4

1 に答える 1

1

これを調査のために GitHub に提出したところ、新しい REST API では複数のステータス値によるフィルタリングがサポートされなくなっていることがわかりました。( https://github.com/woothemes/woocommerce/issues/11676 )。

于 2016-08-15T13:23:09.317 に答える