Cambiar el idioma de administración según el usuario (en un solo sitio)

9

Estoy intentando crear un pequeño complemento para instalarlo en algunos sitios de un cliente alemán.

Puedo hacer WordPress en alemán, pero sería más fácil si estuviera en inglés.

Hay un complemento que administra esto ( WP Native Dashboard ) y aunque lo hace maravillosamente, es demasiado pesado para lo que necesito. El cliente no necesita esto, yo sí.
Intenté emularlo en vano ... Almacena una opción de base de datos para verificar el intercambio en lugar de $current_user . Pero no entendí la lógica para que esto funcione.

Por lo tanto, estoy tratando de adaptar esta solución dada por toscho , pero parece que no estoy Haciendo los ganchos en los puntos correctos del proceso de WordPress.

La pregunta es: ¿qué bit falta (o estoy desordenado) en el siguiente código?

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

1 respuesta

8

Bien, finalmente llegué al núcleo del WP Native Dashboard concepto básico y está funcionando ahora.

El archivo se está utilizando como mu-plugin , y cada vez que tengo que trabajar en el sitio, lo renombro de set-user-locale.phpa a set-user-locale.php y luego vuelvo otra vez. De este modo, se activa y desactiva sin que el complemento esté a la vista del cliente.

[actualizar]
Siguiendo la sugerencia de kaiser, este complemento solo aparece en la lista de complementos para el usuario definido al iniciar la clase (el mismo para el cual se modifica el idioma).
El complemento ahora se encuentra en la raíz de la carpeta de complementos normales.

[actualización 2]
Nueva versión: trata solo con el núcleo de la pregunta. Para la parte oculta, estoy usando otra técnica . Como la versión 1.2 tenía el defecto de que solo se ocultaba automáticamente cuando estaba activa.

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

Lea otras preguntas en las etiquetas