WooCommerce REST API v3 - 按修改日期过滤客户
WooCommerce REST API v3 - Filter customers by modified date
我们正在编写一个 WordPress 插件,我们在其中从 WooCommerce 网站检索 Product/Order/Customer 数据并将其存储在我们的服务器中,并定期增量更新以适应更改。我们已经为产品和订单完成了此操作。
现在,我们想要获取在特定日期之后更新其数据的客户以进行增量更新。我已经根据 尝试过如下所示。虽然它适用于产品和订单,但不适用于客户。
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);
如有任何帮助,我们将不胜感激。
在 woocommerce 中,对于产品和订单,最后修改日期存储在 posts
table 的 post_modified
列中。但对于客户,它存储在 usermeta
table 中,密钥为 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_product_object_query
过滤器。
之前的答案在我的环境中崩溃了,所以如果有人需要替代解决方案,这里是:
function add_modified_after_filter_to_rest_api( $prepared_args, $request )
{
if ($request->get_param('modified_after')) {
global $wpdb;
$datetime = (int) strtotime($request->get_param('modified_after'));
$SQL = $wpdb->prepare("SELECT user_id from {$wpdb->usermeta} WHERE meta_key = 'last_update' AND meta_value >= %d", $datetime);
$users_id = $wpdb->get_col($SQL);
$prepared_args['include'] = (array) $users_id;
}
return $prepared_args;
}
add_filter('woocommerce_rest_customer_query','add_modified_after_filter_to_rest_api', 10, 2);
我们正在编写一个 WordPress 插件,我们在其中从 WooCommerce 网站检索 Product/Order/Customer 数据并将其存储在我们的服务器中,并定期增量更新以适应更改。我们已经为产品和订单完成了此操作。
现在,我们想要获取在特定日期之后更新其数据的客户以进行增量更新。我已经根据
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);
如有任何帮助,我们将不胜感激。
在 woocommerce 中,对于产品和订单,最后修改日期存储在 posts
table 的 post_modified
列中。但对于客户,它存储在 usermeta
table 中,密钥为 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_product_object_query
过滤器。
之前的答案在我的环境中崩溃了,所以如果有人需要替代解决方案,这里是:
function add_modified_after_filter_to_rest_api( $prepared_args, $request )
{
if ($request->get_param('modified_after')) {
global $wpdb;
$datetime = (int) strtotime($request->get_param('modified_after'));
$SQL = $wpdb->prepare("SELECT user_id from {$wpdb->usermeta} WHERE meta_key = 'last_update' AND meta_value >= %d", $datetime);
$users_id = $wpdb->get_col($SQL);
$prepared_args['include'] = (array) $users_id;
}
return $prepared_args;
}
add_filter('woocommerce_rest_customer_query','add_modified_after_filter_to_rest_api', 10, 2);