wplang.ru wordpress WP Lang

WooCommerce: динамическое изменение стоимости товара в зависимости от выбранного языка

Проблема: цены товаров не адаптируются под язык сайта

При использовании мультиязычных плагинов, таких как WPML или Polylang, часто возникает задача показывать разные цены товаров в WooCommerce в зависимости от выбранного языка. Стандартный функционал WooCommerce не предусматривает такую возможность, и без дополнительной настройки цены остаются одинаковыми для всех языков, что негативно сказывается на удобстве и конверсии.

Диагностика проблемы

Чтобы убедиться, что проблема именно в отсутствии динамического изменения цены, проверьте:

  • Используете ли вы мультиязычный плагин (WPML, Polylang и т.п.).
  • Настроены ли валюты для каждого языка (в случае работы с разными валютами).
  • Отображаются ли цены одинаково при переключении языков.
  • Проверили ли вы, что цены в переводных версиях товаров не изменены вручную.

Если все пункты подтверждаются, значит нужно реализовать динамическую подстановку цены программно.

Пошаговое решение: добавляем динамическую цену по языку через хук WooCommerce

Реализуем динамическое изменение цены с помощью фильтра woocommerce_get_price, который позволяет менять цену товара на лету.

1. Определяем текущий язык

Для этого используем функции мультиязычного плагина. Например, для WPML:

function get_current_language() {
    if (function_exists('icl_object_id')) {
        return apply_filters('wpml_current_language', NULL);
    }
    return 'default';
}

2. Добавляем фильтр для изменения цены

add_filter('woocommerce_get_price', 'change_price_by_language', 10, 2);

function change_price_by_language($price, $product) {
    $lang = get_current_language();

    // Пример изменения цены: увеличиваем на 10% для английского
    if ($lang === 'en') {
        $price = $price * 1.10;
    } elseif ($lang === 'fr') {
        // для французского уменьшаем на 5%
        $price = $price * 0.95;
    }
    // Добавьте другие языки и логику по необходимости

    return $price;
}

3. Обработка вариативных товаров

Для вариативных товаров аналогично применяем фильтр woocommerce_get_variation_price:

add_filter('woocommerce_get_variation_price', 'change_variation_price_by_language', 10, 3);

function change_variation_price_by_language($price, $variation, $display) {
    $lang = get_current_language();

    if ($lang === 'en') {
        $price = $price * 1.10;
    } elseif ($lang === 'fr') {
        $price = $price * 0.95;
    }

    return $price;
}

Проверка результата после внедрения

  • Перейдите на сайт и переключитесь на различные языки.
  • Проверьте, что цена товара изменяется согласно вашей логике.
  • Убедитесь, что в корзине и на странице оформления заказа отображается правильная цена.
  • Протестируйте вариативные товары с разными вариантами — цены должны корректно меняться.
  • Очистите кэш сайта и браузера, если не видите изменений.

Частые ошибки и их исправление

  • Фильтр не срабатывает: убедитесь, что добавляете код в functions.php вашей активной темы или в плагин, и что приоритет вызова фильтра не конфликтует с другими плагинами.
  • Неверное определение языка: функции мультиязычного плагина могут отличаться, проверьте, что используете правильный API для определения текущего языка.
  • Цены не меняются в корзине или на странице заказа: WooCommerce кэширует цены, добавьте фильтры на другие хуки, например woocommerce_cart_item_price.
  • Проблемы с курсами валют: если используете разные валюты, лучше использовать плагин мультивалютности, а не менять цену вручную.

Практические советы по безопасности и производительности

  • Не храните цены для каждого языка в пользовательских полях без необходимости — используйте динамическое изменение, чтобы избежать дублирования данных.
  • Добавляйте кэширование вычисленных цен, если логика сложная, чтобы снизить нагрузку на сервер.
  • Всегда проверяйте совместимость с вашим мультиязычным плагином и WooCommerce после обновлений.
  • Для SEO лучше использовать отдельные URL для каждого языка, чтобы цены были восприняты корректно поисковиками.

Сравнение подходов для мультиязычных цен в WooCommerce

МетодОписаниеПлюсыМинусы
Ручное редактирование цен в переводахСоздание отдельных товаров для каждого языка с разными ценамиПростота реализации, точный контроль ценыДублирование товаров, сложность управления
Плагины мультивалютностиИспользование плагинов для автоматического переключения валют и ценАвтоматизация, поддержка курсов валютЗависимость от плагина, возможны конфликты
Динамическое изменение цены через хукиПрограммное изменение цены на лету по языкуГибкость, отсутствие дублирования данныхТребуется разработка, возможны проблемы с кэшированием
×
-15%
на премиум-тему
Bono

Создай магазин мечты
на WordPress!

↓ ↓ ↓ ↓ ↓
Купить со скидкой »