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

Калькулятор товара в интерфейсе интернет магазина

Image CMS

Grollem

Опытный
#21
Вот мое решение:
1. Ставим ACF. Товарам добавляем чек бокс товар с калькулятором.
2. В шаблоне отвечающим за вывод товара single-product.php пишем условие если есть галочка
то:
- показываем калькулятор и скрываем цену и кнопку добавить в корзину.
- добавляем код вашего калькулятора например на JS или шорткод WPCC
создаем форму
- считаем свой алгоритм как захотим результат записываем в скрытое поле.
- так же записываем id текущего товара в скрытое поле.
оправляем форму
и выполняем следующий код.
add_product_to_cart() - при выполнении добавляет товар с id в корзину.
add_custom_price() - меняет цену товара на выбранную
Код:
if (isset($_POST['my_calc_form'])) {//Если форма была отправлена

add_action( 'init', 'add_product_to_cart' );
function add_product_to_cart() {
    if ( ! is_admin() ) {
        global $woocommerce;
        $product_id = 21; // здесь переменная из скрытого поля с id товара
        $found = false;
        //check if product already in cart
        if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
            foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
                $_product = $values['data'];
                if ( $_product->id == $product_id )
                    $found = true;
            }
            // if product not found, add it
            if ( ! $found )
                $woocommerce->cart->add_to_cart( $product_id );
        } else {
            // if no products in cart, add it
            $woocommerce->cart->add_to_cart( $product_id );
        }
    }
}
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );


function add_custom_price( $cart_object ) {
    $custom_price = 10; // тут цена которую вы насчитали в калькуляторе
    $target_product_id = 21; // здесь переменная из скрытого поля с id товара
    foreach ( $cart_object->cart_contents as $key => $value ) {
        if ( $value['product_id'] == $target_product_id ) {
            $value['data']->price = $custom_price;
        }
        /*
        // If your target product is a variation
        if ( $value['variation_id'] == $target_product_id ) {
            $value['data']->price = $custom_price;
        }
        */
    }
}
}
 
Последнее редактирование:

pagemaster

Форумчанин
#24
function add_custom_price( $cart_object ) {
$custom_price = 10; // тут цена которую вы насчитали в калькуляторе
$target_product_id = 21; // здесь переменная из скрытого поля с id товара
foreach ( $cart_object->cart_contents as $key => $value ) {
if ( $value['product_id'] == $target_product_id ) {
$value['data']->price = $custom_price;
}
}
}
[/CODE]
Подскажите, пожалуйста, как можно перезаписать само значение regular_price на свое значение, можно даже на уровне БД. Мой пост

Цену я уже знаю как вытягивать и умножать на курс, осталось только записать значение в "Базовая цена"
 
Последнее редактирование:

pagemaster

Форумчанин
#27
Может так как продукт - это таксономия (а не пост), то нужно использовать что то другое?
 

searchingman

Гуру
Местный
#28
Может так как продукт - это таксономия (а не пост), то нужно использовать что то другое?
Вы откуда сделали такое заключение, что товар - это таксономия?
Расшифровка из оф. документации.
  • Товар - пост с типом 'product'.
  • Категория товаров - таксономия 'product_cat'.
  • Метки товара - таксономия 'product_tag'.
  • Вариация товара - пост с типом 'product_variation'.
  • Заказ - пост с типом 'shop_order'.
  • Статусы товара - таксономия 'shop_order_status'.
  • Купоны - пост с типом 'shop_coupon'.
 

pagemaster

Форумчанин
#29
Вы откуда сделали такое заключение, что товар - это таксономия?
Расшифровка из оф. документации.
  • Товар - пост с типом 'product'.
  • Категория товаров - таксономия 'product_cat'.
  • Метки товара - таксономия 'product_tag'.
  • Вариация товара - пост с типом 'product_variation'.
  • Заказ - пост с типом 'shop_order'.
  • Статусы товара - таксономия 'shop_order_status'.
  • Купоны - пост с типом 'shop_coupon'.
