Thêm thông báo lỗi trên trang được bảo vệ bằng mật khẩu


9

Tôi bảo vệ một trang bằng mật khẩu. Tôi muốn thêm một thông báo lỗi ngắn khi mật khẩu được chèn không chính xác.

Tôi có thể làm cái này như thế nào?

Tôi thêm mã này để hiển thị và tùy chỉnh biểu mẫu trên trang của tôi.

Của tôi 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;
}

Câu trả lời:


10

Mật khẩu mới nhất được nhập được lưu trữ dưới dạng băm an toàn trong cookie có tên 'wp-postpass_' . COOKIEHASH.

Khi biểu mẫu mật khẩu được gọi, cookie đó đã được xác thực bởi WordPress. Vì vậy, bạn chỉ cần kiểm tra xem cookie đó có tồn tại không : Nếu có và biểu mẫu mật khẩu được hiển thị, mật khẩu đã sai.

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
Một vấn đề tôi gặp phải với cách tiếp cận này là nếu bạn nhập sai mật khẩu, thông báo lỗi sẽ tồn tại ngay cả khi bạn điều hướng khỏi trang và sau đó quay lại, cách đơn giản nhất tôi tìm thấy xung quanh đây là chỉ hiển thị thông báo nếu(wp_get_referer() == get_permalink())
Javier Villanueva

0

Có lẽ thật sự rất muộn để trả lời. Một cái gì đó bạn cần làm như sau. Vì không có cách nào để xác nhận hợp lệ, bạn cần làm theo vài bước. Ở đây tôi sẽ sử dụng biến phiên để kiểm tra khớp với các cookie được tạo. trước tiên cần bắt đầu phiê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 ();
}

Sau đó sử dụng đoạn mã sau nơi bạn muốn hiển thị thông báo lỗi.

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

Đó là nó!!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.