问题描述
我试图在一个德国客户的某些网站上安装一个小插件。
我可以在德语中填写 WordPress 的方式,但如果是英文,会更容易。
有一个管理这个 (WP Native Dashboard) 的插件,虽然它奇怪,它对我需要的重量太重了。客户不需要这个,我做。试图模拟它无效… 它存储一个数据库选项来检查交换而不是 $current_user
。但是我没有得到这个工作的逻辑。
所以,我正在尝试改编这个 solution given by 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();
最佳解决方案
好的,终于到了 WP Native Dashboard 的基本概念的核心,它现在正在工作。
该文件被用作 mu-plugin
,每当我在网站上工作时,我将其从 set-user-locale.phpa
重命名为 set-user-locale.php
,然后再次重命名。因此激活和停用,而插件不在客户端的视线。
[更新] 遵循 kaiser 的提示,此插件仅在启动类时定义的用户的插件列表中显示 (与该语言相同的类) 。该插件现在位于常规插件文件夹的根目录。
[更新 2] 新版本:仅处理问题的核心。对于隐藏部分,我使用的是 another technique 。由于版本 1.2 在活动时仅具有 auto-hiding 的缺陷。
<?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' ) );
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。