web-dev-qa-db-ja.com

ユーザーに基づいて管理言語を変更する(単一サイト内)

私はドイツのクライアントのいくつかのサイトにインストールするための小さなプラグインを作ろうとしています。

私はドイツ語で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();
9
brasofilo

さて、ついに WP Native Dashboard 基本概念の中核を成し遂げました、そしてそれは今働いています。

ファイルはmu-pluginとして使用されています、そして私がサイトで作業しなければならないときはいつでも私はset-user-locale.phpaからset-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' ) );
8
brasofilo