web-dev-qa-db-ja.com

カスタムテンプレートでログインエラーメッセージを取得する方法

ログインフォームを表示して同じページにログインを処理したいのですが、ログインエラーがあると同じページにエラーメッセージが表示されます。

私はこの機能を追加しました:

add_filter( 'authenticate', 'custom_authenticate_username_password', 30, 3);
function custom_authenticate_username_password( $user, $username, $password ) {
    if ( is_a($user, 'WP_User') ) { return $user; }

    if ( empty($username) || empty($password) )
    {
        $error = new WP_Error();
        $user  = new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Invalid username or incorrect password.'));

        return $error;
    }
}

上記の機能を追加した後、カスタムページテンプレートに実際にエラーメッセージを表示する方法を教えてください。

2
jay

あなたのカスタムログインページへのエラーメッセージを得ることができる一つの方法はwp_login_failedフックを使うことでしょう。これは次のようになります。

add_action( 'wp_login_failed', 'my_login_fail' );  // hook failed login

function my_login_fail( $username ) {
    //redirect to custom login page and append login error flag
    wp_redirect(home_url( '?page_id=4' ) . "&login_error" );  
    exit;
}

明らかにあなたが使っているパーマリンクに応じてwp_redirectを修正するべきです。

それからカスタムページテンプレートでlogin_errorフラグをチェックしてエラーメッセージを表示することができます。

if (isset($_GET['login_error'])){
    //print error message or do something else
}
1
IlmarsL