Думаю, я знайшов рішення, але раніше трохи
Приміщення
load_theme_textdomain()
і load_child_theme_textdomain()
вони в основному рівні, єдиною різницею є шлях, який вони використовують за замовчуванням:
- вони отримують поточну мову (використовуючи
get_locale()
) і додають відносний файл .mo до шляху, пройденого як аргумент;
- тоді вони називають
load_textdomain()
передачу як аргумент і textdomain, і результуючий шлях до файлу .mo.
Потім load_textdomain
завантажує файл .mo у глобальну змінну textdomain, але, як ми можемо прочитати з джерела :
Якщо домен уже існує, переклади будуть об'єднані.
Якщо обидва набори мають однаковий рядок, буде взято переклад з вихідного значення.
Отже, для того, щоб замінити / замінити лише рядки батьківського теми, які ми хочемо, нам потрібно завантажити користувальницький .mo-файл для батьківського textdomain, що містить лише ті перекладені рядки, перш ніж батьківська тема завантажить його .mo-файл.
Рішення
Врешті-решт я просто створив папку з назвою батьківської теми (просто для зручності) у папку з мовою дочірньої теми, і вклав всередину її власні .mo файли для батьківського текстового домену (один для мови, у xx_XX.mo
формі, де xx_XX
код мови).
А потім я додав рядок у functions.php
файл дочірньої теми під час after_setup_theme
дії, поруч із файлом, який завантажує файл .mo для текстового домену теми для моєї дитини:
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
, як сказано в приміщенні, все було б так само.