Как добавить дополнительные услуги в корзину WooCommerce?
К каждому продукту индивидуально прилагаются дополнительные услуги, каким образом можно сделать так, чтобы при нажатии на чекбокс услуги она добавлялась в корзину вместе с товаром?
Дополнительно:
Ответы:
Самый простой вариант на мой взгляд, это услугу добавить как товар, и услуготовар добавить как вариацию к товару:) При клике на вариацию, пользователь ознакомится с услугой и при желании кинет и ее в корзину.
Также в корзине можно выводить доп товары. Типа cross-sele вроде
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Самый надёжный вариант — сделать дополнительные услуги отдельными товарами WooCommerce и добавлять их в корзину вместе с основным товаром. Так услуга будет видна в заказе, у неё будет своя цена, налоги, статус и аналитика. Если услуги индивидуальны для каждого товара, можно связать их через ACF-поле или upsell/cross-sell.
Если услуга должна быть просто доплатой внутри основного товара, можно добавить checkbox на странице товара и сохранить выбор в cart item data:
add_action('woocommerce_before_add_to_cart_button', function () { echo '<p><label><input type="checkbox" name="extra_service" value="1"> Добавить услугу настройки (+500 руб.)</label></p>'; }); add_filter('woocommerce_add_cart_item_data', function ($cart_item_data, $product_id) { if (!empty($_POST['extra_service'])) { $cart_item_data['extra_service'] = 1; $cart_item_data['unique_key'] = md5(microtime(true)); } return $cart_item_data; }, 10, 2); add_filter('woocommerce_get_item_data', function ($item_data, $cart_item) { if (!empty($cart_item['extra_service'])) { $item_data[] = [ 'name' => 'Дополнительная услуга', 'value' => 'Настройка', ]; } return $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_service'])) { $product = $cart_item['data']; $product->set_price((float) $product->get_price() + 500); } } });
Для нескольких услуг лучше не хардкодить цену в коде, а хранить список услуг в настройках товара и валидировать выбранные ID. Если нужна полноценная коммерческая логика, быстрее и безопаснее взять готовый плагин типа Product Add-Ons, Composite Products или связку с дополнительными товарами.