Если вы столкнулись с задачей перевода производительной (lightweight, fast) темы WordPress на несколько языков, то плагин WPML — один из лучших и наиболее функциональных инструментов для этого. Однако при работе с быстрыми и минималистичными темами WPML требует особой настройки, чтобы не снизить производительность сайта и избежать конфликтов. В этой статье я расскажу, как правильно настроить WPML для таких тем, какие есть подводные камни и как их обойти, а также приведу примеры кода для тонкой интеграции плагина.
Почему WPML подходит для производительных тем WordPress
WPML поддерживает все основные типы контента, таксономии, виджеты и даже строки из тем и плагинов. Он позволяет создавать многоязычные сайты с единым управлением и минимальными затратами времени на перевод. Важно, что WPML оптимизирован под большие сайты и работает эффективно, если его правильно настроить.
Производительные темы часто строятся на минимальном количестве CSS и JavaScript, чистом коде и минимальных запросах к базе данных. При добавлении WPML нужно сохранять эти принципы, чтобы не ухудшить скорость загрузки и отклик сайта.
Основные преимущества WPML для таких тем:
- Поддержка перевода пользовательских типов записей и таксономий;
- Возможность перевода строк темы через String Translation;
- Полное управление языковыми переключателями и SEO;
- Поддержка совместимости с кэшированием и CDN.
Особенности настройки WPML для производительных тем
Чтобы WPML не замедлял сайт, важно правильно настроить следующие параметры:
1. Выбор способа отображения языков
WPML позволяет выводить языковой переключатель в виде меню, виджета или шорткода. Для быстрых тем предпочтительно использовать шорткод, встроенный в шаблон, чтобы избежать лишних запросов к базе и лишней верстки.
Пример шорткода для вывода переключателя:
<?php echo do_shortcode('[wpml_language_selector_widget]'); ?>Или, для более тонкой настройки, можно использовать хук:
<?php if (function_exists('icl_get_languages')) {
$languages = icl_get_languages('skip_missing=0&orderby=code');
if (!empty($languages)) {
echo '<ul class="language-switcher">';
foreach ($languages as $l) {
echo '<li><a href="' . $l['url'] . '">' . $l['native_name'] . '</a></li>';
}
echo '</ul>';
}
}>2. Минимизация запросов к базе данных
WPML использует собственные таблицы для хранения переведенных данных, что увеличивает число запросов. Чтобы избежать этого, включите кэширование объектов, если тема его поддерживает, и используйте плагины кэширования, совместимые с WPML, например, WP Rocket или LiteSpeed Cache.
Также важно отключить в настройках WPML неиспользуемые языковые функции и переводы, если они не нужны.
3. Перевод строк темы и плагинов
В производительных темах часто много строк выводится напрямую из кода без использования gettext. WPML String Translation позволяет перевести эти строки через административную панель.
Пример регистрации строк для перевода в functions.php темы:
function wptranslate_register_theme_strings() {
do_action('wpml_register_single_string', 'wptranslate-theme', 'Footer Copyright', '© 2024 My Site');
}
add_action('init', 'wptranslate_register_theme_strings');После регистрации строки станут доступны в String Translation и их можно будет перевести без правки кода.
Оптимизация производительности при использовании WPML
Использование фильтров для сокращения нагрузки
WPML позволяет фильтровать вывод языковых переключателей, чтобы исключить ненужные языки или сокращать данные, что ускоряет рендеринг.
add_filter('wpml_active_languages', 'wptranslate_filter_active_languages', 10, 1);
function wptranslate_filter_active_languages($languages) {
// Оставляем только основные языки
return array_filter($languages, function($lang) {
return in_array($lang['code'], ['ru', 'en']);
});
}Это уменьшит количество языков и улучшит производительность.
Использование асинхронной загрузки
Если языковой переключатель содержит тяжелые скрипты, можно подключить их асинхронно или через defer, чтобы не блокировать загрузку страницы.
Совместимость с кэшированием
WPML отлично работает с большинством популярных плагинов кэширования. Убедитесь, что в настройках кэширования включена поддержка многоязычных сайтов и что кэш очищается при обновлении переводов.
Примеры кода для интеграции WPML в производительные темы
Автоматический выбор языка на основе браузера пользователя
Чтобы улучшить UX, можно автоматически перенаправлять посетителей на версию сайта на их языке:
function wptranslate_redirect_by_browser_language() {
if (is_admin()) return;
if (isset($_COOKIE['wpml_redirect_done'])) return;
$browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
$available_langs = ['ru', 'en', 'de'];
if (in_array($browser_lang, $available_langs)) {
$current_lang = apply_filters('wpml_current_language', NULL);
if ($current_lang !== $browser_lang) {
setcookie('wpml_redirect_done', '1', time() + 3600, COOKIEPATH, COOKIE_DOMAIN);
wp_redirect(apply_filters('wpml_permalink', home_url(), $browser_lang));
exit;
}
}
}
add_action('template_redirect', 'wptranslate_redirect_by_browser_language');Перевод пользовательских полей (ACF) с WPML
Если в вашей теме используются кастомные поля через Advanced Custom Fields, WPML поддерживает их перевод. Важно правильно настроить группу полей и выбрать тип перевода 'Переводить'.
Пример вывода переведенного поля:
$value = apply_filters('wpml_translate_single_string', get_field('my_custom_field'), 'acf', 'my_custom_field');
echo esc_html($value);Заключение по теме
WPML — мощный инструмент для создания многоязычных сайтов на WordPress, и при правильной настройке он отлично подойдет для производительных тем, сохраняя скорость и минимализм. Главное — грамотно управлять запросами, выбирать оптимальный вывод переключателей и не забывать про кэширование. Используйте приведённые примеры и рекомендации, чтобы сделать ваш сайт удобным и быстрым для пользователей на любом языке.