Kullanıcıya göre yönetici dilini değiştirme (tek sitede)


9

Alman bir istemcinin bazı sitelerine yüklemek için küçük bir eklenti yapmaya çalışıyorum.

Almanca WordPress etrafında yolumu yapabilirim, ancak İngilizce olsaydı daha kolay olurdu.

Bunu yöneten bir eklenti var ( WP Native Dashboard ) ve harika bir şekilde yapmasına rağmen, ihtiyacım olan şey için çok ağır. Müşteri buna ihtiyaç duymaz, ben de isterim.
Boşuna öykünmek için çalıştı ... Yerine takas kontrol etmek için bir veritabanı seçeneği saklar $current_user. Ama bunun çalışması için mantık alamadım.

Bu yüzden, toscho tarafından verilen bu çözümü uyarlamaya çalışıyorum , ancak WordPress sürecinin doğru noktalarında kancaları yapmıyorum gibi görünüyor.

Soru şudur: Aşağıdaki kodda hangi bit eksik (veya karıştırıyorum) ?

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

Deneyin admin_init. Sonra bırakın is_admin();ve $current_usergerçekten adlı bir alt nesne içerip içermediğini görün data.
kaiser

@kaiser - hayır, admin_inithiçbiri - ve evet, $current_usernüfuslu, hata ayıklamak için FirePHP kullanıyorum ... teşekkürler!
brasofilo

Tamam, ben $current_user->datanüfuslu olup olmadığını sordum :) Artı: çekler olmadan çalışıyor mu?
kaiser

@kaiser - Sorudaki kodu değiştirdim - Kontrol etmezsem işe yarar $current_user- Çok komik çünkü bilgi var ...
brasofilo

@kaiser - işe yaradı, ne düşünüyorsun? Teşekkürler!
brasofilo

Yanıtlar:


8

Tamam, nihayet WP Native Dashboard temel kavramının özüne ulaştım ve şimdi çalışıyor.

Dosya bir şekilde kullanılıyor mu-pluginve ben sitedeki işe sahip olduğunda ben onu adlandırmak set-user-locale.phpaiçin set-user-locale.phpdaha sonra tekrar ve. Böylece eklenti müşterinin görüşünde olmadan etkinleştirme ve devre dışı bırakma.

[update]
Kaiser öğesinin ipucunu takiben, bu eklenti yalnızca sınıfı başlatırken tanımlanan kullanıcı için eklenti listesinde görünür (dilin değiştirildiği ile aynıdır).
Eklenti artık normal eklentiler klasörünün kökünde bulunmaktadır.

[güncelleme 2]
Yeni sürüm: yalnızca sorunun özüyle ilgilidir. Saklanan kısım için başka bir teknik kullanıyorum . Sürüm 1.2 sadece aktif olduğunda sadece otomatik gizleme kusuru vardı.

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

Tıklamak de-/activatedaha kolay olmaz mıydı? ;) Çalıştığını görmek güzel. +1
kaiser

1
@kaiser - güzel ilham ama bu diğer filtreyi kullanarak sona erdi ... ve kodu güncelledi, şimdi pürüzsüz ve yuvarlanmaya hazır; o)
brasofilo

1
Bu çok temiz. WPMS için işe yarayacak mı acaba? Bu çok dilli ekipler için harika olurdu. Teşekkürler!
moraleida

1
@moraleida: evet, öyle! Sadece bir mu-eklenti olarak ve iki süper yönetici kullanıcıyla test edildi.
brasofilo

1
Müthiş! Eđer yapabilseydim bunu iki kere vurabilirdim. :)
moraleida
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.