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


9

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

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

有一个管理该插件的插件(WP Native Dashboard),尽管它做得非常好,但它太重了,无法满足我的需求。客户不需要这个,我需要。
试图模拟它无济于事...它存储一个数据库选项来检查交换而不是$current_user。但是我没有逻辑上可以做到这一点。

因此,我正在尝试采用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();

尝试admin_init。然后删除is_admin();并查看是否$current_user确实包含名为的子对象data
kaiser 2012年

@kaiser-不,admin_init不是,也不是- $current_user是的,我使用FirePHP进行调试...谢谢!
brasofilo 2012年

好的,我问是否$current_user->data已填充:)加:它在没有检查的情况下是否有效?
凯撒2012年

@kaiser-我已经修改了问题中的代码-如果我不检查$current_user它就可以了-很有趣,因为那里的信息...
brasofilo 2012年

@kaiser-运行正常,您怎么看?谢谢!
brasofilo 2012年

Answers:


8

好的,终于进入WP Native Dashboard基本概念的核心,并且现在可以正常工作。

该文件被用作mu-plugin,每次需要在站点中工作时,都将其从重命名set-user-locale.phpaset-user-locale.php,然后再次返回。这样就可以在客户端看不到插件的情况下进行激活和停用。

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

[更新2]
新版本:仅处理问题的核心。对于隐藏部分,我正在使用另一种技术。由于版本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' ) );

不仅仅是点击de-/activate会更容易吗?;)看到它正常工作。+1
Kaiser 2012年

1
@kaiser-很好的灵感,但是结束了使用其他过滤器的操作 ...并更新了代码,现在可以平滑滚动了; o)
brasofilo 2012年

1
这真是整洁。我想知道它是否适用于WPMS?这对于多语种团队来说真是太棒了。谢谢!
morideida

1
@moraleida:是的,确实如此!刚刚作为mu插件进行了测试,并且具有两个超级管理员用户。
brasofilo 2012年

1
太棒了!如果可以的话,我会两次投票。:)
Morideida
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.