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

Решено Изменение цены в зависимости от количества

a.kalugin

Форумчанин
#1
Добрый день! Подскажите плагин, который будет пересчитывать цену при изменении кол-ва товаров на странице товара через ajax. Нашел пока только плагин final price, но он платный, и дорогой за такой простой функционал (колво умножить на цену равно сумма)
 

tuxfighter

Гуру
Местный
#2
PHP:
// we are going to hook this on priority 31, so that it would display below add to cart button.
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>',__('Итого:','woocommerce'),'<span class="price">'.$product->get_price().'</span>');
    echo sprintf('<div id="cart_total_price" style="margin-bottom:20px;display:none">%s %s</div>',__('Итого в корзине:','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 = '<?php echo get_woocommerce_currency_symbol(); ?>';

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

                        $('#product_total_price .price').html( product_total.toFixed(2) +currency);
                        $('#cart_total_price .price').html( cart_total.toFixed(2) +currency);
                    }
                    $('#product_total_price,#cart_total_price').toggle(!(this.value <= 1));

                });
            });
        </script>
    <?php
}
Не работает, если предусмотрена скидка за количество

UPD: в вариативных товарах, кстати, тоже не работает
 
Последнее редактирование:

a.kalugin

Форумчанин
#3
Спасибо, хоть это и немного не то что искал, но я думаю подойдет даже лучше (сумма в корзине нужна). Единственный вопрос - можно как то сделать, чтобы он пересчитывал сумму после введения числа с клавиатуры? я ввожу например 500 штук, пока курсор стоит в поле ввода ничего не меняется, стоит щелкнуть в другое место появляется сумма. Я просто боюсь что покупатель нажмет вместо этого Enter и добавит возможно не то кол-во в корзину, и будет материться))) а так бы сразу ввел-сразу увидел
 

a.kalugin

Форумчанин
#5
у меня стоит этот плагин. Дело в том, что специфика товара такова, что могут купить как 1, 3 или 5 штук (нажмут плюсик и прибавят) либо сразу 200-300 или даже 500, сделать шаг например в 100 или даже 50 будет нельзя - не известно какой объем покупатель выберет. Так же есть кабель, там вообще могут купить как 20 метров так и 20 километров (20 000 вводить через плюсик думаю никто не станет)
 

a.kalugin

Форумчанин
#8
Я забыл совсем, у меня вариативные товары тоже есть))) Причем я на них акцент делаю, дабы не плодить в каталоге ассортимент. Но смотрел демо этого плагина Final Price, там и с вариативными товарами работает тоже.
 

a.kalugin

Форумчанин
#10
Безусловно это очень хороший хук, я думаю он многим пригодится. Ну и может кто то сможет реализовать работу на вариативных товарах
 

a.kalugin

Форумчанин
#11
А можно как то в этом хуке сделать проверку, что если товар вариативный, то вообще ничего не выводить, дабы не вводить в заблуждение?
и если цена стоит 0 то тоже не выводить (у меня когда цена стоит 0 написано"Цена: по запросу" и когда кол-во прибавляю красуется надпись "Итого: 0" :D )
 

a.kalugin

Форумчанин
#12
Вот код, который вместо нулевой цены или при ее отсутствии, выводит "цена по запросу"
посмотрите пожалуйста, кто шарит, как его можно срастить с вышенаписанным хуком, дабы он делал проверку на цена = 0 и не выводил ничего при изменении кол-ва?
PHP:
function my_price_replace($price, $product) {
if ($product->get_price() == 0 ) return __( 'по запросу' );
return $price;
}
add_filter( 'woocommerce_get_price_html', 'my_price_replace', 1, 2 );
 

a.kalugin

Форумчанин
#13
Ну что, никто не знает? я уже пробовал сам
PHP:
if ($product->get_price() == 0 ) {
    $('#product_total_price .price').html( null);
    }
естественно нихрена не получилось. Перестало показывать всегда )
 
#14
Я забыл совсем, у меня вариативные товары тоже есть))) Причем я на них акцент делаю, дабы не плодить в каталоге ассортимент. Но смотрел демо этого плагина Final Price, там и с вариативными товарами работает тоже.
Структура решает в продвижении. Некоторые студии заморачиваются и делают для этого динамические страницы за счет фильтрации - пример можно увидеть в данном видео -
 
#15
Ну что, никто не знает? я уже пробовал сам
PHP:
if ($product->get_price() == 0 ) {
    $('#product_total_price .price').html( null);
    }
естественно нихрена не получилось. Перестало показывать всегда )
А вы куда этот код ставили?

Может от обратного, чтобы не мудрить?
JavaScript:
if (price > 0 ) {
    $('[name=quantity]').change(function(){

        if (!(this.value < 1)) {
            var product_total = parseFloat(price * this.value),
                cart_total = parseFloat(product_total + current_cart_total);

            $('#product_total_price .price').html( product_total.toFixed(2) +currency);
            $('#cart_total_price .price').html( cart_total.toFixed(2) +currency);
        }
        $('#product_total_price,#cart_total_price').toggle(!(this.value <= 1));

    });
} else {
    $('[name=quantity]').attr("disabled", true);
}
Это измененный код выше, который вам предложили. Отключаем само поле ввода при нулевой цене. Можно и вовсе скрыть.

JavaScript:
    $('[name=quantity]').css('display', 'none');
А не пробовали вместо
JavaScript:
 $('[name=quantity]').change(function(){
использовать
JavaScript:
 $('[name=quantity]').on('input',function(){
 
Последнее редактирование:

a.kalugin

Форумчанин
#16
@CTPAHnick, спасибо за помощь, но у меня не получилось правильно срастить это. Получился у меня такой код:
JavaScript:
        <script>
            jQuery(function($){
                var price = <?php echo $product->get_price(); ?>,
                    current_cart_total = <?php echo $woocommerce->cart->cart_contents_total; ?>,
                    currency = '<?php echo get_woocommerce_currency_symbol(); ?>';
               
            if (price > 0 ) {
                $('[name=quantity]').change(function(){
                    if (!(this.value < 1)) {
                        var product_total = parseFloat(price * this.value),
                        cart_total = parseFloat(product_total + current_cart_total);

                        $('#product_total_price .price').html( product_total.toFixed(2) +currency);
                        $('#cart_total_price .price').html( cart_total.toFixed(2) +currency);
                    }
                    $('#product_total_price,#cart_total_price').toggle(!(this.value <= 1));
                    }
            else {
                 $('[name=quantity]').attr("disabled", true);
                 }
                });
        </script>
но при этом показ суммы не выводится вообще всегда
пробовал заменять
JavaScript:
$('[name=quantity]').change(function(){
на
JavaScript:
 $('[name=quantity]').on('input',function(){
получаем такой же эффект

ВОТ ссылка на товар с нулевой ценой, ВОТ на простой товар.

может можно как нибудь отключить так же это поле для ВАРИАТИВНЫХ товаров? ибо сумма считается по самой первой вариации, что то большее сделать (динамические страницы, фильтрации) я не смогу, я программировании 0, знаю только самые базовые понятия. И пока интернет магазин не запущен и не приносит прибыль, за платной помощью обратиться тоже не могу.
 
Последнее редактирование:
Сверху Снизу