web-dev-qa-db-fra.com

L'action wp_login_failed ne fonctionne pas si un seul champ est rempli

J'ai créé un formulaire de connexion dans l'interface avec wp_login_form(). Dans mon functions.php file, j'ai ajouté une action pour empêcher la redirection vers /wp-login.php si la connexion a échoué avec

add_action ('wp_login_failed',….

Comme il s'avère que l'action ne s'accroche que si les champs username et password sont remplis. Si l'un d'entre eux est laissé vide, je suis toujours redirigé vers wp-login.php.

Est-il possible de vérifier si les deux champs sont remplis pour empêcher la redirection?

Merci

Julien

3
hellojst

Ajoutez ce filtre pour modifier la manière dont le nom d'utilisateur/mot de passe vide est traité:

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

Et ensuite, votre redirection d'origine sur wp_login_failed fonctionnera également avec un nom d'utilisateur/mot de passe vide.

3
Jake

Le problème réside dans la fonction wp_authenticate() (trouvée dans le fichier pluggable.php)

Vous avez 2 options.

  • pirater le noyau wordpress (non conseillé!)
  • écrivez votre propre plugin qui écrase wp_authenticate() (il s’agit simplement de supprimer quelques caractères dans une instruction if ).
1
user18485