按 IP 限制 woocommerce 订单

2023-12-12

我需要防止在 woocommerce 中通过 IP 地址每天销售超过 30 件商品。基本上,它是针对机器人的保护。 我想逻辑一定是这样的:

  • 获取购买时客户的 IP 并将其存储在订单元中
  • 检查过去 24 小时内是否有来自该 IP 的其他购买
  • 如果超过 30 - 付款前显示错误并要求稍后返回

*用户注册已被禁用

所以我不确定从哪里开始以及如何遵循 woocommerce 挂钩规则。

任何代码示例将不胜感激


WooCommerce 实际上默认将客户端 IP 地址存储在订单元数据中。您可以使用get_customer_ip_address()上的方法WC_Order访问此元数据。同样,WooCommerce 包括WC_Geolocation::get_ip_address()获取当前连接客户端的IP。

将这些放在一起,您可以使用woocommerce_checkout_process如果具有相同 IP 的用户尝试在给定时间段内进行过多购买,则会出现错误。

这里我用的是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);

请注意,调用wc_add_notice()与一种类型'error'将阻止交易进行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按 IP 限制 woocommerce 订单 的相关文章

随机推荐