根据用户更改管理语言(在单站点中)

时间:2012-05-25 作者:brasofilo

我正在尝试制作一个小插件,安装在一个德国客户端的一些站点上。

我可以用德语绕过WordPress,但如果用英语会更容易。

有一个插件可以管理这个(WP Native Dashboard) 虽然它做得很好,但它的重量太重了,无法满足我的需要。客户不需要这个,我需要<试图模仿它,但没有任何效果。。。它存储了一个数据库选项,用于检查交换,而不是$current_user. 但我没有弄明白为什么会这样。

所以,我正在尝试适应这个solution given by toscho, 但看起来我没有在WordPress过程的正确点上做钩子。

问题是:以下代码中缺少了什么位(或者我搞错了)?

<?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();

1 个回复
最合适的回答,由SO网友:brasofilo 整理而成

好了,终于讲到了WP Native Dashboard 基本概念和它的工作现在。

该文件正在用作mu-plugin, 每当我必须在该网站工作时,我都会将其重命名为set-user-locale.phpaset-user-locale.php, 然后再回来。因此,在客户端看不到插件的情况下激活和停用插件。

[update]
按照kaiser的提示,该插件仅显示在用户在初始化类时定义的插件列表中(与更改语言的插件列表相同)
插件现在位于常规插件文件夹的根目录下。

[update 2]<新版本:只涉及问题的核心。对于我使用的隐藏部分another technique. 由于版本1.2存在激活时仅自动隐藏的缺陷。

<?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\' ) );

结束