WooCommerce:仅购物车全商品含express标签时显示配送自定义消息
问题修复:仅当所有商品带'express'标签时显示配送自定义消息
你的代码逻辑出现了反转,导致判断条件完全错误。以下是修正后的完整代码,同时优化了逻辑可读性:
// 添加配送方法下方的自定义消息 add_action( 'woocommerce_after_shipping_rate', 'action_after_shipping_rate', 20, 2 ); function action_after_shipping_rate ( $method, $index ) { if( 'flat_rate:1' === $method->id ) { echo __("<p>Arriving on your chosen date between 9am - 1pm Perfect for business addresses & special occasions</p>"); } if( 'flat_rate:2' === $method->id ) { echo __("<p>Arriving on your chosen date between 9am - 7pm Perfect for residential addresses</p>"); } } // 控制自定义消息的显示条件:仅所有商品带'express'标签时才显示 add_filter( 'woocommerce_package_rates', 'control_shipping_custom_message_display', 10, 2 ); function control_shipping_custom_message_display( $rates, $package ) { $required_tag = 'express'; $taxonomy = 'product_tag'; // 默认假设所有商品都带标签 $all_have_express = true; foreach( $package['contents'] as $cart_item ) { // 只要有一个商品没有目标标签,就标记为不满足条件 if ( !has_term( $required_tag, $taxonomy, $cart_item['product_id'] ) ){ $all_have_express = false; break; } } // 当不是所有商品都带标签时,移除显示自定义消息的动作 if ( !$all_have_express ) { remove_action( 'woocommerce_after_shipping_rate', 'action_after_shipping_rate', 20, 2 ); } return $rates; }
关键修改说明:
- 把原
woocommerce_shipping_details过滤器换成了更合适的woocommerce_package_rates(WooCommerce官方推荐用于修改配送费率相关逻辑的钩子) - 反转了判断逻辑:初始化假设所有商品都符合条件,一旦发现不符合的商品就标记为不满足
- 只有当存在不带标签的商品时,才移除显示自定义消息的action,确保仅所有商品都带'express'标签时,消息才会显示
内容的提问来源于stack exchange,提问作者Sabrina
相关产品推荐
相关产品推荐

