Многоязычный сайт — важный инструмент для расширения аудитории и улучшения пользовательского опыта. Большинство решений для многоязычности в WordPress базируются на плагинах, таких как WPML или Polylang. Но что делать, если вы хотите избежать нагрузки от сторонних плагинов и сделать все максимально легким и кастомным? В этой статье мы подробно разберем, как реализовать многоязычный сайт на WordPress без плагинов, используя собственные методы и немного кода.
Почему стоит сделать многоязычный сайт без плагинов?
Плагины удобны, но имеют свои недостатки: они могут замедлять сайт, создавать конфликты с темой или другими плагинами, и часто ограничивают гибкость в кастомизации. Сделав многоязычность вручную, вы получаете полный контроль над структурой, логикой и внешним видом перевода.
Кроме того, ручной подход помогает лучше понять, как WordPress работает с URL, шаблонами и запросами.
И, конечно, это отличный способ для разработчика улучшить свои навыки работы с WP.
Основные методы многоязычности без плагинов
1. Использование поддоменов или поддиректорий
Самый простой способ — создать копии сайта для каждого языка в разных папках или поддоменах, например:
- ru.wp24.ru — русский
- en.wp24.ru — английский
Для этого можно настроить мультисайт WordPress или отдельные установки, но мультисайт сложнее в администрировании.
2. Использование пользовательских полей и таксономий
Можно добавить кастомное поле или таксономию для языка и выводить контент в зависимости от выбранного языка.
Например, создадим таксономию language и назначим термины ru и en.
3. Управление URL и переключение языков
Для удобства пользователя важно, чтобы язык отражался в URL, например, /ru/ или /en/. Для этого мы будем использовать фильтр rewrite_rules_array и функцию add_rewrite_rule().
Пример реализации: многоязычность с таксономией и URL-переключением
Шаг 1. Создаем таксономию для языков
add_action('init', 'wp24_register_language_taxonomy');
function wp24_register_language_taxonomy() {
register_taxonomy('language', 'post', [
'label' => 'Язык',
'public' => false,
'rewrite' => false,
'hierarchical' => false,
'show_ui' => true,
'show_admin_column' => true
]);
// Добавляем термины, если их нет
if (!term_exists('ru', 'language')) {
wp_insert_term('Русский', 'language', ['slug' => 'ru']);
}
if (!term_exists('en', 'language')) {
wp_insert_term('English', 'language', ['slug' => 'en']);
}
}
Этот код создаст таксономию language и два языка.
Шаг 2. Привязываем посты к языкам
При создании или редактировании поста в админке появится выбор языка. Выберите нужный язык для каждой записи.
Шаг 3. Добавляем поддержку URL с языковыми префиксами
add_action('init', 'wp24_add_language_rewrite_rules');
function wp24_add_language_rewrite_rules() {
add_rewrite_rule('^ru/?$', 'index.php?language=ru', 'top');
add_rewrite_rule('^en/?$', 'index.php?language=en', 'top');
add_rewrite_rule('^ru/page/([0-9]{1,})/?$', 'index.php?language=ru&paged=$matches[1]', 'top');
add_rewrite_rule('^en/page/([0-9]{1,})/?$', 'index.php?language=en&paged=$matches[1]', 'top');
}
add_filter('query_vars', 'wp24_add_language_query_vars');
function wp24_add_language_query_vars($vars) {
$vars[] = 'language';
return $vars;
}
add_action('pre_get_posts', 'wp24_filter_posts_by_language');
function wp24_filter_posts_by_language($query) {
if (!is_admin() && $query->is_main_query() && $lang = get_query_var('language')) {
$tax_query = [
[
'taxonomy' => 'language',
'field' => 'slug',
'terms' => $lang
]
];
$query->set('tax_query', $tax_query);
}
}
Этот код добавляет правила перезаписи URL и фильтрует посты по языку.
Шаг 4. Создаем переключатель языков
Добавим простой переключатель языков в тему:
function wp24_language_switcher() {
$current_lang = get_query_var('language') ?: 'ru';
$langs = [
'ru' => 'Русский',
'en' => 'English'
];
echo '<div class="wp24-language-switcher">';
foreach ($langs as $slug => $name) {
$class = ($slug === $current_lang) ? 'active' : '';
$url = home_url('/' . $slug . '/');
echo "<a href=\"$url\" class=\"$class\">$name</a> ";
}
echo '</div>';
}
Выводите wp24_language_switcher() в нужном месте темы, например, в шапке.
Как адаптировать эту систему для страниц и других типов записей
Чтобы расширить функционал, можно добавить поддержку других типов записей (страниц, пользовательских типов), и таксономий. Для этого нужно изменить аргументы в register_taxonomy() и внести коррективы в фильтр pre_get_posts.
Также стоит продумать, как будет работать перевод для меню, виджетов и других элементов шаблона — их можно дублировать и фильтровать по языку аналогично.
Преимущества и недостатки данного подхода
Преимущества:
- Минимум нагрузки на сайт
- Полный контроль над логикой
- Отсутствие зависимости от сторонних плагинов
Недостатки:
- Отсутствие автоматизации перевода
- Меньше функций из коробки (например, SEO для каждого языка придется настраивать вручную)
- Требуется больше ручной работы и знаний
Дополнительные советы и рекомендации
Если вы хотите добавить автоматический перевод или удобную работу с переводчиками, можно использовать плагин WPGPT, который интегрируется с GPT и может помочь создавать переводы прямо в админке.
Для SEO рекомендуем использовать плагин Clearfy Pro, который поможет оптимизировать метаданные под разные языки.
Также можно расширить функционал, добавив динамическую подгрузку шаблонов для каждого языка, используя фильтр template_include.
Итог
Создание многоязычного сайта на WordPress без использования плагинов — вполне реальная задача, требующая понимания внутренней архитектуры WordPress и умения работать с таксономиями, запросами и перезаписью URL. Этот способ отлично подойдет для проектов с ограниченным количеством языков и небольшим объемом контента.
Внимательно тестируйте все изменения и не забывайте делать резервные копии сайта перед внесением правок.