Fehlermeldung auf passwortgeschützter Seite hinzufügen


9

Ich habe eine Seite mit Passwort geschützt. Ich möchte eine kurze Fehlermeldung hinzufügen, wenn das eingegebene Passwort falsch ist.

Wie kann ich das machen?

Ich füge diesen Code hinzu, um das Formular auf meiner Seite anzuzeigen und anzupassen.

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

Antworten:


10

Das zuletzt eingegebene Passwort wird als sicherer Hash in einem Cookie mit dem Namen gespeichert 'wp-postpass_' . COOKIEHASH.

Wenn das Passwortformular aufgerufen wird, wurde dieses Cookie bereits von WordPress validiert . Sie müssen also nur überprüfen, ob dieses Cookie vorhanden ist : Wenn dies der Fall ist und das Kennwortformular angezeigt wird, war das Kennwort falsch.

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
Ein Problem, das ich bei diesem Ansatz festgestellt habe, ist, dass die Fehlermeldung auch dann bestehen bleibt, wenn Sie das falsche Kennwort eingeben, wenn Sie von der Seite weg navigieren und dann zurückkehren. Der einfachste Weg, den ich gefunden habe, besteht darin, nur die Meldung anzuzeigen if(wp_get_referer() == get_permalink())
Javier Villanueva

0

Vielleicht ist es wirklich sehr spät zu antworten. Etwas, das Sie tun müssen, um Folgendes zu tun. Da es keine Standardmethode zur Validierung gibt, müssen Sie einige Schritte ausführen. Hier werde ich die Sitzungsvariable verwenden, um zu überprüfen, ob die generierten Cookies übereinstimmen. Zuerst muss die Sitzung gestartet werden.

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

Verwenden Sie dann den folgenden Code, in dem Sie die Fehlermeldung anzeigen möchten.

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

Das ist es!!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.