значит ошибся, я просто знал что категории woocommerce это таксономии... подумал по аналогии что и товары также.
 

zix

Новичок
#31
Мой вариант расчета цены с использованием Measurment Price Calculator + Gravity Forms addon for WooCommerce.
Общая стоимость правильно передайтся корзину, а вот на странице товара отображается цена за единицу измерения:

Подскажите пожалуйста, как можно передать рассчитанное значение в общую стоимость?
 

pagemaster

Форумчанин
#32
Подскажите пожалуйста, как можно передать рассчитанное значение в общую стоимость?
попробуйте перезаписать $regular_price на свое значение, как то так:
PHP:
update_post_meta( $post->ID, '_regular_price', $custom_price );
update_post_meta( $post->ID, '_price', $custom_price );
и разве все это (что вы делали кучей плагинов) нельзя было сделать через вариативный товар?
 

zix

Новичок
#33
спасибо, сейчас буду пробовать
и разве все это (что вы делали кучей плагинов) нельзя было сделать через вариативный товар?
У меня как раз вариативный товар, стоимость рассчитывается за квадратный сантиметр плагином Measurment Price Calculator, а следом идут дополнительные опции.
Может есть еще какие-то способы рассчета для такого товара, я не нашел пока.

За вывод цены отвечает данная стока
Код:
$gform_final_total = $gforms_discount_price ? $gforms_discount_price : $price + $gform_total;
Переменной $price нужно присвоить значение, которое выдает функция вывода цены из плагина Measurment Price Calculator

Подскажите пожалуйста как это сделать?
 
Последнее редактирование:

mazoga

Новичок
#34
А у вас расчет идет с помощью связки ajax + javascript + php? Просто, чтобы считало цену и переводило, нужно реализовывать такое через ajax, по другому никак. Просто по сути вы как бы заганяете значения в поля, они передадутся потом с помощью php при нажатии на кнопку "Добавить в корзину", но не обновляются, так как информация в статическом виде. Реализуйте с помощью ajax и тогда результат в фоновом режиме будет обновляться при изменении значений.
Почитайте эту статью: Про Ajax. Может найдете необходимое вам решение.
 
Последнее редактирование:

zix

Новичок
#35
Просто по сути вы как бы заганяете значения в поля, они передадутся потом с помощью php при нажатии на кнопку "Добавить в корзину", но не обновляются, так как информация в статическом виде
Вы правы, спасибо за ссылку - с ajax я к сожалению не имел дела, будет трудно сходу что-то реализовать, скорее всего постараюсь найти обходное решение.
 

rudnin

Новичок
#38
подскажите, с помощью какого плагина возможно реализовать - http://enjoyflowers.ru/tyulpany , (карточка товара подгружается справа). То есть при клике на + - меняется количество цветка, и соответственно его стоимость.
 

rudnin

Новичок
#39
подскажите, с помощью какого плагина возможно реализовать - http://enjoyflowers.ru/tyulpany , (карточка товара подгружается справа). То есть при клике на + - меняется количество цветка, и соответственно его стоимость.
пробую реализовать подобное с помощью этого кода
Код:
<?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>',__('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 = '<?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( currency + product_total.toFixed(2));
                        $('#cart_total_price .price').html( currency + cart_total.toFixed(2));
                    }
                    $('#product_total_price,#cart_total_price').toggle(!(this.value <= 1));
                });
            });
        </script>
    <?php
}
?>
взяятого на этой странице - http://reigelgallarde.me/programmin...elected-quantity-on-woocommecre-product-page/
уважаемые гуру, помогите привести этот код, в код, который в последствии не выпадет после обновлений WC и WP, вставляю этот код в functoins.php, заранее спасибо
 

tuxfighter

Гуру
Местный
#40
уважаемые гуру, помогите привести этот код, в код, который в последствии не выпадет после обновлений WC и WP, вставляю этот код в functoins.php, заранее спасибо
уж сколько раз твердили миру..... про дочерние темы...
 
Сверху Снизу