Как создать собственный переводчик для WordPress

В современном мире многоязычность сайта — важный аспект для расширения аудитории. Хотя на рынке существует множество готовых решений, например, Polylang и WPML, иногда требуется создать собственный, легкий и адаптированный под конкретные задачи переводчик. В этой статье мы разберем, как создать собственный плагин для перевода контента WordPress с нуля, используя базовые возможности CMS и PHP.

Почему стоит создать собственный плагин для перевода WordPress

Большинство популярных плагинов перевода обладают мощным функционалом, но иногда это избыточно и сказывается на производительности сайта. Создание собственного переводчика позволяет:

  • Оптимизировать функциональность под конкретные задачи.
  • Минимизировать нагрузку на сервер и базу данных.
  • Гибко управлять выводом переведенного контента.
  • Избежать конфликтов с другими плагинами.

Кроме того, это отличный способ глубже понять внутренние механизмы WordPress и PHP.

Основные принципы работы плагина перевода

Идея собственного переводчика сводится к хранению переведенных версий страниц и постов в базе данных и выводу нужного варианта в зависимости от выбранного языка пользователя. Важные моменты:

  • Использование кастомных полей или таксономий для хранения информации о языке.
  • Переключение языка через URL-параметры, поддомены или куки.
  • Фильтрация контента через хуки WordPress для вывода нужной версии.

В нашем примере мы реализуем хранение языка в метаданных поста и переключение через GET-параметр ?lang=ru.

Создаем структуру плагина и основные функции

Начнем с создания папки wptranslate-custom-translator в директории wp-content/plugins. В ней создадим файл wptranslate-custom-translator.php с основными заголовками плагина:

<?php
/*
Plugin Name: WPTranslate Custom Translator
Description: Легкий плагин для перевода контента WordPress.
Version: 1.0
Author: WPTranslate.ru
*/

// Код плагина ниже

Далее реализуем функции сохранения языка поста при его создании или редактировании. Для этого используем хук save_post:

function wptranslate_save_post_language($post_id) {
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if (!current_user_can('edit_post', $post_id)) return;

    if (isset($_POST['wptranslate_post_language'])) {
        $lang = sanitize_text_field($_POST['wptranslate_post_language']);
        update_post_meta($post_id, '_wptranslate_language', $lang);
    }
}
add_action('save_post', 'wptranslate_save_post_language');

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

function wptranslate_add_language_metabox() {
    add_meta_box(
        'wptranslate_language',
        'Язык поста',
        'wptranslate_language_metabox_callback',
        'post',
        'side'
    );
}
add_action('add_meta_boxes', 'wptranslate_add_language_metabox');

function wptranslate_language_metabox_callback($post) {
    $value = get_post_meta($post->ID, '_wptranslate_language', true);
    ?>
    <label for="wptranslate_post_language">Выберите язык:</label>
    <select name="wptranslate_post_language" id="wptranslate_post_language">
        <option value="ru" <?php selected($value, 'ru'); ?>>Русский</option>
        <option value="en" <?php selected($value, 'en'); ?>>English</option>
        <option value="de" <?php selected($value, 'de'); ?>>Deutsch</option>
    </select>
    <?php
}

Выводим контент на выбранном языке

Для переключения языка мы будем использовать GET-параметр lang. Создадим функцию, которая будет фильтровать основной запрос и выводить посты только нужного языка:

function wptranslate_filter_posts_by_language($query) {
    if (is_admin() || !$query->is_main_query()) return;

    if (isset($_GET['lang'])) {
        $lang = sanitize_text_field($_GET['lang']);
        $meta_query = array(
            array(
                'key' => '_wptranslate_language',
                'value' => $lang,
                'compare' => '=',
            ),
        );
        $query->set('meta_query', $meta_query);
    }
}
add_action('pre_get_posts', 'wptranslate_filter_posts_by_language');

Таким образом, при переходе на страницу https://site.ru/?lang=en будут показаны только посты с меткой языка en.

Переключение языка на фронтенде

Добавим простой переключатель языков в шаблон сайта, например, в header.php:

<div class="wptranslate-language-switcher">
    <a href="?lang=ru">Русский</a> | 
    <a href="?lang=en">English</a> | 
    <a href="?lang=de">Deutsch</a>
</div>

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

Добавляем поддержку перевода заголовков и других элементов

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

update_option('wptranslate_title_ru', 'Заголовок на русском');
update_option('wptranslate_title_en', 'Title in English');

Для вывода заголовка будем использовать функцию:

function wptranslate_get_option($name) {
    $lang = isset($_GET['lang']) ? sanitize_text_field($_GET['lang']) : 'ru';
    return get_option($name . '_' . $lang);
}

В шаблоне вызовем:

<h1><?php echo wptranslate_get_option('wptranslate_title'); ?></h1>

Таким образом можно гибко создавать переводы для любых элементов сайта.

Оптимизация и рекомендации

При самостоятельной реализации перевода важно помнить:

  • Кэшировать результаты запросов, чтобы снизить нагрузку на базу данных.
  • Обрабатывать возможные ошибки и отсутствующие переводы, задавая fallback язык.
  • Избегать дублирования контента в поисковых системах — можно использовать тег hreflang в заголовках страниц.
  • Тестировать переключение языков на всех типах страниц.

Кроме того, для сложных проектов лучше использовать готовые решения с поддержкой SEO и профессиональными инструментами.

Заключение

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

Как правильно перевести статусы заказов WooCommerce в WordPress
31.05.2026
Как использовать REST API для автоперевода контента WordPress
03.06.2026
Как добавить автоперевод форм в WordPress
16.01.2026
Как добавить собственные скачиваемые переводы в WordPress
23.11.2025
Как добавить поддержку мультиязычности в собственном плагине WordPress
23.12.2025