wplang.ru wordpress WP Lang

WooCommerce: как добавить переменный текст в описание товара в зависимости от языка

Почему важно выводить описание товара с учётом языка

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

Диагностика задачи: как понять, что стандартных средств недостаточно

Если вы используете стандартный перевод описания товара через плагин WPML или Polylang, и видите, что:

  • нельзя добавить уникальные фразы для конкретного языка без полного дубля описания;
  • нужна динамическая подстановка текста в шаблоне в зависимости от текущего языка;
  • есть необходимость выводить в описании специальные данные, например, локальные акции или особенности;

Тогда стоит рассмотреть подход с условным выводом текста через фильтр WooCommerce.

Пошаговое решение: добавляем переменный текст в описание товара

1. Используем фильтр the_content для описания товара

Описание товара выводится функцией the_content(), поэтому можно отфильтровать его и заменить часть текста в зависимости от языка.

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

Для примера возьмём WPML. Чтобы получить текущий язык, используйте:

if ( function_exists('icl_object_id') ) {
    $current_lang = apply_filters( 'wpml_current_language', NULL );
} else {
    $current_lang = 'en'; // язык по умолчанию
}

3. Фильтруем описание товара

В файле functions.php вашей темы добавьте следующий код:

add_filter('the_content', 'custom_woocommerce_description_by_language', 20);
function custom_woocommerce_description_by_language($content) {
    if ( !is_product() ) {
        return $content;
    }

    // Получаем текущий язык
    $current_lang = 'en';
    if ( function_exists('icl_object_id') ) {
        $current_lang = apply_filters( 'wpml_current_language', NULL );
    }

    // Добавляем переменный текст для разных языков
    switch ($current_lang) {
        case 'ru':
            $extra_text = '<p><strong>Специальное предложение для России!</strong></p>';
            break;
        case 'de':
            $extra_text = '<p><strong>Exklusives Angebot für Deutschland!</strong></p>';
            break;
        default:
            $extra_text = '';
    }

    return $content . $extra_text;
}

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

Перейдите на страницу товара в разных языковых версиях сайта. Внизу описания должен появиться дополнительный текст, соответствующий языку:

  • Для русского — «Специальное предложение для России!»
  • Для немецкого — «Exklusives Angebot für Deutschland!»
  • Для остальных — без дополнительного текста

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

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

  • Фильтр срабатывает на всех страницах — добавьте проверку is_product() перед изменением контента.
  • Текст не меняется — проверьте, что функция определения языка возвращает корректный код; для WPML можно временно вывести echo $current_lang; для отладки.
  • HTML-теги выводятся как текст — убедитесь, что дополнительный текст возвращается именно в виде HTML, а не экранирован.
  • Конфликты с другими плагинами, которые тоже фильтруют описание — попробуйте увеличить приоритет фильтра (например, 99 вместо 20).

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

  • Не используйте тяжелые запросы к базе данных внутри фильтра the_content, чтобы не замедлять загрузку страницы.
  • Если добавляете сложный HTML, проверяйте его на XSS-уязвимости, особенно если текст собирается из пользовательского ввода.
  • Для оптимизации можно кэшировать результат функции, если текст не меняется часто.

Альтернативы: сравнение подходов

МетодПлюсыМинусы
Фильтр the_content с условием языкаПросто реализовать, гибкоЗависит от плагина языка, нужно вручную писать тексты
Использование плагинов для многоязычного контента (WPML, Polylang)Управление через админку, поддержка переводовИногда негибко для динамичных вставок
ACF с полями для разных языковЧёткая структура, удобство редактированияНужно настраивать поля и логику вывода
×
WordPress - сейчас выгоднее всего!

Скидка -20% на премиум темы и плагины

Возьми скидку сейчас