• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Обновления цены от выбора кол-ва единиц, почти работает

Image CMS

elliot5

Новичок
#1
Здравствуйте! Столкнулся с проблемой.
Есть скрипт который обновляет цену в карточке товара в зависимости от того, сколько покупатель выбрал единиц товара.
Если покупатель нажал на "Плюс" (2 единицы) то цена удвоилась и т.д.
Все хорошо работает, цена подсчитывается, но вот проблема. Вариативные товары работают некорректно.

Если вариативный товар указан с двумя ценами, например 100 и 200.
Покупатель выбирает второй товар(вариация) за 200 и выбирает 3 единицы, вместо того чтобы цена стала 600 она становиться равна 300, так как цена по умолчанию 100 но как бы должна быть равна 600.
Подправьте пожалуйста скрипт, или подскажите название плагина, и скрипт доделать не могу и плагин найти тоже не получается...
Заранее огромное спасибо!

Вот скрипт
PHP:
add_action( 'woocommerce_single_product_summary', 'woocommerce_total_product_price', 31 );
function woocommerce_total_product_price() {
    global $woocommerce, $product;
    // let's setup our divs
    //echo sprintf('<div id="product_total_price" style="margin-bottom:20px;display:none">%s %s</div>',__('Product Total:','woocommerce'),'<span class="price">'.$product->get_price().'</span>');
    //echo sprintf('<div id="cart_total_price" style="margin-bottom:20px;display:none">%s %s</div>',__('Cart Total:','woocommerce'),'<span class="price">'.$product->get_price().'</span>');
    ?>
        <script>
            jQuery(function($){
                var price = <?php echo $product->get_price(); ?>,
                    current_cart_total = <?php echo $woocommerce->cart->cart_contents_total; ?>,
                    currency = '<span style="font-weight:normal"><?php echo get_woocommerce_currency_symbol(); ?></span>',
                    t_sep = '<?php echo wc_get_price_thousand_separator(); ?>',
                    d_sep = '<?php echo wc_get_price_decimal_separator(); ?>',
                    d_num = <?php echo wc_get_price_decimals(); ?>;

                $('[name=quantity]').change(function(){
                    if (!(this.value < 1)) {
                        var product_total = parseFloat(price * this.value),
                        cart_total = parseFloat(product_total + current_cart_total);

                        $('.cart .price .woocommerce-Price-amount').html( product_total.toFixed(d_num).replace( '.', d_sep ).replace( /\B(?=(\d{3})+(?!\d))/g, '$&' + t_sep ) + ' ' + currency );
                       // $('.price .woocommerce-Price-amount').html( cart_total.toFixed(d_num).replace( '.', d_sep ).replace( /\B(?=(\d{3})+(?!\d))/g, '$&' + t_sep ) + ' ' + currency );
                    }
                    $('.price,.woocommerce-Price-amount').toggle(!(this.value <= 1));

                });
               
            });
        </script>
    <?php
}
Ну или хотя бы отключить работу этого скрипта в вариативных товарах...
 
Последнее редактирование:

ADv

Гуру
Местный
#2
Здравствуйте! Столкнулся с проблемой.
Есть скрипт который обновляет цену в карточке товара в зависимости от того, сколько покупатель выбрал единиц товара.
Если покупатель нажал на "Плюс" (2 единицы) то цена удвоилась и т.д.
Все хорошо работает, цена подсчитывается, но вот проблема. Вариативные товары работают некорректно.

Если вариативный товар указан с двумя ценами, например 100 и 200.
Покупатель выбирает второй товар(вариация) за 200 и выбирает 3 единицы, вместо того чтобы цена стала 600 она становиться равна 300, так как цена по умолчанию 100 но как бы должна быть равна 600.
Подправьте пожалуйста скрипт, или подскажите название плагина, и скрипт доделать не могу и плагин найти тоже не получается...
Заранее огромное спасибо!

Вот скрипт
PHP:
add_action( 'woocommerce_single_product_summary', 'woocommerce_total_product_price', 31 );
function woocommerce_total_product_price() {
    global $woocommerce, $product;
    // let's setup our divs
    //echo sprintf('<div id="product_total_price" style="margin-bottom:20px;display:none">%s %s</div>',__('Product Total:','woocommerce'),'<span class="price">'.$product->get_price().'</span>');
    //echo sprintf('<div id="cart_total_price" style="margin-bottom:20px;display:none">%s %s</div>',__('Cart Total:','woocommerce'),'<span class="price">'.$product->get_price().'</span>');
    ?>
        <script>
            jQuery(function($){
                var price = <?php echo $product->get_price(); ?>,
                    current_cart_total = <?php echo $woocommerce->cart->cart_contents_total; ?>,
                    currency = '<span style="font-weight:normal"><?php echo get_woocommerce_currency_symbol(); ?></span>',
                    t_sep = '<?php echo wc_get_price_thousand_separator(); ?>',
                    d_sep = '<?php echo wc_get_price_decimal_separator(); ?>',
                    d_num = <?php echo wc_get_price_decimals(); ?>;

                $('[name=quantity]').change(function(){
                    if (!(this.value < 1)) {
                        var product_total = parseFloat(price * this.value),
                        cart_total = parseFloat(product_total + current_cart_total);

                        $('.cart .price .woocommerce-Price-amount').html( product_total.toFixed(d_num).replace( '.', d_sep ).replace( /\B(?=(\d{3})+(?!\d))/g, '$&' + t_sep ) + ' ' + currency );
                       // $('.price .woocommerce-Price-amount').html( cart_total.toFixed(d_num).replace( '.', d_sep ).replace( /\B(?=(\d{3})+(?!\d))/g, '$&' + t_sep ) + ' ' + currency );
                    }
                    $('.price,.woocommerce-Price-amount').toggle(!(this.value <= 1));

                });
              
            });
        </script>
    <?php
}
Ну или хотя бы отключить работу этого скрипта в вариативных товарах...
Посмотрите в сторону
PHP:
if( $product->is_type( 'variable' ) ){
}
 

elliot5

Новичок
#5
я видимо что-то не понимаю, но это нормальное поведение ВУУ без всяких скриптов или плагинов
Да, но в карточке товара при нажатии на "Плюс" (2 единицы) цена отображается за одну единицу, а с этим скриптом она умножается, и клиенту не нужно будет умножать в уме, он сразу увидит сколько ему нужно заплатить на две и более единиц. Вот я и использую этот скрипт, которые некорректно работает в вариативных товарах...
 
Сверху Снизу