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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:48:33