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

Woocommerce中AJAX加购时特定分类商品计数触发Sweet Alert问题

解决WooCommerce中特定分类商品数量达标时触发Sweet Alert弹窗的问题

我看了你的代码,问题主要出在几个关键细节上:PHP端没有正确统计指定分类的商品数量、AJAX请求的action名称不匹配,而且没有返回统计结果给前端。下面是修复后的完整代码,能实现你要的功能:

第一步:修复PHP端的AJAX处理函数

// WordPress Ajax: 获取特定分类的购物车商品数量
add_action( 'wp_ajax_nopriv_checking_bag_items', 'checking_bag_items' );
add_action( 'wp_ajax_checking_bag_items', 'checking_bag_items' );

function checking_bag_items() {
    global $woocommerce;
    
    // 初始化特定分类的计数器
    $total_bags = 0;
    
    if( isset($_POST['added']) ){
        // 遍历购物车中的所有商品
        foreach ( $woocommerce->cart->cart_contents as $cart_item ) :
            // 检查当前商品是否属于"Bags"分类(这里的分类别名要和你后台一致)
            if ( has_term( 'bags', 'product_cat', $cart_item['product_id'] ) ) {
                $total_bags += $cart_item['quantity'];
            }
        endforeach;
    }
    
    // 返回统计结果给前端(必须用echo输出,不能只die)
    echo $total_bags;
    die(); // 终止AJAX请求,避免500错误
}

第二步:修复前端的jQuery脚本

// 加载Sweet Alert并添加前端逻辑
add_action( 'wp_footer', 'bag_item_count_alert' );
function bag_item_count_alert() {
    // 只在前端页面加载,后台不加载
    if ( is_admin() ) return;
    ?>
    <script src="https://unpkg.com/sweetalert2@7.20.1/dist/sweetalert2.all.js"></script>
    <script type="text/javascript">
    jQuery( function($){
        // 监听商品添加到购物车的AJAX事件
        $(document.body).on('added_to_cart', function() {
            $.ajax({
                type: 'POST',
                url: wc_add_to_cart_params.ajax_url,
                data: {
                    'action': 'checking_bag_items', // 这里要和PHP端的action名称完全一致
                    'added' : 'yes'
                },
                success: function (response) {
                    // 将返回的字符串转成数字
                    const totalBags = parseInt(response);
                    // 当Bags分类商品数量达到5时触发弹窗
                    if(totalBags === 5 ){
                        const toast = swal.mixin({
                            toast: true,
                            showConfirmButton: false,
                            timer: 3000
                        });
                        toast({
                            type: 'success',
                            title: '已添加5件包包!'
                        })
                    }
                }
            });
        });
    });
    </script>
    <?php
}

关键修改点说明

  • 修正了分类判断的参数:原代码里的$product['22']是错误的,应该用$cart_item['product_id']来检查商品所属分类,这样才能正确判断每个商品是否属于"Bags"分类。
  • AJAX action名称统一:PHP端注册的action是checking_bag_items,前端请求时也要用这个名称,之前的代码两边名称不一致导致请求无效。
  • 返回统计结果给前端:原PHP函数没有输出$total_bags,前端根本拿不到统计数据,现在用echo $total_bags把结果返回给JS。
  • 类型转换处理:前端拿到的响应是字符串,转成数字后再做比较,避免字符串对比的潜在问题。
  • 后台加载限制:添加了is_admin()判断,避免在WordPress后台加载不必要的脚本。

你可以把这段代码放到你的主题functions.php文件里,或者用自定义插件来加载,测试一下添加Bags分类的商品到购物车,当数量达到5时就会触发Sweet Alert弹窗了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:13:44