Создание собственного виджета – это отличный способ добавить уникальный функционал на сайт WordPress. Однако если вы хотите, чтобы ваш виджет корректно работал на многоязычном сайте, необходимо реализовать поддержку нескольких языков. В этой статье мы подробно разберём, как добавить поддержку языков в собственном виджете WordPress. Приведём примеры кода и рассмотрим интеграцию с популярными плагинами мультиязычности.
Почему важно реализовать мультиязычность в виджетах WordPress
Виджеты часто отображают текстовую информацию, которая должна быть локализована для разных аудиторий. Без поддержки языков пользователь увидит контент только на одном языке, что негативно скажется на удобстве и восприятии сайта. Особенно это актуально для сайтов с глобальной аудиторией.
Реализовав мультиязычность в виджете, вы сможете:
- Автоматически показывать контент на нужном языке;
- Использовать популярные плагины для управления переводами;
- Поддерживать SEO для каждого языка;
- Обеспечить консистентность интерфейса и информации.
Основные подходы к добавлению поддержки языков в виджет WordPress
1. Использование функции __() и _e() с gettext
Самый базовый вариант — использовать функции интернационализации WordPress, такие как __() и _e(), для оборачивания текстовых строк. Это позволит подключать файлы переводов (.po/.mo) и выводить текст на нужном языке.
Пример:
public function widget($args, $instance) {
echo $args['before_widget'];
echo $args['before_title'] . esc_html__('Приветствие', 'wptranslate') . $args['after_title'];
echo '<p>' . esc_html__('Добро пожаловать на наш сайт!', 'wptranslate') . '</p>';
echo $args['after_widget'];
}Важно зарегистрировать текстовый домен в функции load_plugin_textdomain() или load_theme_textdomain() для темы.
2. Хранение переводимых данных в опциях с учётом языка
Если виджет выводит динамические настройки, например, заголовок или текст из панели управления, нужно хранить эти данные с привязкой к языку. Для этого можно использовать функции плагинов мультиязычности или добавлять постфиксы к опциям, например:
$current_lang = apply_filters('wpml_current_language', NULL); // Для WPML
$option_name = 'wptranslate_widget_text_' . $current_lang;
$text = get_option($option_name);
Если плагин не используется, можно реализовать собственное хранение переводов в виде массива с ключами – кодами языков.
3. Интеграция с популярными плагинами мультиязычности
Для совместимости с WPML, Polylang и TranslatePress стоит соблюдать некоторые правила:
- Не хранить текст в коде, а использовать опции или кастомные поля, которые можно перевести через интерфейс плагина.
- Вызывать API плагинов для получения текущего языка и переключения контента.
Например, для Polylang:
if (function_exists('pll_current_language')) {
$lang = pll_current_language();
}Пример реализации мультиязычного виджета с поддержкой Polylang
Ниже пример простого виджета, который выводит приветствие на разных языках, используя Polylang для определения текущего языка.
class WPTranslate_Multilang_Widget extends WP_Widget {
public function __construct() {
parent::__construct(
'wptranslate_multilang_widget',
esc_html__('WPTranslate Мультиязычный виджет', 'wptranslate')
);
}
public function widget($args, $instance) {
$greetings = [
'ru' => 'Привет, посетитель!',
'en' => 'Hello, visitor!',
'de' => 'Hallo, Besucher!'
];
$lang = function_exists('pll_current_language') ? pll_current_language() : 'en';
$greeting = isset($greetings[$lang]) ? $greetings[$lang] : $greetings['en'];
echo $args['before_widget'];
echo $args['before_title'] . esc_html__('Приветствие', 'wptranslate') . $args['after_title'];
echo '<p>' . esc_html($greeting) . '</p>';
echo $args['after_widget'];
}
public function form($instance) {
echo '<p>' . esc_html__('Этот виджет выводит приветствие на языке сайта, определённом Polylang.', 'wptranslate') . '</p>';
}
}
function wptranslate_register_multilang_widget() {
register_widget('WPTranslate_Multilang_Widget');
}
add_action('widgets_init', 'wptranslate_register_multilang_widget');Этот код можно добавить в файл плагина или functions.php вашей темы.
Как работать с переводами настроек виджета
Если ваш виджет имеет настраиваемые поля, которые нужно переводить, например, заголовок и текст, рекомендуем использовать API плагинов мультиязычности. Для WPML можно воспользоваться функцией icl_register_string() и icl_t() для регистрации и вывода переводимых строк.
Пример регистрации строки для перевода:
if (function_exists('icl_register_string')) {
icl_register_string('WPTranslate Widget', 'widget_title', $instance['title']);
}А для вывода перевода:
$title = function_exists('icl_t') ? icl_t('WPTranslate Widget', 'widget_title', $instance['title']) : $instance['title'];Это позволит переводить содержимое виджета из интерфейса WPML.
Рекомендации по тестированию и отладке мультиязычных виджетов
После реализации мультиязычности важно тщательно протестировать виджет:
- Проверьте корректность вывода для всех активных языков;
- Убедитесь, что изменения в админке сохраняются и отображаются правильно на каждом языке;
- Проверьте работу с кэшированием и минификацией, чтобы избежать проблем с языковыми версиями;
- Используйте отладочные функции WordPress для мониторинга текущего языка и значений опций.
Для отладки можно временно выводить текущий язык с помощью:
echo 'Текущий язык: ' . (function_exists('pll_current_language') ? pll_current_language() : 'не определен');Использование плагина Clearfy Pro для оптимизации мультиязычности
Плагин Clearfy Pro помогает оптимизировать работу сайта, включая поддержку мультиязычных ресурсов. В частности, он позволяет отключать лишние скрипты и стили для разных языков, что улучшает производительность и предотвращает конфликты.
Особенно полезно использовать Clearfy Pro на сайтах с большим количеством виджетов и плагинов, чтобы минимизировать нагрузку и обеспечить плавную работу перевода.
Заключение
Добавление поддержки языков в собственном виджете WordPress – задача вполне выполнимая, если учитывать особенности интернационализации и использовать возможности популярных плагинов мультиязычности. Правильная архитектура кода, использование gettext, API плагинов и продуманное хранение переводимых данных обеспечат качественный и удобный для пользователя результат.
Рекомендуем также ознакомиться с другими статьями на WPSHOP.ru для расширения знаний и практики в работе с WordPress и мультиязычностью.