wake-up-neo.net

So überschreiben Sie Sprachdateien in wp-content/languages ​​/ themes mit untergeordnetem Thema

Ich möchte ein untergeordnetes Thema für das TwentyFifteen-Thema erstellen, mit dem viele Dinge angepasst werden können, einschließlich der Übersetzung. Wenn ich WordPress in meiner Sprache (Farsi) installiere, enthält es fünfundzwanzig Sprachdateien in wp-content/languages/themes

Wenn ich also einen Ordner languages in meinem untergeordneten Design erstelle und diesem angepasste Sprachdateien hinzufüge und load_theme_textdomain( 'twentyfifteen', get_stylesheet_directory() . '/languages' ) zum functions.php meines untergeordneten Themas hinzufüge, werden meine angepassten Sprachdateien nicht geladen und stattdessen die Dateien in wp-content/languages/themes. Was kann ich tun, um diese Dateien zu überschreiben?

1
Omid Mohammadi

Da WP 4.6 load_theme_textdomain() (und folglich load_child_theme_textdomain()) .mo-Dateien, die von der Online-Übersetzungsplattform von WP (translate.wordpress.org) heruntergeladen wurden, Vorrang einräumen. Aufgrund eines neuen Codes ( hier in Zeile 769 ) ignorieren diese Funktionen Ihre lokalen .mo-Dateien vollständig, wenn sich die Textdomäne im allgemeinen Verzeichnis languages ​​/ befindet.

Sie können jedoch die grundlegendere Funktion load_textdomain() verwenden, um Ihre MO-Datei direkt zu laden und Zeichenfolgen aus der ursprünglichen Domain zu überschreiben.

$domain = 'textdomain-to-override';
$path = get_stylesheet_directory() . '/languages/'; // adjust to the location of your .mo file

$locale = apply_filters( 'theme_locale', get_locale(), $domain );
load_textdomain( $domain, $path . $locale . '.mo' );
2
Henrique Vianna

Hier ist ein Zitat aus der Quelle von load_textdomain (in WP 4.6):

Wenn die Textdomäne bereits vorhanden ist, werden die Übersetzungen zusammengeführt. Wenn beide Sätze den gleichen String haben, wird die Übersetzung vom ursprünglichen Wert übernommen.

Mit anderen Worten, damit Ihre Übersetzung TwentyFifteen's überschreibt, müssen Sie sicherstellen, dass Ihre Mo-Dateien zuerst geladen werden, damit sie als "das Original" betrachtet werden. Dazu können Sie die Tatsache verwenden, dass der functions.php eines untergeordneten Themas vor dem des übergeordneten Themas geladen wird.

Suchen Sie im übergeordneten Thema die Funktion, die die Textdomäne lädt. Es wird wahrscheinlich der Haken after_setup_theme verwendet. Stellen Sie sicher, dass Ihr untergeordnetes Thema dieselbe Textdomäne wie das übergeordnete Thema verwendet. Laden Sie dann Ihre Textdomain mit load_child_theme_textdomain am selben Hook, jedoch mit höherer Priorität .

1
cjbj