获得多个州的订单

时间:2016-08-10 15:16:20

标签: c# wordpress woocommerce orders woocommerce-rest-api

我使用C#通过新的REST API从WooCommerce 2.6安装中检索订单列表。

我需要做的是获取具有三种可能状态之一的订单,但API似乎只允许我为每次调用过滤一个状态。这是以前用于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网址中,所以最后我会得到这样的结果:

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

2.5 API用于返回具有status中某个状态的订单列表。现在我收到一条错误消息,指出status不是值any之一,...

一次通话是否仍然可以检索待处理,处理或暂停订单的列表,还是需要对API执行三次单独的调用?

编辑:实际错误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 source code,发现以下代码段:

/**
 * 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 ......?

我想我只是执行三次单独的呼叫,而不是等待解决方案...

1 个答案:

答案 0 :(得分:1)

我在GitHub上提交了这个进行调查,结果发现新的REST API不再支持按多个状态值进行过滤。 (https://github.com/woothemes/woocommerce/issues/11676)。