Использование этого кода хорошо работает для отображения продажных цен для зарегистрированных пользователей. Я использую его как простой способ предлагать оптовые продажи, так как мои товары не продаются go в общем издании c. Тем не менее, у меня есть опция дополнительного продукта, которая добавляет сумму $ к товару в корзине с отображением позиций. Этот код будет привязывать цену к зарегистрированной цене продажи в корзине, но не к обычной цене выхода из системы. Я предполагаю, что строка «else» в «l oop through cart items» может сработать, но без удачи. Любая помощь с благодарностью!
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;
}
// 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 );