使用WPML的多语言Wordpress自定义wp登录表单

时间:2017-08-07 05:38:20

标签: php wordpress wpml

在我的自定义Wordpress主题中,我有自定义登录表单:

<form method="post" action="<?php bloginfo('url') ?>/wp-login.php" name="login">
    <div class="login-form-container resp-hidden">
        <div class="login-form-container-inner">
            <h3 class="form-title"><?php echo __('Login', 'louise'); ?></h3>

            <label for="user_login">
                <?php echo __('User name or e-mail', 'louise'); ?>: </label>
            <input class="para-content" type="text" name="log" placeholder="" value="<?php echo esc_attr(stripslashes($user_login, $user_email)); ?>" size="20" id="user_login" tabindex="11" required>

            <label for="user_pass">
                <?php echo __('Password', 'louise'); ?>: </label>
            <input class="para-content" type="password" name="pwd" value="" size="20" id="user_pass" tabindex="12" required/>
            <label for="rememberme"> </label>

            <div class="buttons">
                <?php do_action('login_form'); ?>
                    <input type="submit" name="user-submit" value="<?php echo __('Log in', 'louise'); ?>" tabindex="14" class="signupbtn" />
                    <input type="hidden" name="redirect_to" value="<?php echo icl_get_home_url() ; ?>" />
                    <input type="hidden" name="user-cookie" value="1" />
            </div>
        </div>
    </div>
</form>

它完成了工作,但当我尝试使用不同于默认语言的登录时出现问题。登录重定向到首页,离开非活动网址:http://test.com/ ?lang = en / wp-login.php 我使用两种语言的WPML插件,默认一个是lt_LT和en_US as额外。

我整个周末都在挖掘,但没有找到有效的解决方案。为了说清楚,如果我必须翻译核心WP wp-login.php页面,我就无法获得o,是否有绕过wp-login.php并将用户直接重定向到主页的快捷方式?

非常感谢所有可能的帮助和建议。

展望未来,

2 个答案:

答案 0 :(得分:1)

首先将表单操作更改为

<?php echo $_SERVER['REQUEST_URI']; ?>

并在表单

后使用此PHP
if (isset($_POST['user-submit'])) {
    login_auth($_POST['log'], $_POST['pwd']);
} 

并将此功能添加到functions.php

function login_auth( $username, $password ) {
  global $user;

  $current_cookie = esc_attr( $_COOKIE['_icl_current_language'] );
  $url = '/'.$current_cookie;
  $login_page = site_url($url);    

  $creds = array();
  $creds['user_login'] = $username;
  $creds['user_password'] =  $password;
  $creds['remember'] = true;
  $user = wp_signon( $creds, false );
  if ( is_wp_error($user) ) {
    echo $user->get_error_message();
  }
  if ( !is_wp_error($user) ) {
    wp_redirect($login_page);
  }
}

答案 1 :(得分:0)

毕竟,这是我的解决方案,在我的情况下工作。似乎问题是WPML插件设置的语言参数。可以检查当前链接是否有printf("%d", K==Y); printf("%d", K==Y); 并使用默认的wp-login网址进行更改。

?lang=en/