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

WooCommerce中为特定用户角色显示促销价的实现咨询

针对特定用户组显示折扣价的最简实现方案

问题背景

运营在线商店时,已创建biblioteka用户角色及对应客户,通过以下代码实现了购物车端40%折扣:

/* discount biblioteka */
add_action( 'woocommerce_cart_calculate_fees', 'discount_based_on_user_role', 20, 1 );
function discount_based_on_user_role( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return; // Exit
    
    // only for 'biblioteka' role
    if ( ! current_user_can('biblioteka') )
        return; // Exit

    // Kortings percentage
    $percentage = 40;
    
    $discount = $cart->get_subtotal() * $percentage / 100; // Calculation
    
    // Applying discount
    $cart->add_fee( sprintf( __("biblioteka discount (%s)", "woocommerce"), $percentage . '%'), - $discount, true );
}

但尝试添加自定义价格代码时网站崩溃,需求是让biblioteka用户组同时看到商品常规价和40%折扣后的促销价。

问题原因

你之前的代码直接修改了商品的基础price值,打乱了WooCommerce的价格逻辑链,导致系统冲突。正确做法是利用WooCommerce原生的销售价机制,既保留原价,又为目标用户显示专属折扣价。

解决方案

替换出错的代码,使用以下代码即可实现需求:

/* 为biblioteka用户组显示专属折扣销售价 */
add_filter('woocommerce_product_get_sale_price', 'custom_sale_price_for_biblioteka', 10, 2);
add_filter('woocommerce_product_variation_get_sale_price', 'custom_sale_price_for_biblioteka', 10, 2);
add_filter('woocommerce_product_get_price', 'custom_display_price_for_biblioteka', 10, 2);
add_filter('woocommerce_product_variation_get_price', 'custom_display_price_for_biblioteka', 10, 2);

function custom_sale_price_for_biblioteka( $sale_price, $product ) {
    if ( current_user_can('biblioteka') ) {
        $regular_price = (float)$product->get_regular_price();
        return $regular_price * 0.6; // 40%折扣后为原价的60%
    }
    return $sale_price;
}

function custom_display_price_for_biblioteka( $price, $product ) {
    if ( current_user_can('biblioteka') ) {
        return $product->get_sale_price();
    }
    return $price;
}

代码说明

  1. 销售价生成:通过woocommerce_product_get_sale_price钩子,为biblioteka用户计算专属销售价(原价×0.6),不影响其他用户的价格设置
  2. 价格显示控制:通过woocommerce_product_get_price钩子,让目标用户看到的显示价格为生成的专属销售价
  3. 原生样式支持:WooCommerce会自动套用「原价划掉+促销价高亮」的标准样式,无需额外修改前端代码

注意事项

  • 确保使用的WordPress主题兼容WooCommerce的标准价格模板,否则可能无法正确显示原价与促销价的对比效果
  • 代码同时支持简单商品和可变商品,无需额外添加钩子

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:30:28