パスワードで保護されたページに「パスワードが正しくありません」というエラーメッセージを追加する方法はありますか?
私は至る所で見ました、そして私が見つけることができる最も近いものはここからです: パスワードで保護されたページにエラーメッセージを追加する
問題はそれがクッキーに基づいているのでページから離れてナビゲートしてもエラーが持続するということです。
非常に単純に思えた何かが解決策を見つけるのに私に時間をかけています= \
これは、似たような質問に対するこれら2つの素晴らしい答え( 21697 & 71284 )の組み合わせです。
wpse241424_check_post_pass()
は、単一のパスワードで保護されたページのwp
フックで早く実行されます。無効なパスワードが入力された場合、INVALID_POST_PASS
定数が後でフォームで使用するために設定され、パスワード入力エラーcookieが削除されて、毎回エラーメッセージが表示されないようにします。
wpse241424_post_password_message()
はパスワードフォームをレンダリングする直前に実行されます。無効なパスワードに遭遇したときに先に設定したINVALID_POST_PASS
定数をチェックし、フォームにエラーメッセージを追加します。
function wpse241424_check_post_pass() {
if ( ! is_single() || ! post_password_required() ) {
return;
}
if ( isset( $_COOKIE['wp-postpass_' . COOKIEHASH ] ) ) {
define( 'INVALID_POST_PASS', true );
// Tell the browser to remove the cookie so the message doesn't show up every time
setcookie( 'wp-postpass_' . COOKIEHASH, NULL, -1, COOKIEPATH );
}
}
add_action( 'wp', 'wpse241424_check_post_pass' );
/**
* Add a message to the password form if an invalid password has been entered.
*
* @wp-hook the_password_form
* @param string $form
* @return string
*/
function wpse241424_post_password_message( $form ) {
if ( ! defined( 'INVALID_POST_PASS' ) ) {
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;
}
add_filter( 'the_password_form', 'wpse241424_post_password_message' );