Страница пароля Wordpress - Неправильное сообщение пароля не работает - PullRequest
0 голосов
/ 20 мая 2019

// --------------------------------------------- -------------------- # // Вы ввели неверный пароль.- НЕ РАБОТАЕТ

// (Когда введен неправильный пароль) На моей защищенной паролем странице, когда вы вводите неправильный пароль, я пытаюсь показать сообщение. Я думаю, что проблема с cookie, но не уверен. Пожалуйста, посмотрите на код, и вот страница. Пожалуйста, дайте мне знать, что я делаю неправильно. Код ниже находится на functions.php ПОЖАЛУЙСТА, ПОКАЗАТЬ, ГДЕ ОШИБКА - так что я могу скопировать и вставить, чтобы исправить ... Спасибо!

// --------------------------------------------- -------------------- #

function my_password_form () { глобальный $ post;

     $label = 'pwbox-'.( empty( $post->ID ) ? rand() : $post->ID );

     $passwordProtectedPageURL = 'https://host.561websitedesign.com/~alto/suppliers/';
     $wrongPassword = ' ';


     if( ( sanitize_text_field( $_SERVER["HTTP_REFERER"] ) === $passwordProtectedPageURL ) && ! isset ( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] )){
          $wrongPassword = '<span style="color:#00000;font-weight:bold;">The password you have entered is invalid.</span>';
     }


     $form = '<form class="protected-post-form" action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post">
' . __( "<h3><strong>Please enter password to access Q-Notes</strong></h3><h1>&nbsp;</h1>" ) . '
<label class="pass-label" for="' . $label . '">' . __( "Password:" ) . ' </label><input name="post_password" id="' . $label . '" type="password" size="20" maxlength="20" /><input type="submit" name="Submit" value="' . esc_attr__( "Supplier Login" ) . '" />
</form><p>' . $wrongPassword . '</p>';

     return $form;
}
add_filter( 'the_password_form', 'my_password_form' );

1 Ответ

1 голос
/ 21 мая 2019

Ваша логика неверна.

Если cookie-файл установлен при вызове этой функции, это означает, что хеш-код не совпадает, поэтому это неверный пароль.

function my_password_form() {
    global $post;

    $attempted     = $_SESSION['pass_attempt'] ?: false;
    $label         = 'pwbox-' . ( empty( $post->ID ) ? rand() : $post->ID );
    $wrongPassword = '';

    // If cookie is set password is wrong.
    if ( isset( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ) && $attempted !== $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ) {
        $wrongPassword = '<span style="color:#00000;font-weight:bold;">The password you have entered is invalid.</span>';
        // Store attempted password for comparison.
        // So we can show invalid password message only once.
        $_SESSION['pass_attempt'] = $_COOKIE[ 'wp-postpass_' . COOKIEHASH ];
    }

    $form = '<form class="protected-post-form" action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post">
    ' . __( '<h3><strong>Please enter password to access Q-Notes</strong></h3><h1>&nbsp;</h1>' ) . '
    <label class="pass-label" for="' . $label . '">' . __( 'Password:' ) . ' </label><input name="post_password" id="' . $label . '" type="password" size="20" maxlength="20" /><input type="submit" name="Submit" value="' . esc_attr__( 'Supplier Login' ) . '" />
    </form><p>' . $wrongPassword . '</p>';

    return $form;
}
add_filter( 'the_password_form', 'my_password_form' );

add_action(
    'wp_loaded',
    function() {
        if ( isset( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ) ) {
            // Start session to compare pass hashs.
            session_start();
        }
    }
);

РЕДАКТИРОВАТЬ

Чтобы показать сообщение о недопустимом пароле только после того, как я добавил некоторый код сеанса для сравнения хэша пароля, чтобы увидеть, является ли это новой попыткой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...