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
相关产品推荐
相关产品推荐

