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

WooCommerce结账时如何仅为指定Local Pickup配送方式设置折扣

解决WooCommerce指定自提配送方式专属折扣问题

原代码的问题出在strpos的用法错误——这个函数并不支持同时传入多个匹配目标,导致判断逻辑失效,折扣被错误应用到所有配送方式。

修改后的代码会先把需要生效折扣的自提配送方式ID存入数组,再直接判断选中的配送方式是否属于这个数组,精准控制折扣范围:

add_action( 'woocommerce_cart_calculate_fees', 'custom_discount_for_pickup_shipping_method', 10, 1 );
function custom_discount_for_pickup_shipping_method( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // 仅在结账页生效
    if ( is_checkout() ) {
    
        $percentage = 5; // <=== 折扣百分比
    
        $chosen_shipping_method_id = WC()->session->get( 'chosen_shipping_methods' )[0];
        // 指定需要折扣的自提配送方式ID
        $target_pickup_methods = array(
            'local_pickup:63',
            'local_pickup:64',
            'local_pickup:65',
            'local_pickup:66',
            'local_pickup:67',
            'local_pickup:68',
            'local_pickup:69'
        );
    
        // 仅当选中的配送方式在目标数组中时应用折扣
        if ( in_array( $chosen_shipping_method_id, $target_pickup_methods ) ) {
            // 计算折扣金额
            $discount = $cart->get_subtotal() * $percentage / 100;
            // 添加折扣费用(负数表示折扣)
            $cart->add_fee( __('3%自提折扣,仓库自提') . ' (' . $percentage . '%)', -$discount );
        }
    }
}

关键修改点:

  • 用in_array()替代错误的strpos()多参数用法,直接匹配完整的配送方式ID,避免误判
  • 将需要生效折扣的自提方式ID整理为数组,逻辑更清晰,后续新增或修改目标方式也更便捷
  • 保留原有的后台环境判断和结账页生效限制,避免在不必要的场景触发折扣逻辑

内容的提问来源于stack exchange,提问作者Mike de Geus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:16:59