it-roy-ru.com

Замените диапазон переменной цены выбранной ценой изменения в WooCommerce 3

На WooCommerce я хотел бы изменить макет страницы с отдельным продуктом. Потому что, когда у вас есть переменный продукт, вы получаете эту ярость проводной цены (ниже названия продукта) на странице Variable Product, и она также отображается на странице магазина. 

Для меня стандартный способ - показать самую низкую цену товара в магазине, а также страницу товара и изменить эту цену в соответствии с выбором переменных пользователем. Я не могу поверить, почему.

Я могу удалить диапазон цен и показать самую низкую цену, используя этот фрагмент кода.

https://businessbloomer.com/disable-variable-product-price-range-woocommerce/

Но опять же, эта самая низкая цена не меняется в зависимости от выбранных переменных. В изменяемой структуре продукта снова есть две цены. Это мой текущий переменный макет страницы продукта 

http://www.preorders.lk/product/beats-solo3-wireless-on-ear-headphones/

Итак, кто-нибудь может помочь удалить диапазон цен со страницы с изменяемым товаром и показать только одну самую низкую цену (под названием товара) товара по умолчанию. Так что цена должна меняться в зависимости от переменных, которые имеют этот продукт. И эта самая низкая цена должна быть показана на странице магазина. 

Надеюсь, это понятно. Пожалуйста, дайте мне знать, если что-то неясно. Пожалуйста, обратитесь к приложенному изображению для более подробной информации.

Благодарю.

 Screenshot

8
Shashika Nanayakkara

Новое улучшенное обновление в следующей теме (Июнь 2018):

Заменить диапазон цен, отображая измененную цену по умолчанию в Woocommerce 3


Update (декабрь 2017):, чтобы избежать, Проблемы с не переменными продуктами в некоторых темах и ошибка доступности повторения в некоторых темах

Примечание: Некоторые плагины, такие как German Market или некоторые темы , не будут работать с этим кодом, так как они вносят свои собственные изменения в хуки или в структуру html.

Это вполне возможно.

  1. Сначала мы удалим нежелательную цену.
  2. Вместо этого мы выводим переменную цену без ценового диапазона и показываем самую низкую цену.
  3. Мы делаем копию этой переменной цены в скрытом контейнере (который будет использоваться/считываться нашим скриптом jQuery)
  4. Затем мы скрываем контейнеры выбранной цены изменения (и наличие на складе) 
  5. С помощью нашего скрипта jQuery, когда мы получаем выбранную цену вариации, мы заменяем переменную цену (и отображаем наличие на складе). 
  6. Если клиент изменяет вариант, мы обновляем цену ... Если цена варианта не отображается в процессе этого изменения, отображается наша переменная цена.

Вот этот код:

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;

    // Main Price
    $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>';
    }

    ?>
    <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($) {
        $('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="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>';
}

Код помещается в любой php-файл вашей активной дочерней темы (или темы) или также в любой php-файл плагина.

Этот код протестирован и работает на WooCommerce 3.2.x (также должен работать на WooCommerce 2.6.x)

При желании вы можете переместить CSS (<style></style>) в файл styles.css вашей активной дочерней темы (или активной темы), а затем удалить его из этой функции…


Связанные с:

12
LoicTheAztec

Я знаю, что здесь я воскрешаю старый поток, но кое-что, что я обнаружил при использовании этого кода, это то, что вы должны знать, что с этим кодом вы рискуете помешать отображению единой, не переменной цены на некоторые темы как:

remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );

активируется на всех страницах продукта, независимо от того, является ли он продуктом переменной или нет.

Вы можете использовать приведенную ниже версию, которая просто проверяет, является ли текущий продукт переменным или нет, перед запуском остальной части кода.

    add_action( 'woocommerce_before_single_product', 'check_if_variable_first' );
function check_if_variable_first(){
    if ( is_product() ) {
        global $post;
        $product = wc_get_product( $post->ID );
        if ( $product->is_type( 'variable' ) ) {
            // removing the price of variable products
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );

// Change location of
add_action( 'woocommerce_single_product_summary', 'custom_wc_template_single_price', 10 );
function custom_wc_template_single_price(){
    global $product;

// Variable product only
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( __( '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>';
    }

    ?>
    <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($) {
        $('select').blur( function(){
            if( '' != $('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;
}

        }
    }
}
1
Andrew Sumner