#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;
}
}
Это напрямую влияет на корзину. Цены самих товаров не будут изменены, но цена товаров в корзине будет обновлена, чтобы отразить указанную вами стоимость.