WooCommerce REST API - фильтрация заказов по дате изменения

Я использую REST API WooCommerce (http://woocommerce.github.io/woocommerce-rest-api-docs/#introduction) и может успешно загружать клиентов, заказы и т. д.

Теперь я пытаюсь получить отфильтрованный список заказов, в которых дата изменения заказа находится после определенной даты, но пока не могу заставить это работать. Ответ на получение запроса GET для Заказа включает:

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

Я пробовал следующее:

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

но это просто возвращает все заказы. Я хотел бы изменить = на ›=, чтобы он получал все заказы после указанной даты, но не смог найти пример того, как структурировать URL-адрес запроса для этого?


person user982124    schedule 01.03.2017    source источник
comment
Я столкнулся с той же проблемой   -  person biplab rout    schedule 20.03.2017


Ответы (6)


Это сработало для меня. Протестировано с 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

Надеюсь, это кому-то поможет.

person Muhwezi Jerald basasa    schedule 19.07.2020
comment
При использовании woocommerce_rest_product_object_query это точное решение также работает для продуктов. Большое тебе спасибо :) - person Stranger; 23.09.2020

Я решил проблему, выполнив следующие действия:

  1. Создайте папку.
  2. Создайте файл с тем же именем и следующим содержанием:

    function modify_orders_after_query($request) {
        $request['date_query'][0]['column'] = 'post_modified';
        return $request;
    }
    
    add_filter( "woocommerce_rest_orders_prepare_object_query", 'modify_orders_after_query' );
    
  3. Перетащите его в папку wp-content / plugins.

  4. В панели администратора вы можете увидеть название своей папки как плагин, активируйте его и попробуйте!

person Igor Brandão    schedule 09.10.2019

Это работает:

/wp-json/wc/v2/orders?after=2019-01-10T00:00:00Z&before=2019-01-10T23:59:59Z
person Leandro Silva    schedule 28.06.2019
comment
это для date_created, но не для date_modified date :-( - person Иванцов Дмитрий; 30.03.2021

Мне удалось заставить это работать, используя следующий формат запроса:

wc-api / v1 / orders? filter [updated_at_min] = 2017-02-22 & filter [updated_at_max] = 2017-02-25

person user982124    schedule 21.03.2017
comment
Это работает для меня в моем тестировании с v2 REST API. Вы также можете попробовать что-то вроде этого: / wp-json / wc / v2 / orders? After = 2017-05-17T00: 00: 00Z & before = 2017-05-17T23: 59: 59Z - person user982124; 17.05.2017
comment
да, раньше это работало для заказов, но не для клиентов. Также я думаю, что это не функция Woocommerce, а функция Wordpress. - person babis21; 16.12.2019

Хорошо, API woocommerce на самом деле не реализует фильтр. Это от wordpress api, который используется с woocommerce, а последняя версия wordpress больше не поддерживает фильтр. Для последней версии WordPress вы должны добавить функциональность фильтра вручную, добавив фильтр wordpress rest api, предоставленный командой wp-api

person Steffan    schedule 18.05.2017

Работает

WooCommerce.get("products?after=2020-11-24T09:01:14&before=2020-11-25T04:51:22")
person Parveen Sharma    schedule 25.01.2021