web-dev-qa-db-fra.com

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

J'ai protégé une page avec un mot de passe. J'aimerais 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.

Mon 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;
}
8
ogni

Le dernier mot de passe entré est stocké sous forme de hachage sécurisée 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 si le formulaire de mot de passe est affiché, 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;
}
9
fuxia

Peut-être qu'il est vraiment très tard pour répondre. Quelque chose que vous devez faire ce qui suit. Comme il n’existe 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. premier besoin de 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 ();
}

Ensuite, utilisez le code suivant où vous voulez 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 tout!!

0
Tuhin