WooCommerce REST API - Filter Orders By Date Modified

user982124 picture user982124 · Mar 1, 2017 · Viewed 7.3k times · Source

I'm using the WooCommerce REST API (http://woocommerce.github.io/woocommerce-rest-api-docs/#introduction) and can download Customers, Orders, etc successfully.

I'm now trying to get a filtered list of Orders where the Date Modified for the Order is after a certain date, but haven't been able to get this to work so far. The response to get GET request for an Order includes:

"date_modified": "2016-12-21T00:33:38",

I've tried the following:

wp-json/wc/v1/orders?filter[modified]=2017-02-14

but that just returns all orders. I would like to change the = to be a >= so it gets all Orders after the specified date, but haven't been able to find an example of how to structure the request URL for this?

Answer

Muhwezi Jerald basasa picture Muhwezi Jerald basasa · Jul 19, 2020

This worked for me. Tested with Woo 4.0.x / API v3

add_filter('woocommerce_rest_orders_prepare_object_query', function(array $args, \WP_REST_Request $request) {
    $modified_after = $request->get_param('modified_after');

    if (!$modified_after) {
        return $args;
    }

    $args['date_query'][0]['column'] = 'post_modified';
    $args['date_query'][0]['after']  = $modified_after;

    return $args;

}, 10, 2);

/wp-json/wc/v3/orders/?modified_after=2020-05-09T14:00:00

Hope it helps someone.