ব্যবহারকারীর ভিত্তিতে প্রশাসক ভাষা পরিবর্তন করুন (একক সাইটে)


9

আমি একটি জার্মান ক্লায়েন্টের কয়েকটি সাইটে ইনস্টল করার জন্য একটি ছোট প্লাগইন তৈরি করার চেষ্টা করছি।

আমি জার্মান ভাষায় ওয়ার্ডপ্রেস ঘুরে দেখতে পারি, তবে এটি ইংরেজী হলে আরও সহজ হত।

এটি ( ডাব্লুপি নেটিভ ড্যাশবোর্ড ) পরিচালনা করে এমন একটি প্লাগইন রয়েছে এবং এটি আশ্চর্যজনকভাবে এটি করেও, এটি আমার যা প্রয়োজন তা থেকে খুব ভারী ওজন। ক্লায়েন্টের এটির দরকার নেই, আমি করি।
এটিকে কোনও লাভ হয়নি বলে অনুকরণ করার চেষ্টা করা হয়েছে ... এটি পরিবর্তে অদলবদল পরীক্ষা করার জন্য একটি ডাটাবেস বিকল্প সঞ্চয় করে $current_user। তবে আমি এটির জন্য যুক্তি পেলাম না।

সুতরাং, আমি টসচো দ্বারা প্রদত্ত এই সমাধানটি মানিয়ে নেওয়ার চেষ্টা করছি , তবে দেখে মনে হচ্ছে যে আমি ওয়ার্ডপ্রেস প্রক্রিয়ার সঠিক পয়েন্টগুলিতে হুকগুলি তৈরি করছি না।

প্রশ্নটি হচ্ছে: নিম্নলিখিত কোডটিতে কোন বিটটি অনুপস্থিত (বা আমি গণ্ডগোল করছি) ?

<?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
কায়সার

@ কেজার - না, admin_initনা - এবং হ্যাঁ, $current_userজনবহুল, আমি ডিবাগিংয়ের জন্য ফায়ারএইচপি ব্যবহার করি ... ধন্যবাদ!
brasofilo

ঠিক আছে, আমি জিজ্ঞাসা করেছি $current_user->dataজনবহুল কিনা :) প্লাস: এটি চেকগুলি w / o কাজ করে?
কায়সার

@ কাইজার - আমি প্রশ্নের কোডটি সংশোধন করেছি - আমি যদি এটি পরীক্ষা না করি তবে এটি কাজ করে $current_user- এটি বেশ মজার কারণ তথ্যটি এখানে ...
ব্রাসোফিলো

@ কাইজার - এটি কাজ করেছে, আপনার কি মনে হয়? ধন্যবাদ!
brasofilo

উত্তর:


8

ঠিক আছে, অবশেষে ডাব্লুপি নেটিভ ড্যাশবোর্ডের মৌলিক ধারণাটি পেয়েছে এবং এটি এখন কাজ করছে।

ফাইলটি একটি হিসাবে ব্যবহার করা হচ্ছে 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
@ কাইজার - দুর্দান্ত অনুপ্রেরণা তবে এই অন্যান্য ফিল্টারটি ব্যবহার করে শেষ হয়েছে ... এবং কোডটি আপডেট করেছে, এখন এটি মসৃণ এবং রোল করার জন্য প্রস্তুত; ও)
ব্রাসোফিলো

1
এটি পরিষ্কারভাবে ঝরঝরে। আমি ভাবছি এটি কি ডাব্লুপিএমএসের জন্য কাজ করবে? বহুভাষিক দলগুলির জন্য এটি দুর্দান্ত। ধন্যবাদ!
মোরালিদা

1
@ মোড়ালেদা: ​​হ্যাঁ, তা হয়! মাত্র একটি মিউ-প্লাগইন হিসাবে এবং দুটি সুপার-অ্যাডমিন ব্যবহারকারীদের সাথে পরীক্ষিত।
brasofilo

1
অসাধারণ! যদি আমি পারতাম তবে এই দু'বার উপস্থাপন করব। :)
মোরালিদা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.