Проблема с отображением валют в мультиязычном WooCommerce
При работе с WooCommerce на мультиязычном сайте часто возникает задача показывать цены товаров в разных валютах в зависимости от выбранного языка. Например, для сайта на русском показывать цены в рублях, для английской версии — в долларах, а для европейской — в евро. Без правильной настройки валюта будет одна на всех языках, или отображение курсов будет некорректным, что приводит к потере доверия клиентов и снижению конверсии.
Диагностика проблемы отображения валют
Чтобы проверить, как работает отображение валют на вашем сайте, выполните следующие шаги:
- Выберите разные языки на сайте, посмотрите, меняется ли валюта в ценах товаров.
- Проверьте настройки WooCommerce → Валюты и валютные переключатели (если используется плагин мультивалютности).
- Если используется плагин мультиязычности (WPML, Polylang), убедитесь, что он совместим с выбранным плагином мультвалютности.
- Проверьте, нет ли кэширования, которое мешает обновлению валюты.
Решение: настройка мультвалютности с WPML и WooCommerce
WPML поддерживает работу с мультивалютами через дополнение WooCommerce Multilingual. Оно позволяет назначать валюты для каждого языка и автоматически конвертировать цены.
Шаг 1. Установка и активация WooCommerce Multilingual
Убедитесь, что у вас установлены и активны:
WooCommerceWPML Multilingual CMSWooCommerce Multilingual
Эти плагины доступны на официальных сайтах или в репозитории WPML.
Шаг 2. Настройка валют для каждого языка
В админке WordPress перейдите в WooCommerce → WooCommerce Multilingual → Multi-currency. Включите мультивалютность и добавьте нужные валюты:
- Добавьте рубли (RUB) для русского языка
- Добавьте доллары (USD) для английского
- Добавьте евро (EUR) для европейских языков
Назначьте валюту по умолчанию для каждого языка. Например:
| Язык | Валюта | Курс к базовой валюте |
|---|---|---|
| Русский (ru) | RUB | 1 (базовая валюта) |
| Английский (en) | USD | 0.013 |
| Немецкий (de) | EUR | 0.012 |
Шаг 3. Проверка и настройка конвертации курсов
Можно включить автоматическое обновление курсов валют или задать их вручную. Для автоматизации используйте API, например, Open Exchange Rates, и введите API-ключ в настройках плагина.
Шаг 4. Настройка переключателя валют на сайте
WooCommerce Multilingual предлагает виджет переключения валют, который можно добавить в сайдбар или шапку. Для этого:
- Перейдите в Внешний вид → Виджеты
- Добавьте виджет
WooCommerce Currency Switcherв нужную область - Настройте отображение и стили
Проверка результата после внедрения
Чтобы убедиться, что всё работает корректно:
- Переключите язык сайта и проверьте, что цены меняются на соответствующую валюту.
- Добавьте товар в корзину на одном языке, затем переключитесь на другой и проверьте, что валюта и цена обновились.
- Оформите тестовый заказ на разных языках и проверьте, что в админке WooCommerce корректно отображаются суммы в нужной валюте.
Частые ошибки и способы их исправления
- Валюта не меняется при переключении языка
Причина: мультивалютность не включена или WooCommerce Multilingual не активен.
Решение: проверьте активацию плагина и настройки мультивалютности. - Цены не конвертируются корректно
Причина: не заданы или устарели курсы валют.
Решение: обновите курсы вручную или настройте автоматическое обновление. - Конфликты с кешированием
Причина: кеш плагинов или серверное кеширование сохраняет старые значения.
Решение: очистите кеш сайта, отключите кеширование на страницах корзины и оформления заказа. - Валюта не отображается в письмах
Причина: шаблоны писем не поддерживают мультивалютность.
Решение: отредактируйте шаблоны, используя функции WooCommerce Multilingual, напримерicl_get_languages()для определения языка и валюты.
Практические советы по безопасности и производительности
- Отключайте кеширование на страницах корзины, оформления заказа и аккаунта, чтобы избежать ошибок с отображением валют.
- Автоматическое обновление курсов валют лучше настраивать с ограничением по времени (например, раз в сутки), чтобы не создавать лишнюю нагрузку.
- Всегда тестируйте мультивалютность на тестовом сайте перед внедрением на живом.
- Следите за обновлениями плагинов WPML и WooCommerce Multilingual, так как они регулярно улучшают совместимость и безопасность.
Примеры кода для кастомизации валюты в WooCommerce
Если нужно программно изменить валюту в зависимости от языка без плагина WooCommerce Multilingual, можно использовать хук woocommerce_currency. Пример:
add_filter('woocommerce_currency', function($currency) {
$lang = substr(get_locale(), 0, 2); // Получаем язык сайта
switch ($lang) {
case 'ru':
return 'RUB';
case 'en':
return 'USD';
case 'de':
return 'EUR';
default:
return $currency;
}
});Этот код изменит валюту в зависимости от текущего языка сайта. Однако в этом случае вам нужно вручную управлять конвертацией цен.
Для конвертации цен можно воспользоваться фильтром woocommerce_product_get_price:
add_filter('woocommerce_product_get_price', 'convert_price_by_currency', 10, 2);
add_filter('woocommerce_product_get_regular_price', 'convert_price_by_currency', 10, 2);
add_filter('woocommerce_product_get_sale_price', 'convert_price_by_currency', 10, 2);
function convert_price_by_currency($price, $product) {
$currency = get_woocommerce_currency();
$rates = [
'RUB' => 1,
'USD' => 0.013,
'EUR' => 0.012
];
if (isset($rates[$currency])) {
return $price * $rates[$currency];
}
return $price;
}