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

如何在WooCommerce中仅对指定用户组显示特定配送方式

解决WooCommerce折扣配送方式仅对特定用户组可见的问题

你当前的代码仅实现了给subscriber用户组隐藏常规配送方式,但未限制折扣配送的可见范围。要让折扣配送仅对subscriber用户组可见,其他用户(包括访客、未分配用户组的用户)无法看到,需要调整代码逻辑,同时管控两种配送方式的显示规则:

  • 对subscriber用户:隐藏常规配送,显示折扣配送
  • 对非subscriber用户:显示常规配送,隐藏折扣配送

修改后的完整代码

add_filter( 'woocommerce_package_rates', 'ts_control_shipping_methods_based_on_user_role', 100, 2 );
function ts_control_shipping_methods_based_on_user_role( $rates, $package ) {
    // 定义需要隐藏的常规配送方式ID
    $regular_shipping_id = 'flat_rate:1';
    // 定义折扣配送方式ID(请替换成你实际创建的折扣配送ID)
    $discount_shipping_id = 'flat_rate:2';
    
    $targeted_roles = array( 'subscriber' );
    $current_user = wp_get_current_user();
    $is_target_user = !empty( array_intersect( $targeted_roles, $current_user->roles ) );

    // 订阅用户:移除常规配送方式
    if ( $is_target_user && isset( $rates[$regular_shipping_id] ) ) {
        unset( $rates[$regular_shipping_id] );
    } 
    // 非订阅用户:移除折扣配送方式
    elseif ( !$is_target_user && isset( $rates[$discount_shipping_id] ) ) {
        unset( $rates[$discount_shipping_id] );
    }

    return $rates;
}

关键说明

  1. 替换配送ID:务必将$discount_shipping_id的值替换为你实际创建的折扣配送方式ID,格式通常为flat_rate:X(X为数字),可在WooCommerce后台「配送」设置中查看对应配送方式的ID。
  2. 逻辑调整:新增非目标用户判断逻辑,直接移除折扣配送方式,确保只有subscriber用户能看到该福利选项。
  3. 缓存刷新:代码修改后,进入WooCommerce后台→设置→配送,点击「保存更改」(无需修改任何设置),触发配送缓存刷新,前端购物车/结算页的配送选项会立即更新。

内容的提问来源于stack exchange,提问作者Dennis08

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:25:03