You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Woocommerce代码仅限制微波炉分类商品30天限购

修改代码实现特定分类(微波炉)的30天限购功能

以下是修改后的代码,仅对分类slug为microwaves的商品生效,同时保留核心限购逻辑,还增加了可配置的限购数量:

// 配置项:设置微波炉分类的限购数量(30天内)
define('MICROWAVE_PURCHASE_LIMIT', 1);

// 检查用户30天内购买微波炉分类商品的数量
function get_microwave_purchase_count( $user_id = 0 ){
    global $wpdb;

    $customer_id = $user_id > 0 ? $user_id : get_current_user_id();
    $category_slug = 'microwaves';

    // 查询用户30天内购买的微波炉分类商品总数
    $count = $wpdb->get_var( $wpdb->prepare("
        SELECT SUM(oi.meta_value)
        FROM {$wpdb->prefix}posts as p
        INNER JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
        INNER JOIN {$wpdb->prefix}woocommerce_order_items as oi ON p.ID = oi.order_id
        INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta as oim ON oi.order_item_id = oim.order_item_id
        INNER JOIN {$wpdb->prefix}term_relationships as tr ON oim.meta_value = tr.object_id
        INNER JOIN {$wpdb->prefix}term_taxonomy as tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
        INNER JOIN {$wpdb->prefix}terms as t ON tt.term_id = t.term_id
        WHERE p.post_type = 'shop_order'
        AND p.post_status IN ('wc-completed', 'wc-processing')
        AND pm.meta_key = '_customer_user'
        AND pm.meta_value = %d
        AND oi.order_item_type = 'line_item'
        AND oim.meta_key = '_product_id'
        AND tt.taxonomy = 'product_cat'
        AND t.slug = %s
        AND UNIX_TIMESTAMP(p.post_date) >= (UNIX_TIMESTAMP(NOW()) - (86400 * 30))
    ", $customer_id, $category_slug) );

    return empty($count) ? 0 : intval($count);
}

// 购物车和结账页面验证
add_action( 'woocommerce_check_cart_items', 'microwave_purchase_limit_validation' );
add_action( 'woocommerce_checkout_process', 'microwave_purchase_limit_validation' );
function microwave_purchase_limit_validation() {
    if ( !is_user_logged_in() ) return;

    $current_cart_microwave_count = 0;
    $category_slug = 'microwaves';

    // 统计当前购物车内微波炉分类商品的数量
    foreach( WC()->cart->get_cart() as $cart_item ) {
        if( has_term( $category_slug, 'product_cat', $cart_item['product_id'] ) ) {
            $current_cart_microwave_count += $cart_item['quantity'];
        }
    }

    // 如果购物车没有微波炉商品,直接跳过验证
    if ( $current_cart_microwave_count == 0 ) return;

    // 获取用户30天内已购买的微波炉数量
    $purchased_count = get_microwave_purchase_count();

    // 检查是否超过限购数量
    if ( ( $purchased_count + $current_cart_microwave_count ) > MICROWAVE_PURCHASE_LIMIT ) {
        wc_add_notice( sprintf( __("您每30天最多只能购买 %d 台微波炉,当前已购买 %d 台,无法完成本次下单。"), MICROWAVE_PURCHASE_LIMIT, $purchased_count ), 'error' );
    }
}

关键修改说明

  • 配置化限购数量:通过MICROWAVE_PURCHASE_LIMIT常量可以快速调整30天内允许购买的微波炉数量
  • 精准查询分类购买记录:关联WooCommerce订单商品表和产品分类表,只统计microwaves分类的已购商品数量,同时仅纳入已完成/处理中的有效订单
  • 购物车分类检查:先判断当前购物车是否包含微波炉商品,不影响其他商品的正常购买流程
  • 合并统计当前购物车与历史购买量:避免用户拆分订单绕过限购,将购物车内的数量与历史已购数量相加后判断是否超限

内容的提问来源于stack exchange,提问作者jamesnelson82

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:31:31