Как сделать формирование цены сборного товара в woocomerce?
Добрый день.
По-любому кто-то сталкивался с данным вопросом , и я надеюсь был бы рад поделиться ответом на этот вопрос :)
Есть товар в виде цветочного букета в который входят условно розы,тюльпаны, гвоздики.
Как можно реализовать чтобы при изменении цены на один из цветков цена на букет тоже менялась.
Можно конечно посчитать всё по отдельности и сформировать цену букета , но хотелось бы упростить что бы было например так : Условно 1с в которой есть база цветов с ценой за единицу и есть карточка товара букета в котором 11 роз, 4 гвоздики и 6 тюльпанов. Меняя цену в условно 1с на каждый из цветков , формируется новая цена букета на сайте в карточке букета упомянутого выше.
Буду благодарен за ваши ответы так как не совсем понимаю как это реализовать можно.
Всем хорошего дня :)
Дополнительно:
Ответы:
Делаете интеграцию с 1С. Синхронизируете работу с базой данных. На выходе получаете возможность автоматического перерасчёта цены за букет, при изменение цены в БД.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Сборный товар в WooCommerce можно сделать разными способами, и выбор зависит от логики. Если пользователь выбирает комплектующие, а цена складывается из них, лучше смотреть в сторону Composite Products, Product Bundles или своих полей с пересчётом цены на сервере. Только JavaScript-пересчёт на фронте использовать нельзя: цену можно подменить.
Минимальная схема для своих полей: на странице товара показываете опции, сохраняете выбор в cart item data, затем меняете цену в корзине через
woocommerce_before_calculate_totals.add_filter('woocommerce_add_cart_item_data', function ($cart_item_data, $product_id) { if (isset($_POST['extra_price'])) { $cart_item_data['extra_price'] = (float) $_POST['extra_price']; } return $cart_item_data; }, 10, 2); add_action('woocommerce_before_calculate_totals', function ($cart) { if (is_admin() && ! defined('DOING_AJAX')) { return; } foreach ($cart->get_cart() as $cart_item) { if (! empty($cart_item['extra_price'])) { $base_price = (float) $cart_item['data']->get_regular_price(); $cart_item['data']->set_price($base_price + (float) $cart_item['extra_price']); } } });
Но это только скелет. В реальном магазине нужно валидировать выбранные опции, не принимать цену напрямую из формы, а считать её по ID опций на сервере. Иначе пользователь сможет отправить
extra_price=0или отрицательное значение.