it-swarm.com.de

Ändern der Administratorsprache basierend auf dem Benutzer (auf einer einzelnen Site)

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

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

Es gibt ein Plugin, das dieses verwaltet ( WP Native Dashboard ) und obwohl es es wunderbar macht, 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, die anstelle von $current_user auf Auslagerungen überprüft wird. Aber ich habe die Logik dafür nicht verstanden.

Also versuche ich, diese Lösung von toscho anzupassen, aber es sieht so aus, als würde ich nicht die richtigen Stellen im WordPress-Prozess festlegen.

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

<?php
/*
Plugin Name: Set User Locale
Plugin URI: https://wordpress.stackexchange.com/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();
9
brasofilo

Ok, bin endlich beim Kern des WP Native Dashboard Grundkonzepts angelangt und es funktioniert jetzt.

Die Datei wird als mu-plugin verwendet, und wenn ich auf der Site arbeiten muss, benenne ich sie von set-user-locale.phpa in set-user-locale.php um und dann wieder zurück. So aktivieren und deaktivieren, ohne dass das Plugin für den Kunden sichtbar ist.

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

[Update 2]
Neue Version: befasst sich nur mit dem Kern der Frage. Für den versteckenden Teil verwende ich eine andere Technik . Da die Version 1.2 den Fehler hatte, dass sie sich nur automatisch versteckte, wenn sie aktiv war.

<?php
/*
Plugin Name: Admin interface in English for selected users
Plugin URI: https://wordpress.stackexchange.com/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' ) );
8
brasofilo