我需要防止在wooccommerce中通过IP地址每天销售超过30件商品。基本上,这是对机器人的保护。我认为逻辑一定是这样的:
- 获取客户购买的IP并将其存储在订单元中
- 检查在过去24小时内是否有来自该IP的其他购买
- 如果超过30-在付款前显示错误并要求稍后返回
*用户注册已禁用
所以我不确定从哪里开始,以及如何遵循wooccommerce挂钩规则。
任何代码示例都将受到高度赞赏
WooCommerce实际上默认情况下将客户端IP地址存储在订单元数据中。您可以在WC_Order
上使用get_customer_ip_address()
方法来访问此元数据。同样,WooCommerce包含WC_Geolocation::get_ip_address()
以获取当前连接的客户端的IP。
将这些放在一起,如果具有相同IP的用户试图在给定的时间段内进行过多的购买,则可以使用woocommerce_checkout_process
挂钩来给出错误。
在这里,我使用wc_get_orders()
简洁地查询过去24小时内具有匹配IP的所有订单,如果结果超过30个,则取消交易。
function my_ip_checker() {
$last_24_hours_from_ip_results = wc_get_orders(array(
'date_created' => '>=' . (time() - 86400), // time in seconds
'customer_ip_address' => WC_Geolocation::get_ip_address(),
'paginate' => true // adds a total field to the results
));
if($last_24_hours_from_ip_results->total > 30) {
wc_add_notice('Too many orders in the last 24 hours. Please return later.', 'error');
}
}
add_action('woocommerce_checkout_process', 'my_ip_checker', 10, 0);
请注意,对类型为'error'
的wc_add_notice()
的调用将阻止事务通过。