Penso di aver trovato una soluzione, ma prima un po '
Premessa
load_theme_textdomain()e load_child_theme_textdomain()sono sostanzialmente uguali, l'unica differenza è il percorso predefinito che usano:
- ottengono la lingua corrente (usando
get_locale()) e aggiungono il relativo file .mo al percorso passato come argomento;
- quindi chiamano
load_textdomain()passando come argomento sia il textdomain sia il percorso risultante al file .mo.
Poi load_textdomaincarica il file .mo nella variabile textdomain globale, ma come si può leggere dalla fonte :
Se il dominio esiste già, le traduzioni verranno unite.
Se entrambi gli insiemi hanno la stessa stringa, verrà presa la traduzione dal valore originale.
Quindi, al fine di sovrascrivere / sostituire solo le stringhe del tema principale che vogliamo, dobbiamo caricare un file .mo personalizzato per il dominio di testo principale, contenente solo quelle stringhe tradotte, prima che il tema principale carichi il suo file .mo.
Soluzione
Alla fine, ho semplicemente creato una cartella con il nome del tema principale (solo per comodità) nella cartella delle lingue del tema figlio e ho inserito al suo interno i miei file .mo personalizzati per il dominio di testo principale (uno per la lingua, nel xx_XX.momodulo, dov'è xx_XXil codice della lingua).
E poi ho aggiunto una riga nel functions.phpfile del tema del mio bambino durante l' after_setup_themeazione, vicino a quella che carica il file .mo per il mio dominio del testo del tema del bambino:
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' );
} );
Poiché il functions.phpfile del tema figlio viene caricato prima di quello del padre, questo set di stringhe avrà la precedenza sulla traduzione del tema padre (o avrei potuto semplicemente impostare la priorità usando il terzo parametro della add_actionfunzione).
Nota: avrei potuto usare load_child_theme_textdomaininvece di load_theme_textdomain, come detto nella premessa, sarebbe stato lo stesso.