在WooCommerce中实现购物车同时含两类商品时显示自定义消息
解决WooCommerce购物车同时存在两类商品时显示自定义消息的问题
看起来你当前的代码逻辑是只要购物车里有其中一类目标商品就会弹出消息,咱们调整一下逻辑,改成必须同时存在两类指定分类的商品才显示自定义内容,这样就符合你的需求啦。
下面是修正后的完整代码,我会给你拆解关键修改点:
add_action( 'woocommerce_before_cart', 'allclean_add_checkout_content', 12 ); function allclean_add_checkout_content() { // 替换成你实际需要检测的两个商品分类slug $special_cat2 = 'test-cat2'; $special_cat3 = 'test-cat3'; // 初始化两个标记,用来记录购物车中是否存在对应分类的商品 $has_cat2 = false; $has_cat3 = false; // 遍历购物车中的每一件商品 foreach ( WC()->cart->get_cart() as $cart_item ) { $product = $cart_item['data']; // 检查当前商品是否属于test-cat2分类 if ( has_term( $special_cat2, 'product_cat', $product->get_id() ) ) { $has_cat2 = true; } // 检查当前商品是否属于test-cat3分类 if ( has_term( $special_cat3, 'product_cat', $product->get_id() ) ) { $has_cat3 = true; } } // 核心判断:只有当两类商品都存在时,才输出自定义消息 if ( $has_cat2 && $has_cat3 ) { echo '<div class="custom-cart-alert" style="padding: 12px; background-color: #e8f5e9; border-radius: 4px; margin-bottom: 20px; border-left: 4px solid #4caf50;">'; echo '<p style="margin: 0;">这里替换成你的自定义消息,比如:恭喜!你同时选购了两类专属商品,可享受XX福利~</p>'; echo '</div>'; } }
关键修改说明:
- 把原来单个的
$bool变量拆成了$has_cat2和$has_cat3两个独立标记,分别跟踪每个分类商品的存在状态,避免了"只要找到一个分类就触发"的问题 - 遍历购物车商品时,分别检查每个商品是否属于目标分类,对应更新标记变量
- 最后触发消息的条件改成了
$has_cat2 && $has_cat3,确保两类商品都在购物车中才会显示消息
小提示:
- 如果你的商品分类是用ID而非slug来识别的,只需要把
has_term函数的第一个参数换成分类ID即可 - 消息的样式可以根据你的店铺风格调整,修改
style属性里的内容,或者给容器加自定义CSS类,在主题样式表中统一设置
内容的提问来源于stack exchange,提问作者Cel
相关产品推荐
相关产品推荐

