Tambahkan pesan kesalahan pada halaman yang dilindungi kata sandi


9

Saya melindungi halaman dengan kata sandi. Saya ingin menambahkan pesan kesalahan singkat ketika kata sandi yang dimasukkan salah.

Bagaimana saya bisa melakukan ini?

Saya menambahkan kode ini untuk menampilkan dan menyesuaikan formulir di halaman saya.

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

Jawaban:


10

Kata sandi yang dimasukkan terakhir disimpan sebagai hash aman dalam cookie bernama 'wp-postpass_' . COOKIEHASH.

Ketika formulir kata sandi dipanggil, cookie itu sudah divalidasi oleh WordPress. Jadi, Anda hanya perlu memeriksa apakah cookie itu ada : Jika ada dan formulir kata sandi ditampilkan, kata sandi itu salah.

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
Satu masalah yang saya temukan dengan pendekatan ini adalah bahwa jika Anda memasukkan kata sandi yang salah pesan kesalahan akan tetap ada meskipun Anda menavigasi keluar dari halaman dan kemudian kembali, cara paling sederhana yang saya temukan di sekitar ini adalah dengan menampilkan pesan saja if(wp_get_referer() == get_permalink())
Javier Villanueva

0

Mungkin benar-benar terlambat untuk menjawab. Sesuatu yang perlu Anda lakukan sebagai berikut. Karena tidak ada cara default untuk memvalidasi, Anda perlu mengikuti beberapa langkah. Di sini saya akan menggunakan variabel sesi untuk memeriksa pencocokan cookie yang dihasilkan. kebutuhan pertama untuk memulai sesi.

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

Kemudian gunakan kode berikut ini di mana Anda ingin menampilkan pesan kesalahan.

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

Itu dia!!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.