过滤器和状态参数不适用于客户/ {id} / orders端点

时间:2015-10-04 06:20:35

标签: android wordpress woocommerce

我正在使用WooCommerce Rest api访问Android应用程序中的数据。

我正在尝试根据状态获取客户订单列表:待处理/处理/暂停。

我在查询中使用了status参数,但它不起作用。它返回所有订单,包括已完成的订单。

这是查询:

http://192.168.1.105:8081/storeapp/wc-api/v3/customers/13/orders?oauth_consumer_key=ck_e87a74423bc0d77b84446079fabf1fca5e2e1a52&oauth_nonce=1234&oauth_signature=V5L5H0hTSKieItFyl9wmgK4q0Ps%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1443904623&oauth_version=1.0&status=pending

它返回所有订单,我只需要具有挂单状态的订单(或我指定的任何订单)。

我尝试应用过滤器参数来限制返回的结果,但这也不起作用(在其他端点上工作,例如。http://192.168.1.105:8081/storeapp/wc-api/v3/orders

我不想检索所有订单,然后在客户端上进行过滤。对此有什么解决方案吗?

1 个答案:

答案 0 :(得分:0)

您可以在将结果发送到客户端之前过滤服务器上的结果。您需要使用woocommerce_api_customer_orders_response过滤器并过滤订单

add_filter( 'woocommerce_api_customer_orders_response', 'custom_response' );

function custom_response( $orders ) {
    // user can pass multiple values separated by comma "," for status parameter
    $order_status = array();

    if( isset( $_GET['status'] ) && ! empty( $_GET['status'] ) ) {
        // getting status values from parameter
        $order_status = explode(",",$_GET['status']);
    } else {
        // no status has been specified return all orders
        return $orders;
    }

    $filtered_orders = array();

    foreach( $orders as $order ) {
        // checking order status against the values received in query
        if(in_array($order['status'],$order_status ))
            array_push( $filtered_orders, $order );     
    }

    return $filtered_orders;
}