Изменение цены при добавлении в корзину умножая на значение атрибута woocommerce
Пытаюсь изменить стоимость товара при добавлении в корзину, код работает не так как нужно. При добавлении товара в корзину у которого нет атрибута pa_kolichestvo, то цена меняется у всех товаров в корзине на обычную. В чем может быть причина?
function get_unit($product_id){
global $product;
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
$atribute = $_product->get_attribute( 'pa_kolichestvo' );
}
$term_meta_pa = str_replace(' ', '', $atribute);
$term_meta_pa = str_replace(',','.',$term_meta_pa);
$term_meta_m2 = strpos($term_meta_pa, 'м2');
if ($term_meta_m2 !== false || $term_meta_m2 !== '') {
$term_meta_content = strtok($term_meta_pa, 'м');
}
if((float)$term_meta_content>0){
return (float)$term_meta_content;
}else{
return false;
}
}
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
if($unit=get_unit($value['product_id'])){
$value['data']->set_price($unit*$value['data']->price);
$value['data']->set_regular_price($unit*$value['data']->regular_price);
if((int)$value['data']->sale_price > 0 ){
$value['data']->set_sale_price($unit*$value['data']->sale_price);
}
}
}
}
Ответы (1 шт):
Автор решения: Makissm
→ Ссылка
Заработало, не сразу заметил лишнюю строку)))
function get_unit($product_id){
global $product;
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
$atribute = $_product->get_attribute( 'pa_kolichestvo' );
}
$term_meta_pa = str_replace(' ', '', $atribute);
$term_meta_pa = str_replace(',','.',$term_meta_pa);
$term_meta_m2 = strpos($term_meta_pa, 'м2');
if ($term_meta_m2 !== false || $term_meta_m2 !== '') {
$term_meta_content = strtok($term_meta_pa, 'м');
}
if((float)$term_meta_content>0){
return (float)$term_meta_content;
}else{
return false;
}
}
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
foreach ( $cart_object->cart_contents as $key => $value ) {
if($unit=get_unit($value['product_id'])){
//$value['data']->set_price($unit*$value['data']->price);
$value['data']->set_regular_price($unit*$value['data']->regular_price);
if((int)$value['data']->sale_price > 0 ){
$value['data']->set_sale_price($unit*$value['data']->sale_price);
}
}
}
}