Как сделать цену в корзине за 100 грамм? WooCommerce
У меня на странице товаров есть товары которые считаются за 100 грамм. И всё работает на странице магазина, но в корзине я получаю стоимость не за 100 грамм, а за 100 единиц товара. Вот код что бы понимали, что я имею.
Так вот, как мне сделать, что бы в корзине был расчёт за 100 грамм товара. То есть если покупатель возьмёт 300 грамм товара за 2$, то цена должна быть 6$. Сейчас она равно 600$.
В этом коде я просто задал шаг в 100 единиц.
add_filter( 'woocommerce_quantity_input_args', 'jk_woocommerce_quantity_input_args', 10, 2 ); // Simple products
function jk_woocommerce_quantity_input_args( $args, $product ) {
$cat_arr = get_the_terms(get_the_ID(),'product_cat');
//это категория по которой я вывожу товары за единицу
if( 'perunit' == $cat_arr[0]->name ) {
if ( is_singular( 'product' ) ) {
$args['input_value'] = 1; // Starting value (we only want to affect product pages, not cart)
}
$args['max_value'] = 1000; // Maximum value
$args['min_value'] = 1; // Minimum value
$args['step'] = 1; // Quantity steps
return $args;
}
// иначе, вывожу за 100 грамм
else {
if ( is_singular( 'product' ) ) {
$args['input_value'] = 100; // Starting value (we only want to affect product pages, not cart)
}
$args['max_value'] = 10000; // Maximum value
$args['min_value'] = 100; // Minimum value
$args['step'] = 100; // Quantity steps
return $args;
}
}
add_filter( 'woocommerce_available_variation', 'jk_woocommerce_available_variation' ); // Variations
function jk_woocommerce_available_variation( $args ) {
$args['max_qty'] = 1000; // Maximum value (variations)
$args['min_qty'] = 1; // Minimum value (variations)
return $args;
}
Ответы (1 шт):
Все это можно сделать на хук woocommerce_add_cart_item. В $cart_item_data['data'] храниться текущий продукт до момента добавления в корзину. С помощью метода WC_Product::get_price получаем текущую цену, а с помощью WC_Product::set_price изменяем ее:
add_filter( 'woocommerce_add_cart_item', 'my_add_cart_item_data' );
function my_add_cart_item_data( $cart_item_data ) {
$product = $cart_item_data['data'];
$product->set_price( $product->get_price() / 100 );
return $cart_item_data;
}