Как изменить цену woocommerce через functions.php ?

#php #wordpress #woocommerce

#php #wordpress #woocommerce

Вопрос:

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

Измените цену на все товары с помощью 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.

Как я могу это исправить?

Спасибо!

Ответ №1:

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

 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;
    }
}
  

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