Расширение
РасширениеПеревод дополнительных виджетов Elementor

Перевод дополнительных виджетов Elementor

Gato AI Translations for Polylang может переводить страницы Elementor, основанные на виджетах.

Плагин поставляется с поддержкой всех виджетов Elementor и Elementor PRO. Для пользовательских или сторонних виджетов вы можете расширить поддержку перевода с помощью PHP-хуков.

Перевод строк

Чтобы объявить дополнительные переводимые свойства для виджета Elementor, используйте фильтр gatompl:elementor_widget_type_translatable_properties.

Фильтр получает карту [widgetName => properties]. Запись properties может содержать:

  • Простые имена элементов управления — например, 'author_name'
  • Точечные пути — например, 'author_avatar.alt' (соответствует settings.author_avatar.alt)
  • Поля репитера — объявляются как подмассив [repeaterName => [...subFields]]

Они свободно сочетаются, а вложенность может быть любой глубины.

Например, этот хук делает следующее:

  • Простой элемент управления author_name и точечный путь author_avatar.alt становятся переводимыми в виджете blockquote
  • Подполе name репитера становится переводимым внутри репитера slides виджета reviews
add_filter(
    'gatompl:elementor_widget_type_translatable_properties',
    static function (array $translatableProperties): array {
        $translatableProperties['blockquote'][] = 'author_name';
        $translatableProperties['blockquote'][] = 'author_avatar.alt';
        $translatableProperties['reviews']['slides'][] = 'name';
        return $translatableProperties;
    }
);

Один и тот же фильтр работает как для простых элементов управления, так и для полей репитера — отдельного хука для репитеров не существует.

Перевод ссылок на сущности

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

Тип ссылкиФильтр
Custom posts и медиафайлыgatompl:elementor_widget_type_custompost_and_media_reference_properties
Термины таксономииgatompl:elementor_widget_type_taxonomy_term_reference_properties
Меню по IDgatompl:elementor_widget_type_menu_reference_by_id_properties
Меню по sluggatompl:elementor_widget_type_menu_reference_by_slug_properties

Структура та же, что и у фильтра переводимых свойств — простые имена, точечные пути или подмассивы для репитеров.

// Custom post / media reference
add_filter(
    'gatompl:elementor_widget_type_custompost_and_media_reference_properties',
    static function (array $properties): array {
        $properties['featured-post'][] = 'post_id';
        $properties['gallery']['items'][] = 'image_id';
        return $properties;
    }
);
 
// Taxonomy term reference
add_filter(
    'gatompl:elementor_widget_type_taxonomy_term_reference_properties',
    static function (array $properties): array {
        $properties['related-category'][] = 'category_id';
        return $properties;
    }
);
 
// Menu reference by ID
add_filter(
    'gatompl:elementor_widget_type_menu_reference_by_id_properties',
    static function (array $properties): array {
        $properties['menu-picker'][] = 'menu_id';
        return $properties;
    }
);
 
// Menu reference by slug
add_filter(
    'gatompl:elementor_widget_type_menu_reference_by_slug_properties',
    static function (array $properties): array {
        $properties['menu-picker'][] = 'menu_slug';
        return $properties;
    }
);

Обнаружение имён виджетов и свойств

Запустите GraphQL-запрос Translate custom posts и проверьте поле elementorData в ответе. Каждый виджет отображает свой widgetType и дерево settings — именно там вы найдёте имена свойств (включая вложенные точечные пути и поля репитера), которые нужно передать в хуки выше.

Проверка elementorData в ответе GraphQL запроса Translate custom posts
Проверка elementorData в ответе GraphQL запроса Translate custom posts

Смотрите руководство Получение данных конструктора страниц для перевода, чтобы узнать, как запустить этот запрос.

Где найти примеры

Собственные интеграции плагина являются полезным справочником. Изучите этот файл внутри установленного плагина:

  • wp-content/plugins/gato-ai-translations-for-polylang/src/ConditionalOnContext/LicenseIsActive/ConditionalOnModule/Elementor/Constants/WidgetTypes.php