Добавить сообщение об ошибке на защищенной паролем странице


9

Я защитил страницу паролем. Я хотел бы добавить короткое сообщение об ошибке, если введенный пароль неверен.

Как я могу это сделать?

Я добавляю этот код, чтобы показать и настроить форму на моей странице.

мой 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;
}

Ответы:


10

Последний введенный пароль хранится в виде безопасного хэша в файле cookie с именем 'wp-postpass_' . COOKIEHASH.

Когда вызывается форма пароля, этот файл cookie уже был проверен WordPress. Так что вам просто нужно проверить, существует ли этот файл cookie : если он существует и отображается форма пароля, пароль был неверным.

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
Одна проблема, с которой я столкнулся при таком подходе, заключается в том, что если вы введете неправильный пароль, сообщение об ошибке будет сохраняться, даже если вы уйдете со страницы и вернетесь назад, самый простой способ, который я нашел, - это показать только сообщение. если(wp_get_referer() == get_permalink())
Хавьер Вильянуэва

0

Может быть, действительно очень поздно, чтобы ответить. Что-то вам нужно сделать следующее. Так как нет способа проверки по умолчанию, вам нужно выполнить несколько шагов. Здесь я собираюсь использовать переменную сеанса для проверки соответствия сгенерированных куки. Сначала нужно начать сеанс.

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

Затем используйте следующий код, где вы хотите показать сообщение об ошибке.

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

Это оно!!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.