Php 根据用户角色在电子商务购物车上显示自定义定价标签

Php 根据用户角色在电子商务购物车上显示自定义定价标签,php,wordpress,woocommerce,cart,Php,Wordpress,Woocommerce,Cart,我只是想知道是否有人能解决我目前遇到的这个问题。实际上,我正在尝试在购物车上为访问我的在线商店的用户打印自定义价格。以下是我计划设定的条件 未登录的用户->无折扣,不希望在我的购物车页面上看到自定义定价显示 以“客户”用户角色->无折扣登录的用户,不希望在我的购物车页面上看到自定义定价显示 作为“付费客户”用户角色->折扣应用登录的用户,假设在我的购物车页面上看到自定义定价显示 目前,只有未登录的用户和“付费客户”用户角色的定价显示正常工作,但不适用于“客户”角色。不确定我是否正确识别了此处的客

我只是想知道是否有人能解决我目前遇到的这个问题。实际上,我正在尝试在购物车上为访问我的在线商店的用户打印自定义价格。以下是我计划设定的条件

未登录的用户->无折扣,不希望在我的购物车页面上看到自定义定价显示

以“客户”用户角色->无折扣登录的用户,不希望在我的购物车页面上看到自定义定价显示

作为“付费客户”用户角色->折扣应用登录的用户,假设在我的购物车页面上看到自定义定价显示

目前,只有未登录的用户和“付费客户”用户角色的定价显示正常工作,但不适用于“客户”角色。不确定我是否正确识别了此处的客户角色

下面是我在这种情况下使用的挂钩:

add_filter( 'woocommerce_cart_item_price', function ( $price, $values, $cart_item_key ){

        global $woocommerce;
        $items = $woocommerce->cart->get_cart();
        $user = wp_get_current_user();
    
    if (!is_user_logged_in() || (in_array( 'customer', (array) $user->roles ))){
        
        return $price;
        
    }else{
        
        foreach($items as $item => $values) {
            echo "Discounted Price : " . get_post_meta($values['product_id'] , ('_sale_price', true);       
            return $price;  
        }   
    }

}, 10, 3);

编辑:

我的定价折扣已经由插件管理,基于我的自定义用户角色,因此我不再需要担心价格输出

根据@LoicTheAztec接受的答案,请参见下面我的代码答案。

使用此钩子,而不是“在计算总数之前使用woocommerce”

这样,您就不需要在结账和下单过程中处理价格。

使用此钩子,而不是“在计算总额之前进行woocommerce”

这样,您就不需要在结账和下单过程中处理价格

您应该在问题中提到您正在使用的插件,因为StackOverFlow的问题/答案是针对hole社区的,而不仅仅是针对您

您的代码有一些错误,可以简化:

add_filter( 'woocommerce_cart_item_price', 'filter_wc_cart_item_price', 10, 3 );
function filter_wc_cart_item_price( $price, $values, $cart_item_key ){

    // For 'paid_customer' user role when sale price is defined
    if ( current_user_can( 'paid_customer' ) && $sale_price = get_post_meta( $values['product_id'],'_sale_price', true) ) {
    
        // The custom formatted sale price
        $price = sprintf( __("Discounted Price : %s"), wc_price( $sale_price ) );
    }
    return $price;
}
它应该会起作用


对应答代码的编辑不正确,因为过滤器挂钩中的数据始终需要返回,但不回显:

add_filter( 'woocommerce_cart_item_price', 'filter_wc_cart_item_price', 10, 3 );
function filter_wc_cart_item_price( $price, $values, $cart_item_key ){

    // For 'lifetime_member' user role when sale price is defined
    if ( current_user_can( 'paid_customer' ) ) 
    {
        $price = __("Members Price (5% Off): ") .  $price;
    } 
    elseif ( current_user_can('customer') ) 
    {
        $price = __("Normal Price: ") .  $price;
    } 
    return $price;
}
这是正确的工作方式

您应该在问题中提到您正在使用的插件,因为StackOverFlow的问题/答案是针对hole社区的,而不仅仅是针对您

您的代码有一些错误,可以简化:

add_filter( 'woocommerce_cart_item_price', 'filter_wc_cart_item_price', 10, 3 );
function filter_wc_cart_item_price( $price, $values, $cart_item_key ){

    // For 'paid_customer' user role when sale price is defined
    if ( current_user_can( 'paid_customer' ) && $sale_price = get_post_meta( $values['product_id'],'_sale_price', true) ) {
    
        // The custom formatted sale price
        $price = sprintf( __("Discounted Price : %s"), wc_price( $sale_price ) );
    }
    return $price;
}
它应该会起作用


对应答代码的编辑不正确,因为过滤器挂钩中的数据始终需要返回,但不回显:

add_filter( 'woocommerce_cart_item_price', 'filter_wc_cart_item_price', 10, 3 );
function filter_wc_cart_item_price( $price, $values, $cart_item_key ){

    // For 'lifetime_member' user role when sale price is defined
    if ( current_user_can( 'paid_customer' ) ) 
    {
        $price = __("Members Price (5% Off): ") .  $price;
    } 
    elseif ( current_user_can('customer') ) 
    {
        $price = __("Normal Price: ") .  $price;
    } 
    return $price;
}

这是正确的工作方式。

这是我为实现我的目标所做的(感谢@LoicTheAztec-answer):


我的定价折扣已经由插件根据我的自定义用户角色进行管理,因此我不再需要担心价格输出。

这就是我为实现我的目标所做的(感谢@LoicTheAztec answer):


我的定价折扣已经由插件根据我的自定义用户角色进行管理,因此我不再需要担心价格输出。

您好,谢谢您的回复,从提供的代码看,购物车似乎有一个价格定义,在商品到达购物车之前,我已经使用了一个插件来处理这个问题,我只需要向未登录的用户以及具有客户用户角色的用户显示非销售价格。我们还可以使用提供的代码打印价格吗?您好,谢谢您的回复,从提供的代码的外观来看,购物车似乎有一个价格定义,在商品到达购物车之前,我已经使用了一个插件来处理它,我只需要向未登录的用户以及具有customer user角色的用户显示非销售价格。我们还可以使用提供的代码打印价格吗?Hi@LoicTheAztec,感谢您提供有关今后如何提问的建议。实际上,我正在使用AlgoPlus的高级动态定价插件为我的用户指定折扣结构。我已经测试了你的代码,奇怪的是我仍然必须使用echo在购物车中打印我的文本以显示我的文本。我将在下面的选项卡中分享我所做的。您的代码对区分我的用户角色进行了验证。@wjyeshealth我已根据您的答案代码对我的答案进行了编辑…请查看。您好@LoicTheAztec,谢谢,并在修改后的答案上注明。我对它进行了测试,效果很好。您好@LoicTheAztec,感谢您提供关于今后如何提问的建议。实际上,我正在使用AlgoPlus的高级动态定价插件为我的用户指定折扣结构。我已经测试了你的代码,奇怪的是我仍然必须使用echo在购物车中打印我的文本以显示我的文本。我将在下面的选项卡中分享我所做的。您的代码对区分我的用户角色进行了验证。@wjyeshealth我已根据您的答案代码对我的答案进行了编辑…请查看。您好@LoicTheAztec,谢谢,并在修改后的答案上注明。我测试了一下,效果很好。