在 Woocommerce 中为登录用户启用销售价格,为未登录用户启用正常价格 [英] Enable sale price for logged users and regular price for unlogged users in Woocommerce

查看:22
本文介绍了在 Woocommerce 中为登录用户启用销售价格,为未登录用户启用正常价格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 Woocommerce 中,我有一个有很多变化的可变产品,每个变化都有自己的常规价格和销售价格.

In Woocommerce I have a variable products with many variations and every variation has its own REGULAR price and SALE price.

我想当用户:

  • 已登录,销售价格将是有效价格
  • 未登录,正常价格将是有效价格.

我在我的子主题 function.php 文件中添加了这个钩子函数:

I have added this hooked function in my child theme function.php file:

add_filter( 'woocommerce_available_variation', 'my_variation', 10, 3);
function my_variation( $data, $product, $variation ) {
    wc_delete_product_transients($variation->get_id());
     $variation_id = $variation->get_id();
     $variable_product1= new WC_Product_Variation($variation_id);
     if(is_user_logged_in()){
        $regular_price = $variable_product1 ->regular_price;
             $data['price_html'] = woocommerce_price($regular_price);
             return $data;
             }  else { 
              $sale_price = $variable_product1 ->sale_price;
         $data['price_html'] = woocommerce_price($sale_price);
         return $data;

        }

}

显示的价格有效......但是当我将任何产品添加到购物车时,它只保留购物车中的销售价格......

The displayed price works… But when I add to cart any product it remains only with the sale price in in cart…

感谢任何帮助

推荐答案

下面的代码将:

  • 仅在任何地方为未登录的用户启用正常价格
  • 仅在所有地方为登录用户启用促销价
  • 隐藏促销标志
  • 删除销售价格范围

代码:

// Variable and simple product displayed prices (removing sale price range)
add_filter( 'woocommerce_get_price_html', 'custom_get_price_html', 20, 2 );
function custom_get_price_html( $price, $product ) {

    if( $product->is_type('variable') )
    {
        if( is_user_logged_in() ){
            $price_min  = wc_get_price_to_display( $product, array( 'price' => $product->get_variation_sale_price('min') ) );
            $price_max  = wc_get_price_to_display( $product, array( 'price' => $product->get_variation_sale_price('max') ) );
        } else {
            $price_min  = wc_get_price_to_display( $product, array( 'price' => $product->get_variation_regular_price('min') ) );
            $price_max  = wc_get_price_to_display( $product, array( 'price' => $product->get_variation_regular_price('max') ) );
        }

        if( $price_min != $price_max ){
            if( $price_min == 0 && $price_max > 0 )
                $price = wc_price( $price_max );
            elseif( $price_min > 0 && $price_max == 0 )
                $price = wc_price( $price_min );
            else
                $price = wc_format_price_range( $price_min, $price_max );
        } else {
            if( $price_min > 0 )
                $price = wc_price( $price_min);
        }
    }
    elseif( $product->is_type('simple') )
    {
        if( is_user_logged_in() )
            $active_price = wc_get_price_to_display( $product, array( 'price' => $product->get_sale_price() ) );
        else
            $active_price = wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price() ) );

        if( $active_price > 0 )
            $price = wc_price($active_price);
    }
    return $price;
}

// Product Variation displayed prices
add_filter( 'woocommerce_available_variation', 'custom_variation_price', 10, 3);
function custom_variation_price( $data, $product, $variation ) {

    $reg_price = wc_get_price_to_display( $variation, array( 'price' => $variation->get_regular_price() ) );
    $sale_price = wc_get_price_to_display( $variation, array( 'price' => $variation->get_sale_price() ) );

    if( is_user_logged_in() )
        $data['price_html'] = wc_price( $sale_price );
    else
        $data['price_html'] = wc_price( $reg_price );

    return $data;
}

// Set the correct prices in cart
add_action( 'woocommerce_before_calculate_totals', 'set_item_cart_prices', 20, 1 );
function set_item_cart_prices( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item ){
        if( ! is_user_logged_in() ){
            $cart_item['data']->set_price( $cart_item['data']->get_regular_price() );
        }
    }
}

// Remove sale badge
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_show_product_loop_sale_flash', 10 );
remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10 );

代码位于活动子主题(或活动主题)的 function.php 文件中.经测试有效.

Code goes in function.php file of your active child theme (or active theme). Tested and works.

更新:为在 WooCommerce 中显示自定义产品价格的功能启用后缀

这篇关于在 Woocommerce 中为登录用户启用销售价格,为未登录用户启用正常价格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