เปลี่ยนภาษาของผู้ดูแลระบบตามผู้ใช้ (ในเว็บไซต์เดียว)


9

ฉันพยายามสร้างปลั๊กอินขนาดเล็กเพื่อติดตั้งในบางเว็บไซต์ของลูกค้าชาวเยอรมัน

ฉันสามารถใช้ WordPress เป็นภาษาเยอรมัน แต่จะง่ายกว่าถ้าเป็นภาษาอังกฤษ

มีปลั๊กอินที่จัดการสิ่งนี้ ( WP Native Dashboard ) และแม้ว่ามันจะเป็นสิ่งที่มหัศจรรย์มันมีน้ำหนักมากเกินไปสำหรับสิ่งที่ฉันต้องการ ลูกค้าไม่ต้องการสิ่งนี้ฉันทำ
พยายามที่จะเลียนแบบมันจะไม่มีประโยชน์ ... $current_userมันเก็บเป็นตัวเลือกฐานข้อมูลเพื่อการตรวจสอบการแลกเปลี่ยนแทน แต่ฉันไม่ได้รับตรรกะสำหรับสิ่งนี้ในการทำงาน

ดังนั้นฉันจึงพยายามที่จะปรับแก้ปัญหานี้ให้โดย toschoแต่ดูเหมือนว่าฉันไม่ได้ทำ hooks ในจุดที่ถูกต้องของกระบวนการ 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 - admin_initไม่, ไม่ใช่ - และใช่, $current_userมีประชากรฉันใช้ FirePHP สำหรับการดีบัก ... ขอบคุณ!
brasofilo

ตกลงฉันถามว่า$current_user->dataมีประชากร :) บวก: มันใช้งานได้โดยไม่ต้องมีการตรวจสอบ?
ไกเซอร์

@kaiser - ฉันได้แก้ไขรหัสในคำถาม - มันใช้งานได้ถ้าฉันไม่ตรวจสอบ$current_user- มันค่อนข้างตลกเพราะข้อมูลมี ...
brasofilo

@kaiser - ทำงานได้คุณคิดอย่างไร ขอบคุณ!
brasofilo

คำตอบ:


8

ตกลงในที่สุดก็มาถึงแกนหลักของแนวคิดพื้นฐานWP Native Dashboardและตอนนี้ก็ใช้งานได้แล้ว

ไฟล์กำลังถูกใช้เป็น a mu-pluginและเมื่อใดก็ตามที่ฉันต้องทำงานในไซต์ฉันจะเปลี่ยนชื่อไฟล์จากset-user-locale.phpaเป็นset-user-locale.phpและจากนั้นกลับมาอีกครั้ง ดังนั้นการเปิดใช้งานและปิดใช้งานโดยไม่ต้องมีปลั๊กอินอยู่ในสายตาของลูกค้า

[อัปเดต]
ตามคำแนะนำของไกเซอร์ปลั๊กอินนี้จะแสดงเฉพาะในรายการปลั๊กอินสำหรับผู้ใช้ที่กำหนดเมื่อเริ่มต้นคลาส (อันเดียวกับที่เปลี่ยนภาษา)
ตอนนี้ปลั๊กอินจะอยู่ที่รูทของโฟลเดอร์ปลั๊กอินปกติ

[อัพเดต 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
ไกเซอร์

1
@kaiser - แรงบันดาลใจที่ดี แต่จบลงด้วยการใช้ตัวกรองอื่นนี้ ... และอัปเดตรหัสตอนนี้มันราบรื่นและพร้อมที่จะม้วน; o)
brasofilo

1
นี่คือ reeeeally เรียบร้อย ฉันสงสัยว่าจะใช้กับ WPMS ได้หรือไม่ นี่จะยอดเยี่ยมสำหรับทีมที่พูดได้หลายภาษา ขอบคุณ!
moraleida

1
@ Moraleida: ใช่มันทำ! เพิ่งทดสอบเป็น mu-plugin และกับผู้ใช้ super-admin สองคน
brasofilo

1
! น่ากลัว ฉันจะลงคะแนนสองครั้งนี้ถ้าทำได้ :)
moraleida
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.