Creo que encontré una solución, pero antes un poco
Premisa
load_theme_textdomain()
y load_child_theme_textdomain()
son básicamente iguales, la única diferencia es la ruta predeterminada que usan:
- obtienen el idioma actual (usando
get_locale()
) y agregan el archivo .mo relativo a la ruta pasada como argumento;
- luego llaman
load_textdomain()
pasar como argumento tanto el dominio de texto como la ruta resultante al archivo .mo.
Luego load_textdomain
carga el archivo .mo en la variable global de dominio de texto, pero como podemos leer en la fuente :
Si el dominio ya existe, las traducciones se fusionarán.
Si ambos conjuntos tienen la misma cadena, se tomará la traducción del valor original.
Entonces, para anular / reemplazar solo las cadenas del tema principal que queremos, necesitamos cargar un archivo .mo personalizado para el dominio de texto principal, que contenga solo esas cadenas traducidas, antes de que el tema principal cargue su archivo .mo.
Solución
Al final, simplemente creé una carpeta con el nombre del tema principal (solo por conveniencia) en la carpeta de idiomas del tema secundario, y puse dentro mis archivos personalizados .mo para el dominio de texto primario (uno para el idioma, en el xx_XX.mo
formulario, donde xx_XX
está el código del idioma).
Y luego agregué una línea en mi functions.php
archivo de tema secundario durante la after_setup_theme
acción, cerca de la que carga el archivo .mo para mi dominio de texto de tema secundario:
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' );
} );
Debido a que el functions.php
archivo del tema secundario se carga antes que el principal, este conjunto de cadenas tendrá prioridad sobre la traducción del tema principal (o podría haber establecido la prioridad usando el tercer parámetro de la add_action
función).
Nota: podría haber usado en load_child_theme_textdomain
lugar de load_theme_textdomain
, como se dijo en la premisa, habría sido lo mismo.