首页 > 解决方案 > WooCommerce REST API v3 - 按修改日期过滤客户

问题描述

我们正在编写一个 WordPress 插件,我们在其中从 WooCommerce 网站检索产品/订单/客户数据并将其存储在我们的服务器中,并定期增量更新以进行更改。我们已经为产品和订单做到了这一点。

现在,我们希望获得在特定日期之后更新数据的客户进行增量更新。我已经根据https://stackoverflow.com/a/64029143/698072进行了如下尝试。虽然它适用于产品和订单,但它不适用于客户。

add_filter('woocommerce_rest_customer_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);

对此的任何帮助将不胜感激。

标签: phpwordpresswoocommercewoocommerce-rest-api

解决方案


在 woocommerce 中,对于产品和订单,最后修改日期存储在表的post_modified列中posts。但是对于客户来说,它存储在usermeta表中,键为last_update. 所以你必须像这样在元数据上过滤它,

public function add_modified_after_filter_to_rest_api( $prepared_args, $request )
{
    if ($request->get_param('modified_after')) {
        $prepared_args['meta_query'] = array(
            array(
                'key'     => 'last_update',
                'value'   => (int) strtotime($request->get_param('modified_after')),
                'compare' => '>='
            ),
        );
    }
    
    return $prepared_args;
}

add_filter('woocommerce_rest_customer_query', 'add_modified_after_filter_to_rest_api', 10, 2);

对于产品和订单,您可以像这样检索它, WooCommerce REST API v3 -使用过滤器按修改日期过滤产品woocommerce_rest_product_object_query


推荐阅读