web-dev-qa-db-fra.com

Ajouter un message d'erreur sur les pages protégées par mot de passe

Est-il possible d'ajouter un message d'erreur "mot de passe incorrect" sur les pages protégées par mot de passe?

J'ai regardé partout et la chose la plus proche que je puisse trouver est d'ici: Ajouter un message d'erreur sur la page protégée par mot de passe

Le problème est que l'erreur persiste même lorsque vous naviguez en dehors de la page, car elle est basée sur des cookies.

Ce qui semblait si simple me prend des heures pour trouver une solution = \

2
user41083

Voici une combinaison de ces deux bonnes réponses ( 21697 & 71284 ) à des questions similaires.

wpse241424_check_post_pass() s'exécute tôt sur le hook wp sur des pages protégées par mot de passe unique. Si un mot de passe non valide est entré, la constante INVALID_POST_PASS est définie pour une utilisation ultérieure dans le formulaire et le cookie d'erreur de saisie du mot de passe est supprimé pour empêcher le message d'erreur d'être visible à chaque fois.

wpse241424_post_password_message() est exécuté juste avant le rendu du formulaire de mot de passe. Il vérifie la constante INVALID_POST_PASS qu'il avait définie précédemment lorsqu'un mot de passe non valide est rencontré et ajoute le message d'erreur au formulaire.

function wpse241424_check_post_pass() {

    if ( ! is_single() || ! post_password_required() ) {
        return;
    }

    if ( isset( $_COOKIE['wp-postpass_' . COOKIEHASH ] ) ) {
        define( 'INVALID_POST_PASS', true );

        // Tell the browser to remove the cookie so the message doesn't show up every time
        setcookie( 'wp-postpass_' . COOKIEHASH, NULL, -1, COOKIEPATH );
    }
}
add_action( 'wp', 'wpse241424_check_post_pass' );


/**
 * Add a message to the password form if an invalid password has been entered.
 *
 * @wp-hook the_password_form
 * @param   string $form
 * @return  string
 */
function wpse241424_post_password_message( $form ) {
    if ( ! defined( 'INVALID_POST_PASS' ) ) {
        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;
}
add_filter( 'the_password_form', 'wpse241424_post_password_message' );
1
Dave Romsey