@Bodrosh

Как изменить вычисление цены в корзине woocommerce?

Здравствуйте, ув. разработчики. Пожалуйста, подскажите как быть:
У товара указана цена за 1 м (например, 15,9 руб.).
На странице товара автоматически вычисляется цена за 1 шт. (например, 193,8 руб.)
При заказе в корзине (и расчете общей цены) конечно берется цена товара, т.е. 15,9 руб, а нужно чтобы за единицу товара использовалась вычисленная цена (193,8).

На скриншоте в блоках 1, 2, 3 все отображается верно (чисто внешний вид), но в заказе (4) используются цены товара (за кг), а нужно за шт.

Подскажите, пожалуйста, как быть, куда копать? Для отображения немного изменял функции, но это отображение
class-wc-cart.php
public function get_product_subtotal( $product, $quantity ) {
    $price   = $product->get_price();
    $taxable = $product->is_taxable();
    if(isset($product->length) && isset($product->attributes['pa_porezka'])) {
      $row_price = $price * $quantity*$product->length*$product->attributes['pa_porezka'];
      $product_subtotal = wc_price( $row_price );
    }

По идее нужно изменить функцию, которая сохраняет значения в total и subtotal? (лезть в set_prop, legacy_set_total или куда-то еще?)
Как я понял, Информация о заказе хранится так: в total - общая сумма заказа + доставка, shipping_total - цена доставки
В subtotal - цена за 1 товар (* кол-во), или я не прав? Спасибо.
c367132fc408475eb2b63b9f5de25aa6.jpg
  • Вопрос задан
  • 1988 просмотров
Пригласить эксперта
Ответы на вопрос 1
maxxannik
@maxxannik
Сайты на WordPress + Интернет магазины WooCommerce
Мне кажется вы где то переусложнили и недодумали.

В корзине и далее в заказ попадают order_item. Это почти тоже самое что и продукт, но не продукт.
Продукт есть лишь исходный набор данных для order_item.
А значит в order_item вы вольны писать все что угодно. Любую цену, заголовок или описание.
Главное найти нужные хуки в механизме формирования корзины и ордера.

Как при этом хранить набор цен и единиц внутри продукта - особо не важно. Можно в метаполях, можно в комментах или в отдельных таблицах.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы