web-dev-qa-db-ja.com

カスタムログインは間違ったパスワードでwp-adminにリダイレクトします

私のカスタムログインフォームは、ユーザーが自分の資格情報を推測できなかったときに、wp-adminログインにリダイレクトします。代わりに現在のフォームにユーザーをリダイレクトする方法を教えてください。そしてもちろん、適切なエラーを見せる?

ここにコードがあります:( WordPressのマニュアルと同じ)

$args = array(
        'echo' => true,
        'redirect' => site_url( $_SERVER['REQUEST_URI'] ), 
        'form_id' => 'loginform',
        'label_username' => __( 'Username' ),
        'label_password' => __( 'Password' ),
        'label_remember' => __( 'Remember Me' ),
        'label_log_in' => __( 'Log In' ),
        'id_username' => 'user_login',
        'id_password' => 'user_pass',
        'id_remember' => 'rememberme',
        'id_submit' => 'wp-submit',
        'remember' => true,
        'value_username' => NULL,
        'value_remember' => false ); 

wp_login_form( $args );
3
Roel Veldhuizen

カスタムログインページをコーディングしている間、エラーに注意する必要があります、そうでなければWordPressは間違ったパスワードまたは空の資格情報で/ wp-adminまたはwp-login.phpにページをリダイレクトするでしょう。この問題を解決するために下記に従ってください: -

あなたのテーマのfunctions.phpファイルで以下を使ってください: -

/**
 * Function Name: front_end_login_fail.
 * Description: This redirects the failed login to the custom login page instead of default login page with a modified url
**/
add_action( 'wp_login_failed', 'front_end_login_fail' );
function front_end_login_fail( $username ) {

// Getting URL of the login page
$referrer = $_SERVER['HTTP_REFERER'];    
// if there's a valid referrer, and it's not the default log-in screen
if( !empty( $referrer ) && !strstr( $referrer,'wp-login' ) && !strstr( $referrer,'wp-admin' ) ) {
    wp_redirect( get_permalink( LOGIN_PAGE_ID ) . "?login=failed" ); 
    exit;
}

}

/**
 * Function Name: check_username_password.
 * Description: This redirects to the custom login page if user name or password is   empty with a modified url
**/
add_action( 'authenticate', 'check_username_password', 1, 3);
function check_username_password( $login, $username, $password ) {

// Getting URL of the login page
$referrer = $_SERVER['HTTP_REFERER'];

// if there's a valid referrer, and it's not the default log-in screen
if( !empty( $referrer ) && !strstr( $referrer,'wp-login' ) && !strstr( $referrer,'wp-admin' ) ) { 
    if( $username == "" || $password == "" ){
        wp_redirect( get_permalink( LOGIN_PAGE_ID ) . "?login=empty" );
        exit;
    }
}

}
// Replace my constant 'LOGIN_PAGE_ID' with your custom login page id.

対応するエラーを表示するために、カスタムログインページファイル内の以下のもの: -

<div class="wp_login_error">
    <?php if( isset( $_GET['login'] ) && $_GET['login'] == 'failed' ) { ?>
        <p>The password you entered is incorrect, Please try again.</p>
    <?php } 
    else if( isset( $_GET['login'] ) && $_GET['login'] == 'empty' ) { ?>
        <p>Please enter both username and password.</p>
    <?php } ?>
</div>          
7
Maruti Mohanty

あなたはエコーしてみましたか

site_url($_SERVER['REQUEST_URI'] );

これはうまくいきます、私はそれをうまく使いました

'redirect' => get_permalink()

更新 ログイン失敗時のリダイレクトには、 wp_login_failed hook、および適切な警告メッセージを表示して希望のページにユーザーをリダイレクトするためのカスタムコードを使用する必要があります。

add_action('wp_login_failed', '_login_failed_redirect');

function _login_failed_redirect( $username ){

  //get your page by slug and then its permalink
  $post = get_page_by_path('slug');

  //Or you can get your page ID, if you are assigning a custom template to a page.
  $redirect_page = !empty ( $post ) ? get_permalink ( $post->ID ) : site_url();

  $user = get_user_by('login', $username );

  if(!$user){
    //Username incorrect
    wp_redirect($redirect_page .'?login_error=1');

  }else{
   //Username Password combination incoorect
    wp_redirect($redirect_page .'?login_error=2');
  }

}

そして、もしあなたが何らかのテンプレートにリダイレクトしているなら、あなたは簡単にlogin_errorを得てそれに応じてそれを表示することができます。

0
sven