Я нашел код для добавления существующего продукта:
global $woocommerce; $woocommerce->cart->add_to_cart(16);
Но мне нужно добавить продукт, с ценой, определяемой двумя входами:
Я рассчитываю цену продукта по формуле age * quality.
Я знаю, что можно добавить продукт с вариациями, но так много возможных вариантов.
Можно ли динамически устанавливать цену продукта на основе расчетных значений пользовательских полей?
благодаря
Для позиций корзины (когда товар добавлен в корзину) можно настроить пользовательскую динамическую расчетную цену на основе значений пользовательских полей продукта.
1) Сначала мы добавляем на страницах одного продукта ваши 2 пользовательские поля (здесь нормальное text input
поле text input
поле select
) для "Age"
и "Quality"
:
// Add product custom fields inside the product add-to-cart form add_action('woocommerce_before_add_to_cart_button', 'custom_data_hidden_fields'); function custom_data_hidden_fields() { echo '<div class="imput_fields custom-imput-fields"> <label class="age_prod">Age: <br><input type="text" id="age_prod" name="age_prod" value="" /></label> <label class="quality_prod">Quality: <br> <select name="quality_prod" id="quality_prod"> <option value="1" selected="selected">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> </label> </div><br>'; }
2) Когда продукт является дополнением к корзине, мы сохраняем эти данные пользовательских сообщений после добавления товара:
// Save product custom fields values after submission into the cart item data add_action( 'woocommerce_add_cart_item_data', 'save_custom_data_hidden_fields', 10, 2 ); function save_custom_data_hidden_fields( $cart_item_data, $product_id ) { $data = array(); if( isset( $_REQUEST['age_prod'] ) ) { $cart_item_data['custom_data']['age'] = $_REQUEST['age_prod']; $data['age'] = $_REQUEST['age_prod']; } if( isset( $_REQUEST['quality_prod'] ) ) { $cart_item_data['custom_data']['quality'] = $_REQUEST['quality_prod']; $data['quality'] = $_REQUEST['quality_prod']; } // below statement make sure every add to cart action as unique line item $cart_item_data['custom_data']['unique_key'] = md5( microtime().rand() ); WC()->session->set( 'price_calculation', $data ); return $cart_item_data; }
3) Наконец, на этом последнем этапе вы получите все необходимые данные из корзины, чтобы сделать свой собственный расчет, и обновить цену для каждой позиции корзины динамически.
Я делаю временный расчет, просто чтобы показать, что код работает должным образом.
Здесь В приведенном ниже коде вам нужно будет настроить расчет до ваших потребностей (так как вы не задаете никаких подробностей об этом в своем вопросе).
Как вы увидите ниже, это простой шаг, чтобы сделать свой собственный расчет, поскольку вы получаете свои собственные значения полей для каждой позиции корзины, а также оригинальную цену продукта.
Вот код, который сделает этот динамический расчет на основе ваших собственных значений полей:
// Replace the item price by your custom calculation add_action( 'woocommerce_before_calculate_totals', 'add_custom_item_price', 10 ); function add_custom_item_price( $cart_object ) { foreach ( $cart_object->get_cart() as $item_values ) { ## Get cart item data $item_id = $item_values['data']->id; // Product ID $original_price = $item_values['data']->price; // Product original price ## Get your custom fields values $age = $item_values['custom_data']['age']; $quality = $item_values['custom_data']['quality']; // CALCULATION FOR EACH ITEM: ## Make HERE your own calculation to feet your needs <== <== <== <== $new_price = $original_price + ( ($age * 0.1) + $quality ); ## Set the new item price in cart $item_values['data']->price = $new_price; } }
Код идет в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.
Код проверен и работает отлично.
ОТОБРАЖЕНИЕ ТАМОЖЕННОЙ ЦЕНЫ НА ОДНО ИЗДЕЛИИ ПРОДУКЦИИ:
Прочтите это, чтобы понять, как переопределить шаблоны WoocCommerce через вашу тему
Для этого вам нужно будет отредактировать шаблон
single-product/price.php
.И вам нужно будет добавить javascript / jQuery на эту страницу одного продукта, чтобы обновить цену продукта, когда клиент установит некоторые значения в пользовательских полях вашего продукта.
Но это еще один вопрос.
Связанный ответ: WooCommerce – добавление пользовательской цены на каждый товар в корзине