Thay giá Variation vào Main Price

Chắc ở đây có nhiều bác gặp phải vấn đề này khi làm việc với Variartion Price vì cách hiển thị khó chịu của nó . Giải pháp ở đây là xóa giá chính của sản phẩm đi và thay thế phần giá sau khi hiển thị Variation vào đó.

Let’s do it :

  • Trước tiên chắc chắn phải remove phần main price bằng 1 đoạn code trong funtion rồi
add_action( 'woocommerce_before_single_product', 'check_variable' ); function check_variable(){ if ( is_product() ) { global $post; $product = wc_get_product( $post->ID ); if ( $product->is_type( 'variable' ) ) { remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );

  • Khoan save file nhé. Tạo thêm phần giá mới và move thằng Variation Price lên nào !
add_action( 'woocommerce_single_product_summary', 'custom_wc_template_single_price', 10 );
function custom_wc_template_single_price(){
    global $product;

if($product->is_type('variable')):

    // Main Price
    $prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
    $price = $prices[0] !== $prices[1] ? sprintf( __( '%1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );

    // Sale Price
    $prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) );
    sort( $prices );
    $saleprice = $prices[0] !== $prices[1] ? sprintf( __( '%1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );

    if ( $price !== $saleprice && $product->is_on_sale() ) {
        $price = '<del>' . $saleprice . $product->get_price_suffix() . '</del> <ins>' . $price . $product->get_price_suffix() . '</ins>';
    }

    ?>
    <style>
        div.woocommerce-variation-price,
        div.woocommerce-variation-availability,
        div.hidden-variable-price {
            height: 0px !important;
            overflow:hidden;
            position:relative;
            line-height: 0px !important;
            font-size: 0% !important;
        }
    </style>
    <script>
    jQuery(document).ready(function($) {
        $('input.variation_id').change( function(){
            //Correct bug, I put 0
            if( 0 != $('input.variation_id').val()){
                $('p.price').html($('div.woocommerce-variation-price > span.price').html()).append('<p class="availability">'+$('div.woocommerce-variation-availability').html()+'</p>');
                console.log($('input.variation_id').val());
            } else {
                $('p.price').html($('div.hidden-variable-price').html());
                if($('p.availability'))
                    $('p.availability').remove();
                console.log('NULL');
            }
        });
    });
    </script>
    <?php

    echo '<p class="price">'.$price.'</p>
    <div class="hidden-variable-price" >'.$price.'</div>';

endif;
}

        }
    }
}
add_filter( 'woocommerce_variation_is_active', 'desactivar_variaciones_sin_stock', 10, 2 );
function desactivar_variaciones_sin_stock( $is_active, $variation ) {
    if ( ! $variation->is_in_stock() ) return false;
    return $is_active;
}

Save và tận hưởng thôi các bác :slight_smile:

Cảm ơn ad đã chia sẻ. Mình đã thử áp dụng, nhưng có 1 vài vấn đề nhờ ad giúp đỡ:

  • Mình quản lý sản phẩm dựa trên số lượng thực tế. Với các SP Còn Hàng thì hiển thị rất tốt nhưng các SP Hết Hàng thì không thấy hiển thị thông báo Hết Hàng
  • Với các sản phẩm có biến thể nhưng đồng giá thì SP hết hàng không có thông báo và giá bị đổi về 0đ

Rất mong nhận được sự hỗ trợ của ad!
Cảm ơn bạn rất nhiều!