web-dev-qa-db-fra.com

Changer la langue de l'administrateur en fonction de l'utilisateur (sur un seul site)

J'essaie de créer un petit plugin à installer sur certains sites d'un client allemand.

Je peux me débrouiller dans WordPress en allemand, mais ce serait plus facile si c'était en anglais.

Il existe un plugin qui gère cela ( WP Native Dashboard ) et, même s'il le fait à merveille, il pèse trop lourd pour ce dont j'ai besoin. Le client n'a pas besoin de ça, moi aussi.
J'ai essayé de l'imiter en vain… Il stocke une option de base de données pour vérifier la permutation au lieu de $current_user. Mais je n'ai pas compris la logique pour que cela fonctionne.

Donc, j'essaye d'adapter cette solution donnée par toscho , mais on dirait que je ne fais pas les crochets dans les points corrects du processus WordPress.

La question est: quel bit manque (ou je déconne) dans le code suivant?

<?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, je suis enfin arrivé au coeur de WP Native Dashboard concept de base et ça marche maintenant.

Le fichier est utilisé en tant que mu-plugin et chaque fois que je dois travailler sur le site, je le renomme de set-user-locale.phpa à set-user-locale.php, puis de nouveau. Activer et désactiver ainsi sans que le plugin soit à la vue du client.

[update]
Suivant le conseil de kaiser, ce plugin apparaît uniquement dans la liste des plugins de l'utilisateur défini lors du lancement de la classe (le même que celui pour lequel la langue a été modifiée).
Le plugin est maintenant situé à la racine du dossier des plugins habituels.

[mise à jour 2]
Nouvelle version: traite uniquement du coeur de la question. Pour la partie cachée, j'utilise une autre technique . Comme la version 1.2 avait la faille de ne se cacher automatiquement que lorsqu'elle était active.

<?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