Ändern Sie die Administrationssprache basierend auf dem Benutzer (auf einer Site).

9

Ich versuche ein kleines Plugin zu erstellen, um es auf einigen Sites eines deutschen Clients zu installieren.

Ich kann mich auf Deutsch in WordPress zurechtfinden, wäre aber einfacher, wenn es auf Englisch wäre.

Es gibt ein Plugin, das dies verwaltet ( WP Native Dashboard ) und obwohl es wunderbar funktioniert, ist es zu schwer für das, was ich brauche. Der Kunde braucht das nicht, das tue ich.
Versucht, es ohne Erfolg zu emulieren ... Es speichert eine Datenbankoption, um zu prüfen, ob anstelle von Swapping $current_user. Aber ich habe die Logik dafür nicht verstanden.

Also versuche ich, diese von toscho gegebene Lösung anzupassen , aber es sieht so aus, als würde ich die Haken nicht an den richtigen Stellen des WordPress-Prozesses machen.

Die Frage ist: Welches Bit fehlt (oder ich vermassle es) im folgenden Code?

<?php
/*
Plugin Name: Set User Locale
Plugin URI: /wordpress//q/53326/12615
Description: changes the admin language according to user_login
Version: 1.0
Author: wordpress-stackexchange
*/

class Wpse53326_ChangeLocaleOnDemand
{

    public function __construct()
    {       
        add_action('admin_init', array(&$this, 'on_init'));
        add_filter( 'locale', array(&$this, 'on_change_language') );
    }

    public function on_init()
    {
    }

    public function on_change_language( $locale )
    {
        global $current_user;       

        // this prints the current user_login without problems 
        // global $firephp; 
        // $firephp->log($current_user->data->user_login,'user_login');

        //  the following works for backend/frontend
        // but if I try this conditional, it don't: if (is_admin() && 'the_user_login' == $current_user->data->user_login)
        if( is_admin() )
        {
            return 'en_US';         
        }
        return $locale;
    }
}

$wpse53326_ChangeLocaleOnDemand_instance = new Wpse53326_ChangeLocaleOnDemand();
brasofilo
quelle
Versuchen Sie es admin_init. Lassen Sie dann fallen is_admin();und sehen Sie, ob $current_useres wirklich ein Unterobjekt mit dem Namen enthält data.
Kaiser
@kaiser - nein, auch admin_initnicht - und ja, $current_userist gefüllt, ich benutze FirePHP zum Debuggen ... danke!
Brasofilo
Ok, ich habe gefragt, ob $current_user->dataes gefüllt ist :) Plus: Funktioniert es ohne die Schecks?
Kaiser
@kaiser - Ich habe den Code in der Frage geändert - Es funktioniert, wenn ich nicht nach dem $current_user
suche
@kaiser - hat es funktioniert, was denkst du? Vielen Dank!
Brasofilo

Antworten:

8

Ok, endlich zum Kern des Grundkonzepts von WP Native Dashboard gekommen und es funktioniert jetzt.

Die Datei wird als verwendet mu-plugin, und wenn ich auf der Site arbeiten muss, benenne ich sie von set-user-locale.phpain um set-user-locale.phpund dann wieder zurück. Aktivieren und Deaktivieren, ohne dass das Plugin in Sichtweite des Clients ist.

[update]
Nach dem Hinweis von kaiser wird dieses Plugin nur in der Plugin-Liste für den Benutzer angezeigt, der beim Initiieren der Klasse definiert wurde (dieselbe, für die die Sprache geändert wurde).
Das Plugin befindet sich jetzt im Stammverzeichnis des regulären Plugins-Ordners.

[Update 2]
Neue Version: Befasst sich nur mit dem Kern der Frage. Für das Verstecken verwende ich eine andere Technik . Da die Version 1.2 den Fehler hatte, sich nur automatisch zu verstecken, wenn sie aktiv war.

<?php
/*
Plugin Name: Admin interface in English for selected users
Plugin URI: /wordpress//a/52436/12615
Description: Edit this file to add/remove users from the list
Version: 1.5
Author: Rodolfo Buaiz
*/

class Wpse53326_ChangeLocaleOnDemand
{

    public function __construct( $the_user )
    {       
        $this->user = $the_user;
        add_filter( 'locale', array( $this, 'on_change_language' ) );
   }

    public function on_change_language( $loc )
    {
        if ( !is_admin() )
         return $loc;

        if ( function_exists( 'wp_get_current_user' ) ) 
        {
            $u = wp_get_current_user();
            if ( !isset($u->user_locale) ) 
            {
                if ( in_array( $u->data->user_login, $this->user ) )
                    $u->user_locale = '';
                else
                    $u->user_locale = 'de_DE';
            }
            return $u->user_locale;
        }

        return $loc;
    }

}

new Wpse53326_ChangeLocaleOnDemand( array( 'user1', 'User2' ) );
brasofilo
quelle
Wäre es nicht de-/activateeinfacher, einfach zu klicken ? ;) Schön zu sehen, dass es funktioniert. +1
Kaiser
1
@kaiser - nette Inspiration, aber mit diesem anderen Filter beendet ... und den Code aktualisiert, jetzt ist es glatt und bereit zu rollen; o)
brasofilo
1
Das ist wirklich ordentlich. Ich frage mich, ob es für WPMS funktionieren würde? Dies wäre fantastisch für mehrsprachige Teams. Vielen Dank!
Moralida
1
@moraleida: ja, das tut es! Gerade als Mu-Plugin und mit zwei Super-Admin-Benutzern getestet.
Brasofilo
1
Genial! Ich würde das zweimal positiv bewerten, wenn ich könnte. :)
Moralida