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

向未登录用户隐藏多个Woocommerce配送方式的代码故障求助

WooCommerce未登录用户隐藏指定配送方式 代码问题排查与修复

现有代码的错误点

  • 回调函数名不匹配:add_filter注册的回调函数名为shipping_methods_based_on_wholesale_customer,实际定义的函数名为shipping_methods_based_on_user_status,名称不一致导致钩子无法触发你编写的逻辑
  • 语法错误:$is_loggedout = !is_user_logged_in());多写了一个右括号,会直接抛出PHP语法错误
  • 逻辑颠倒:你注释标注需要给未登录用户隐藏的配送方式ID数组,仅在已登录用户分支赋值,未登录状态下该变量不存在,无法执行隐藏逻辑
  • 变量未定义:未登录/已登录分支只有其中一个会给$shipping_rates_ids赋值,另一分支访问该变量会抛出PHP警告
  • 符号转义错误:代码中=>被转义为=>,实际编写时需要替换为正常的PHP数组遍历符号

修正后的完整代码

add_filter( 'woocommerce_package_rates', 'shipping_methods_based_on_user_status', 10, 2 );
function shipping_methods_based_on_user_status( $rates, $package ){
    $is_loggedout = !is_user_logged_in();
    // 初始化配送方式ID数组,避免未定义警告
    $shipping_rates_ids = [];
    
    // 未登录用户才需要隐藏指定配送方式
    if( $is_loggedout ) {
        // 此处填写你要对未登录用户隐藏的配送方式ID
        $shipping_rates_ids = array('flat_rate:10', 'flat_rate:11', 'flat_rate:12', 'flat_rate:13');
    }

    // 遍历当前配送包的配送方式,移除指定ID
    foreach( $rates as $rate_key => $rate ) {
        if ( in_array( $rate_key, $shipping_rates_ids) ) {
            unset( $rates[$rate_key] ); 
        }
    }
    
    return $rates;
}

生效注意事项

  • 代码部署完成后,需要清空WooCommerce配送缓存:登录站点后台,进入「WooCommerce → 状态 → 工具」,点击「清除购物车配送会话」按钮保存,否则旧的缓存配送方式会继续显示
  • 请确认你填写的配送方式ID正确:进入「WooCommerce → 设置 → 配送」,打开对应配送区域的配置,鼠标悬浮在对应配送方式的「编辑」按钮上,浏览器地址栏的instance_id参数值就是flat_rate:后面的数字,需要和你填写的ID完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:39:00