web-dev-qa-db-ja.com

1つのフィールドし入力入力されていない場合、wp_login_failedは機能しません

フロントエンドにwp_login_form()を使ってログインフォームを作成しました。 functions.php ファイルに、ログインが失敗した場合に /wp-login.php へのリダイレクトを防ぐためのアクションを追加しました。

add_action( 'wp_login_failed'、….

username password のフィールドが入力されている場合、アクションはフックするだけです。そのうちの1つが空のままでも、 wp-login.phpにリダイレクトされます。

リダイレクトを防ぐために両方のフィールドが入力されているかどうかをチェックする可能性はありますか?

ありがとう

ジュリアン

3
hellojst

空白のユーザー名/パスワードの処理方法を変更するには、このフィルタを追加します。

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;
    }
}

それから、wp_login_failedへのあなたの最初のリダイレクトは、空白のユーザー名/パスワードでも同様に動作します。

3
Jake

問題は関数wp_authenticate()(ファイルpluggable.phpにあります)にあります

2つの選択肢があります。

  • wordpressのコアをハックする(お勧めしません!)
  • wp_authenticate()をオーバーライドするあなた自身のプラグインを書いてください(これは単に if ステートメントの中の数文字を削除することです)。
1
user18485