Agregar mensaje de error en la página protegida por contraseña

9

Protegí una página con contraseña. Me gustaría agregar un breve mensaje de error cuando la contraseña insertada es incorrecta.

¿Cómo puedo hacer esto?

Agrego este código para mostrar y personalizar el formulario en mi página.

Mi 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;
}
ogni
fuente

Respuestas:

10

La última contraseña ingresada se almacena como un hash seguro en una cookie llamada 'wp-postpass_' . COOKIEHASH.

Cuando se llama al formulario de contraseña, esa cookie ya ha sido validada por WordPress. Por lo tanto, solo debe verificar si esa cookie existe : si existe y se muestra el formulario de contraseña, la contraseña era incorrecta.

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;
}
fuxia
fuente
3
Un problema que he encontrado con este enfoque es que si ingresas la contraseña incorrecta, el mensaje de error persistirá incluso si te alejas de la página y luego regresas, la forma más simple que he encontrado es mostrar el mensaje solo si(wp_get_referer() == get_permalink())
Javier Villanueva
0

Tal vez sea realmente muy tarde para responder. Algo que debe hacer lo siguiente. Como no hay una forma predeterminada de validar, debe seguir algunos pasos. Aquí usaré la variable de sesión para verificar que coincidan las cookies generadas. primero necesita comenzar la sesión.

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

Luego use el siguiente código donde desea mostrar el mensaje de error.

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!');
       }
   }

¡¡Eso es!!

Tuhin
fuente