Как задать отображение цены товаров по формуле в woocommerce?
Добрый день. Есть интернет магазин с 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
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для 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()); }
Такой код лучше держать в небольшом плагине или mu-plugin, а не в родительской теме. Курс можно хранить в опции, обновлять вручную в админке или по cron из API банка. После внедрения обязательно проверьте карточку товара, архив, корзину, оформление заказа, купоны, налоги и письма заказа.
Если у вас 10 тысяч товаров и цена в админке уже хранится в евро, формульный вывод нормален. Если цена должна стать рублёвой физически, например для выгрузки в маркетплейсы или CRM, лучше периодически массово пересчитывать цены через CLI/скрипт с бэкапом, а не считать на каждом запросе.