私のカスタムログインフォームは、ユーザーが自分の資格情報を推測できなかったときに、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 );
カスタムログインページをコーディングしている間、エラーに注意する必要があります、そうでなければ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>
あなたはエコーしてみましたか
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を得てそれに応じてそれを表示することができます。