我正在使用WordPress和WPML(翻译插件WPML)构建一个双语网站,也用于处理我使用Theme my login的登录和注册,但由于它与WPML不兼容,我必须找到一个替代方案(尝试清理登录)但仍然没有运气 .

我遇到主题登陆的问题;它不支持两种语言的模板只有英语部分(另一种语言是阿拉伯语),而使用clean-login你不能修改它的模板(我需要在用户注册时添加一些字段) .

最后我按照link中的教程来构建我自己的登录和注册插件,问题是我被重定向到用户配置文件(这是正确的行为),但它没有从登录页面保持相同的语言,而是重定向到虽然我尝试从阿拉伯语登录页面登录,但使用默认语言的用户配置文件 .

我为语言重定向问题尝试了几个修复程序;比如尝试使用wp语言环境过滤器通过custom function修改语言环境,或者使用$ _GET ['lang']上的条件来修改语言环境,遗憾的是没有任何效果 .

我尝试使用$ _GET ['lang']参数尝试的各种解决方案的示例;在自定义插件类中设置公共变量($ site_lang):

public $site_lang;
public function __construct() {

    global $sitepress;
    $current_lang = $sitepress->get_current_language();

    if ( isset($_GET['lang']) && $_GET['lang'] == 'ar'){
        $this->site_lang = 'ar';
    }else{
        $this->site_lang = 'en_US';
    }
}

通过插件WP_SESSION使用会话的另一种变体

global $sitepress;
$current_lang = $sitepress->get_current_language();
$wp_session = WP_Session::get_instance(); 
$wp_session['act_lang'] = 'ar';
if (!isset($_GET['lang'])){
    $wp_session['act_lang'] = 'en';
}else{
    $wp_session['act_lang'] = 'ar';
}
$this->site_lang = $wp_session['act_lang'];

注册错误函数的重定向,这是处理重定向的许多函数之一,我在这里作为一个例子说明我如何使用公共变量进行重定向

public function maybe_redirect_at_authenticate( $user, $username, $password ) {

    if( $_SERVER['REQUEST_METHOD'] === 'POST' ) {

      $login_url = ($this->site_lang == 'ar') ? site_url( 'تسجيل-الدخول/?lang=ar' ) 
      : home_url( 'member-login' );
      $login_url = add_query_arg( array('login' => $error_codes), $login_url );
      wp_redirect( $login_url );

    }
}

如果有人有解决方案如何在重定向后保持语言相同,我真的很感激帮助 .