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

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

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

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

Мои 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; } 

Последний введенный пароль сохраняется как безопасный хэш в 'wp-postpass_' . COOKIEHASH cookie с именем 'wp-postpass_' . COOKIEHASH '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; } 

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

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

Это оно!!