Woocommerce结账页指定变体已加购时移除提示区块的实现方法
实现方案
你只需要在原有逻辑中新增「购物车是否已包含ID为100、变体ID为112的商品」的判断即可,只要检测到该商品已加入购物车,就不渲染u-1提示区块,修改后的完整代码如下:
add_action('woocommerce_review_order_before_submit', 'displays_cart_products_feature_image'); function displays_cart_products_feature_image() { // 设置需要判断的产品ID $product_ids = array(100); $show_notice = false; $has_target_variant = false; foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $item = $cart_item['data']; // 判断是否存在ID100+变体111的商品 if ( in_array( $item->id, $product_ids ) && $cart_item['variation_id'] == 111 ) { $show_notice = true; } // 新增判断:是否已经添加了ID100+变体112的商品 if ( in_array( $item->id, $product_ids ) && $cart_item['variation_id'] == 112 ) { $has_target_variant = true; } } // 只有当存在111变体、且不存在112变体时才显示提示 if ($show_notice && !$has_target_variant) { echo ' <div id="u-1"> <a href="/?add-to-cart=100&variation_id=112">Add new item</a> </div>'; } }
逻辑说明
- 遍历购物车时会同时做两个校验:是否存在需要提示的111变体、是否已经添加了目标112变体
- 只有同时满足「有111变体」和「没有112变体」两个条件时,才会渲染提示区块
- 用户点击按钮添加112变体后页面重载,此时
$has_target_variant会被标记为true,提示区块自然就不会输出,不需要额外JS处理
内容的提问来源于stack exchange,提问作者Jamdev
相关产品推荐
相关产品推荐

