Для КОРЗИНЫ пунктов (когда продукт добавлен к корзине), можно установить пользовательские динамическую расчетную цену, основанную на продукт пользовательских значений полей.
1) Сначала мы добавим в отдельных страницах продукта ваших 2 пользовательских полей (здесь нормального 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 файл вашей активной темы ребенка (или темы), или же в любом файл плагина.
Код проверен и работает отлично.
ОТОБРАЖЕНИЕ CUSTOM ЦЕНА НА ОДНОЙ СТРАНИЦЕ ПРОДУКТА:
Read this to understand how override the WoocCommerce templates via your theme
За то, что вам нужно будет отредактировать шаблон single-product/price.php
.
И вам нужно будет добавить javascript/jQuery на эту страницу, чтобы обновить продукт, когда клиент установит некоторые значения в пользовательских полях вашего продукта.
Но это еще один вопрос.
Связанные ответ: WooCommerce - Adding a custom price to each product in cart