Ajouter un message d'erreur sur la page protégée par mot de passe


9

J'ai protégé une page avec un mot de passe. Je voudrais ajouter un court message d'erreur lorsque le mot de passe inséré est incorrect.

Comment puis-je faire ceci?

J'ajoute ce code pour afficher et personnaliser le formulaire sur ma page.

ma functions.php

add_filter( 'the_password_form', 'custom_password_form' );
function custom_password_form() {
global $post;
$label = 'pwbox-'.( empty( $post->ID ) ? rand() : $post->ID );
$o = '<form class="protected-post-form" action="' . get_option('siteurl') . '/wp-pass.php" method="post">' . 
'<p class="glossar-form-p">Alle weiteren Glossarbeiträge sind durch ein Passwort geschützt. </p>' . 
' <label for="' . $label . '">' . ' </label><input name="post_password" id="' . $label . '" type="password" size="20" />
<input type="submit" name="Submit" value="' . esc_attr__( "Login" ) . '" />
</form>
';
return $o;
}

Réponses:


10

Le dernier mot de passe saisi est stocké sous forme de hachage sécurisé dans un cookie nommé 'wp-postpass_' . COOKIEHASH.

Lorsque le formulaire de mot de passe est appelé, ce cookie a déjà été validé par WordPress. Il vous suffit donc de vérifier si ce cookie existe : si c'est le cas et que le formulaire de mot de passe s'affiche, le mot de passe était incorrect.

add_filter( 'the_password_form', 'wpse_71284_custom_post_password_msg' );

/**
 * Add a message to the password form.
 *
 * @wp-hook the_password_form
 * @param   string $form
 * @return  string
 */
function wpse_71284_custom_post_password_msg( $form )
{
    // No cookie, the user has not sent anything until now.
    if ( ! isset ( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ) )
        return $form;

    // Translate and escape.
    $msg = esc_html__( 'Sorry, your password is wrong.', 'your_text_domain' );

    // We have a cookie, but it doesn’t match the password.
    $msg = "<p class='custom-password-message'>$msg</p>";

    return $msg . $form;
}

3
Un problème que j'ai trouvé avec cette approche est que si vous entrez le mauvais mot de passe, le message d'erreur persistera même si vous vous éloignez de la page, puis revenez, la façon la plus simple que j'ai trouvée autour de cela est d'afficher le message uniquement if(wp_get_referer() == get_permalink())
Javier Villanueva

0

Peut-être qu'il est vraiment très tard pour répondre. Quelque chose dont vous avez besoin pour faire ce qui suit. Comme il n'y a aucun moyen par défaut de valider, vous devez suivre quelques étapes. Ici, je vais utiliser une variable de session pour vérifier la correspondance des cookies générés. devez d'abord commencer la session.

add_action('init', 'myStartSession', 1);
add_action('wp_logout', 'myEndSession');
add_action('wp_login', 'myEndSession');
function myStartSession() {
    if(!session_id()) {
        session_start();
    }
}
function myEndSession() {
    session_destroy ();
}

Utilisez ensuite le code suivant à l'endroit où vous souhaitez afficher le message d'erreur.

if ( post_password_required() ) {
       $session_id = 'wp-postpass_' . get_the_ID();
       //onload
       $current_cookie = wp_unslash($_COOKIE[ 'wp-postpass_' . COOKIEHASH ]);
       //get old cookie 
       $old_cookie = isset( $_SESSION[ $session_id ] ) ? $_SESSION[ $session_id ] : '';
       //set new session
       $_SESSION[ $session_id ] = $current_cookie;
       if ( $current_cookie != $old_cookie && !empty( $old_cookie ) ){
           error_notification('<b>Error!</b> Authentication failed!');
       }
   }

C'est ça!!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.