Rumah > pembangunan bahagian belakang > tutorial php > Bagaimana untuk Menggantikan Julat Harga Boleh Ubah dengan Harga Variasi Terpilih dalam WooCommerce 3?

Bagaimana untuk Menggantikan Julat Harga Boleh Ubah dengan Harga Variasi Terpilih dalam WooCommerce 3?

DDD
Lepaskan: 2024-11-11 15:17:03
asal
863 orang telah melayarinya

How to Replace the Variable Price Range with a Chosen Variation Price in WooCommerce 3?

Ganti Julat Harga Berubah dengan Harga Variasi Terpilih dalam WooCommerce 3

Senario: Dalam WooCommerce, halaman produk berubah-ubah biasanya memaparkan harga julat berdasarkan variasi yang dipilih. Tingkah laku ini mungkin tidak diingini untuk sesetengah pengguna yang memilih harga lalai tunggal yang melaraskan secara dinamik berdasarkan variasi yang dipilih.

Cabaran: Matlamatnya adalah untuk mengalih keluar julat harga berubah dan menggantikannya dengan harga yang tersedia paling rendah, yang akan dikemas kini apabila variasi dipilih. Ini terpakai pada kedua-dua halaman produk dan halaman kedai.

Penyelesaian:

Langkah 1: Alih Keluar Julat Harga

remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
Salin selepas log masuk

Langkah 2 : Memperkenalkan Harga Variasi

add_action( 'woocommerce_single_product_summary', 'replace_variation_single_price', 10 );
Salin selepas log masuk

Langkah 3: Dapatkan Harga Variasi dan Paparan

function replace_variation_single_price(){
    global $product;

    // Get prices
    $prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
    $price = $prices[0] !== $prices[1] ? sprintf( __( 'From: %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( __( 'From: %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>';
    }

    echo '<p class=&quot;price&quot;>'.$price.'</p>';
}
Salin selepas log masuk

Langkah 4: CSS dan JavaScript untuk Kemas Kini Dinamik

// CSS
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;
}

// JavaScript
jQuery(document).ready(function($) {
    $('select').blur( function(){
        if( '' != $('input.variation_id').val() ){
            if($('p.availability'))
                $('p.availability').remove();
            $('p.price').html($('div.woocommerce-variation-price > span.price').html()).append('<p class=&quot;availability&quot;>'+$('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');
        }
    });
});
Salin selepas log masuk

Lengkap Kod:

add_action( 'woocommerce_before_single_product', 'move_variations_single_price', 1 );
function move_variations_single_price(){
    global $product, $post;

    if ( $product->is_type( 'variable' ) ) {
        // Removing the variations price for variable products
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );

        // Change location and inserting back the variations price
        add_action( 'woocommerce_single_product_summary', 'replace_variation_single_price', 10 );
    }
}

function replace_variation_single_price(){
    global $product;

    // Get prices
    $prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
    $price = $prices[0] !== $prices[1] ? sprintf( __( 'From: %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( __( 'From: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );

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

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

    // CSS
    echo '<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>';

    // JavaScript
    echo '<script>
    jQuery(document).ready(function($) {
        $('select').blur( function(){
            if( '' != $('input.variation_id').val() ){
                if($('p.availability'))
                    $('p.availability').remove();
                $('p.price').html($('div.woocommerce-variation-price > span.price').html()).append('<p class=&quot;availability&quot;>'+$('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>';
}
Salin selepas log masuk

Kod yang dipertingkat ini akan menghalang isu dalam tema yang mempunyai struktur harga atau html sendiri. Ia juga akan berfungsi merentas produk bukan pembolehubah dalam pelbagai tema.

Atas ialah kandungan terperinci Bagaimana untuk Menggantikan Julat Harga Boleh Ubah dengan Harga Variasi Terpilih dalam WooCommerce 3?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan