2016-10-07 4 views
0

Я занимаюсь электронной коммерцией с помощью woocommerce, и я должен сделать следующее:Как изменить цену woocommerce через functions.php?

Изменение цены всех продуктов через functions.php. Функция, которую я создал, работает для всех цен сайта, за исключением значений корзины.

Я ставлю функцию ниже:

function woo_change_price($price, $product) { 
global $woocommerce, $product; 
$post_id = $product->id; 


$regular_price = get_post_meta($post_id, '_regular_price', true); 
$sale_price = get_post_meta($post_id, '_sale_price', true); 
$cupom_value = ($regular_price - $sale_price)/10; 
$price = $cupom_value; 

return $price; 

}

add_filter('woocommerce_get_price', 'woo_change_price', 99); 
add_filter('woocommerce_get_sale_price', 'woo_change_price', 99); 
add_filter('woocommerce_order_amount_item_subtotal', 'woo_change_price', 99); 

Смотрите, что мне нужно, чтобы получить регулярную цену и цену на продажу продукта и сделать основной учет математики, вычитание двух и деление на 10. Результат я установил в качестве новой цены продукта.

Эта функция прекрасно работает на всех сайтах, за исключением тележки. Когда я вижу корзину, все значения равны 0 (цены, сумма, промежуточные итоги и т. Д.).

Я нашел, почему это происходит, но я не понимаю, как это исправить. Проблема заключается в следующем: $ product-> id не идентифицирован по телеге, а затем возвращается 0.

Как это исправить?

Спасибо!

ответ

0

Не уверен, что это то, что вы ищете, но вы можете использовать что-то подобное, чтобы изменить цену предметов, если они добавлено в корзину.

add_action('woocommerce_before_calculate_totals', 'add_custom_price'); 

function add_custom_price($cart_object) { 
    foreach ($cart_object->cart_contents as $key => $value) { 
     $post_id = $value['product_id']; 
     $regular_price = get_post_meta($post_id, '_regular_price', true); 
     $sale_price = get_post_meta($post_id, '_sale_price', true); 
     $cupom_value = ($regular_price - $sale_price)/10; 
     $price = $cupom_value; 
     $value['data']->price = $price; 
    } 
} 

Это влияет непосредственно на тележку. Цены самих предметов не будут изменены, но цена предметов в корзине будет обновлена, чтобы отразить значение, которое вы определили.

Смежные вопросы