Dynamisches Ändern der Sprache Ihrer WordPress-Site (Gebietsschema).
Es gibt einige fantastische mehrsprachige Plugins für WordPress, aber für ein Kundenprojekt brauchte ich etwas viel Flexibleres, da dieser spezielle Kunde mehrere Länder bedienen musste, die jeweils mehrere Sprachen sprachen.
Kurz gesagt, der Client musste in der Lage sein, eine Multisite-Instanz zu haben, bei der ein Land und eine Sprache als Standard festgelegt waren, und die Möglichkeit, das Land und die Sprache auf jeder Seite / jedem Beitrag zu überschreiben.
Erstellen eines mehrsprachigen Plugins
Wenn mich genug Leute nerven, kann ich in Betracht ziehen, das Ganze als eigenständiges Plugin zu veröffentlichen, aber das Herzstück des mehrsprachigen Plugins, das ich baue, beruht auf dem localeWordPress-Filter, und das Herzstück des Plugins befindet sich im folgenden Code-Snippet:
function wholesomecode_example_redefine_locale( $locale) {
$country = get_post_meta( get_the_id(), '_wholesomecode_example_global_country_override', true );
$lang = get_post_meta( get_the_id(), '_wholesomecode_example_global_language_override', true );
if (( empty( $lang) ||! (is_page() || is_single() || is_singular()) )) {
$country = get_theme_mod( 'wholesomecode_example_multilingual_country', 'gb' );
$lang = get_theme_mod( 'wholesomecode_example_multilingual_language', 'en' );
}
if ('default' !== $country) {
$locale = $lang. '_'. strtoupper( $country );
} else {
$locale = $lang. '-'. $country;
}
return $locale;
}
add_filter( 'locale', 'wholesomecode_example_redefine_locale', 10 );
Tada! Ihr Gebietsschema ist jetzt eingestellt und Ihre mehrsprachige Website sollte jetzt die Sprache basierend auf Ihrem Seiten-/Website-Meta ändern.
Warte ab! Meine WordPress-Core-Standardübersetzungen funktionieren nicht!
Dies ist ein Problem, auf das ich gestoßen bin und das ich für mein ganzes Leben nicht herausfinden konnte. Mein Theme wurde perfekt übersetzt, nachdem ich die relevanten .mo- und .po-Dateien hinzugefügt hatte, aber die Standardübersetzungen des WordPress-Kerns (wie die Nachricht „Hinterlasse eine Antwort“ in der Kommentarvorlage) wurden nicht übersetzt.
Es stellte sich heraus, dass die Lösung ziemlich einfach war! Obwohl ich für benutzerdefinierte Domain-Übersetzungen gesorgt hatte, hatte ich vergessen, ein einfaches Code-Bit in mein Design einzufügen: load_default_textdomain().
load_default_textdomain();
Wenn ich Ihnen mit diesem "einen seltsamen Tipp" ein paar Stunden beim Debuggen gespart habe, sind Sie herzlich willkommen!