it-swarm.com.de

Fügen Sie eine Fehlermeldung auf der passwortgeschützten Seite hinzu

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.

Mein 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

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

Wenn das Passwort-Formular aufgerufen wird, wurde dieses Cookie bereits von WordPress validiert . Sie müssen also nur überprüfen, ob dieses Cookie existiert. Existiert : Wenn dies der Fall ist und das Passwortformular angezeigt wird, war das Passwort 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;
}
9
fuxia

Vielleicht ist es wirklich sehr, sehr spät zu antworten. Folgendes müssen Sie tun. Da es keine Standardvalidierungsmethode gibt, müssen Sie einige Schritte ausführen. Hier verwende ich die Sitzungsvariable, 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!!

0
Tuhin