Alterar a linguagem administrativa com base no usuário (no site único)

9

Estou tentando fazer um pequeno plugin para instalar em alguns sites de um cliente alemão.

Eu posso fazer meu caminho pelo WordPress em alemão, mas seria mais fácil se fosse em inglês.

Há um plug-in que gerencia isso ( WP Native Dashboard ) e, embora ele faça isso maravilhosamente, é muito pesado para o que eu preciso. O cliente não precisa disso, eu faço.
Tentei imitá-lo sem sucesso ... Ele armazena uma opção de banco de dados para verificar se há troca em vez de $current_user . Mas eu não entendi a lógica para isso funcionar.

Então, estou tentando adaptar essa solução dada por toscho , mas parece que não sou fazendo os ganchos nos pontos corretos do processo do WordPress.

A pergunta é: que parte está faltando (ou estou mexendo) no código a seguir?

<?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();
    
por brasofilo 25.05.2012 / 20:40

1 resposta

8

Ok, finalmente cheguei ao núcleo do WP Native Dashboard conceito básico e está funcionando agora.

O arquivo está sendo usado como mu-plugin e, sempre que preciso trabalhar no site, renomeio-o de set-user-locale.phpa para set-user-locale.php e, em seguida, de volta. Assim, ativando e desativando sem o plugin estar à vista do cliente.

[atualizar]
Seguindo a dica do Kaiser, este plugin só aparece na lista de plugins para o usuário definido ao iniciar a classe (a mesma para a qual o idioma é alterado). O plugin agora está localizado na raiz da pasta de plugins normal.

[atualização 2]
Nova versão: lida apenas com o núcleo da questão. Para a parte oculta, estou usando outra técnica . Como a versão 1.2 tinha a falha de apenas auto-esconder quando ativo.

<?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' ) );
    
por brasofilo 29.05.2012 / 23:27