Intereting Posts
Как сделать страницу архива, отображающую сообщения в диапазоне дат Как показать местоположение конкретного пользователя внутри сообщений? Город, штат и т. Д. Лучший способ прервать плагин в случае недостаточной версии PHP? Якорь удалено из DIV после использования Quick Edit Нижний колонтитул WordPress отсутствует после взлома веб-сайта Рейтинг WordPress по просмотрам Добавлено if statement to loop Форматирование даты / времени, возвращаемого из пользовательского запроса $ wpdb Выделение нескольких слов сразу Не удается сохранить виджет Сортировка: пользовательский запрос с orderby meta_value_num THEN по названию Отключить перетаскивание TinyMCE Лучший способ создать поиск по типу персонализированного пользовательского значения поля Какую привязку использовать для загрузки пользовательского расширения класса во время инициализации темы? Как ограничить страницу

Переопределение перевода родительских тегов по дочерней теме

У меня есть родительская тема, которая правильно использует load_theme_textdomain() для загрузки всех переведенных строк на многие языки.

Затем я создал load_child_theme_textdomain() тему, которая использует load_child_theme_textdomain() для достижения той же самой цели для своих строк.

Есть определенные переведенные строки для определенного языка в родительской теме, которые я хотел бы заменить / переопределить в дочерней теме.

Я знаю, были ли они в файле шаблона, я мог заменить файл и просто изменить textdomain для этих строк, но, к сожалению, те, о которых я говорю, используются во многих местах, а также в панели инструментов (поэтому внутри некоторых функций фильтра / действия ).

Поэтому мой вопрос: есть ли способ заменить те переведенные строки внутри дочерней темы, не заменяя исходные файлы или функции шаблонов шаблонов?

Я не знаю, возможно, добавив файл parent-theme.mo в папку языков дочерней темы только с переведёнными строками или что-то в этом роде.

Solutions Collecting From Web of "Переопределение перевода родительских тегов по дочерней теме"

Я думаю, что нашел решение, но до

посылка

load_theme_textdomain() и load_child_theme_textdomain() в основном равны, единственное различие – путь по умолчанию, который они используют:

  • они получают текущий язык (используя get_locale() ) и добавляют относительный .mo- файл к пути, переданному как аргумент;
  • то они вызывают load_textdomain() передавая как аргумент как textdomain, так и результирующий путь к файлу .mo.

Затем load_textdomain загружает файл .mo в глобальную переменную textdomain, но, как мы можем прочитать из источника :

Если домен уже существует, переводы будут объединены.

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

Итак, чтобы переопределить или заменить только те строки родительской темы, которые мы хотим, нам нужно загрузить пользовательский .mo-файл для родительского textdomain, содержащий только те строки, которые были переведены, прежде чем родительская тема загрузит его .mo-файл.


Решение

В конце концов, я просто создал папку с именем родительской темы (только для удобства) в папку дочерних языковых языков и поместил в нее свои собственные .mo-файлы для родительского textdomain (один для языка, в xx_XX.mo form, где xx_XX – код языка).

И затем я добавил строку в файл after_setup_theme дочерней темы во время действия after_setup_theme , рядом с тем, который загружает файл .mo для моей дочерней темы textdomain:

 add_action( 'after_setup_theme', function () { // load custom translation file for the parent theme load_theme_textdomain( 'parent-textdomain', get_stylesheet_directory() . '/languages/parent-theme' ); // load translation file for the child theme load_child_theme_textdomain( 'my-child-theme', get_stylesheet_directory() . '/languages' ); } ); 

Поскольку файл functions.php дочерней темы загружается до родительского, этот набор строк будет иметь приоритет над переводом родительской темы (или я мог бы просто установить приоритет, используя третий параметр функции add_action ).


Примечание. Я мог бы использовать load_child_theme_textdomain вместо load_theme_textdomain , так как в предположении, что это было бы одинаково.

Вы можете использовать языковые файлы, которые находятся в папке ваших дочерних тем. Сначала вы должны знать, какой текстовый домен использует родительская тема. Затем создайте файлы .po и .mo только с вашим языком в качестве имени файла (например, de_DE.po / de_DE.mo или nl_NL.po / nl_NL.mo) и поместите их в папку в каталоге дочерних тем, «языки», например.

Затем вы можете инициализировать текстовый домен с помощью load_child_theme_textdomain() :

 load_child_theme_textdomain( 'the_text_domain', get_stylesheet_directory() . '/languages/' ); 

Обратите внимание, что текстовый домен можно найти, ища вызовы функций, такие как __() или _e() в родительских файлах PHP. Второй параметр – это текстовый домен: __( 'Translated text string', 'text_domain' );