Как задать отображение цены товаров по формуле в woocommerce?

Ссылка скопирована
1 ответ

Добрый день. Есть интернет магазин с 10к товаров, нужно обновлять стоимость товаров по формуле, а именно умножать стоимость на курс евро. Можно ли как-то лаконично это сделать в одном месте, чтобы на всех ценниках цена отображалась по заданной формуле?

Дополнительно:

Есть и плагины для пересчёта курса и для "скидок".

Ответы:

Вот один из вариантов

// Функция для изменения отображения цен function custom_display_price( $price, $product ) {     // Здесь установите ваш коэффициент     $coefficient = 1.2; // Например, коэффициент 1.2      $regular_price = $product->get_regular_price();     $new_price = $regular_price * $coefficient;     return wc_price( $new_price ); }  // Изменение отображения цен на страницах товаров add_filter( 'woocommerce_get_price_html', 'custom_display_price', 10, 2 );  // Изменение отображения цен в корзине и на странице оформления заказа add_filter( 'woocommerce_cart_item_price', 'custom_display_price', 10, 3 );  // Изменение отображения сумм в корзине и на странице оформления заказа add_filter( 'woocommerce_cart_item_subtotal', 'custom_display_price', 10, 3 );

// Функция для изменения отображения цен function custom_display_price( $price, $product ) { // Здесь установите ваш коэффициент $coefficient = 1.2; // Например, коэффициент 1.2 $regular_price = $product->get_regular_price(); $new_price = $regular_price * $coefficient; return wc_price( $new_price ); } // Изменение отображения цен на страницах товаров add_filter( 'woocommerce_get_price_html', 'custom_display_price', 10, 2 ); // Изменение отображения цен в корзине и на странице оформления заказа add_filter( 'woocommerce_cart_item_price', 'custom_display_price', 10, 3 ); // Изменение отображения сумм в корзине и на странице оформления заказа add_filter( 'woocommerce_cart_item_subtotal', 'custom_display_price', 10, 3 );

Обратите внимание, это для цены в поле regular_price.

Забыл дописать - это вы должны поместить в файл functions.php своей темы или через плагин code snipets

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Игорь Волков Ответ

Для WooCommerce важно разделить две задачи: изменить только отображение цены или реально пересчитать цену товара для корзины, заказа, скидок, налогов и выгрузок. Если поменять только woocommerce_get_price_html, на карточке будет одна цена, а в корзине и заказе может использоваться старая. Для магазина это почти всегда ошибка.

Если цена должна считаться по курсу евро везде, лучше менять вычисляемую цену через фильтры woocommerce_product_get_price и woocommerce_product_get_regular_price. Пример:

add_filter('woocommerce_product_get_price', 'my_eur_price_rate', 20, 2);
add_filter('woocommerce_product_get_regular_price', 'my_eur_price_rate', 20, 2);
 
function my_eur_price_rate($price, $product) {
    if ($price === '') {
        return $price;
    }
 
    $rate = (float) get_option('my_eur_rate', 100);
    return round((float) $price * $rate, wc_get_price_decimals());
}

add_filter('woocommerce_product_get_price', 'my_eur_price_rate', 20, 2); add_filter('woocommerce_product_get_regular_price', 'my_eur_price_rate', 20, 2); function my_eur_price_rate($price, $product) { if ($price === '') { return $price; } $rate = (float) get_option('my_eur_rate', 100); return round((float) $price * $rate, wc_get_price_decimals()); }

Такой код лучше держать в небольшом плагине или mu-plugin, а не в родительской теме. Курс можно хранить в опции, обновлять вручную в админке или по cron из API банка. После внедрения обязательно проверьте карточку товара, архив, корзину, оформление заказа, купоны, налоги и письма заказа.

Если у вас 10 тысяч товаров и цена в админке уже хранится в евро, формульный вывод нормален. Если цена должна стать рублёвой физически, например для выгрузки в маркетплейсы или CRM, лучше периодически массово пересчитывать цены через CLI/скрипт с бэкапом, а не считать на каждом запросе.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно