Ändern Sie die WordPress-Sprache basierend auf den Benutzereinstellungen

Ich möchte die Sprache meiner WordPress-Installation ändern, basierend auf einer Auswahl, die der Benutzer in seinem Profil treffen kann (Dropdown-Menü).

Da ich das Frontend (vorbereitete .mo-Dateien für das Theme) und die Backend-Sprache ändern möchte, dachte ich, ich könnte die $locale Variable ändern und es würde funktionieren.

Also habe ich den folgenden Code in meiner functions.php aber das wird nicht funktionieren:

  function change_lang () {
    get_currentuserinfo ();
    $ lang = get_user_meta ($ current_user-> ID, 'user_lang');
    $ locale = $ lang [0];
    Rückgabe $ Gebietsschema;
 }
 add_filter ('locale', 'change_lang'); 

Wenn ich den Wert von $locale , gibt WP einen einfachen NULL , nichts mehr. Wenn ich den Hook loslasse, wird der definierte Wert von WP_LANG() zurückgegeben.

Also bin ich offensichtlich irgendwo falsch, aber ich kann nicht finden wo. Irgendwelche Hinweise?

Außerdem: Ich lese das für Inspiration und Code , aber ich möchte es nicht als Plugin haben, wenn es möglich ist.

Danke im Voraus!

Edit: Mein Code wurde korrigiert, aber es passiert immer noch keine Sprachänderung.

Solutions Collecting From Web of "Ändern Sie die WordPress-Sprache basierend auf den Benutzereinstellungen"

Ihre Verwendung von $current_user ist etwas falsch, Sie sollten den global $current_user einschließen oder ihn einer Variable zuweisen, oder kürzer und sauberer nur get_current_user_id() :

 add_filter('locale', 'change_lang'); function change_lang( $locale ) { if( $lang = get_user_meta( get_current_user_id(), 'user_lang', true) ) { return $lang; } return $locale; } 

Meinst du diese Option?

Bildbeschreibung hier eingeben

Wenn ja, dann …

 $user_locale = get_user_locale(); function change_userlang_by_userlocale($locale){ global $user_locale; return $user_locale ? $user_locale : $locale; } add_filter('locale','change_userlang_by_userlocale');