2022-11-23
パスワードで保護された投稿でパスワードが間違っている場合にメッセージを表示する
WordPress のパスワード保護された投稿でパスワードを間違えた場合にエラーメッセージが表示されないため、間違えたことに気づきにくいです。
そこで Stack Exchange を参考にエラーメッセージを表示するようにします。
Add error message on password protected page
function show_error_message( $form ) {
// パスワード入力前かどうか postpass_XXXX が Cookie に保存されているかで確認。
// Cookie がない場合はパスワード入力前なのでフォームをそのまま出力
if ( ! isset ( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ) ) {
return $form;
}
// Cookie があり、パスワードが一致しない場合にメッセージを表示
$error_message = '<p class="custom-password-message">パスワードが違います</p>';
return $form . $error_message;
}
add_filter( 'the_password_form', 'show_error_message' );
これでエラーメッセージは表示されるようになりますが、他の保護された投稿でもエラーメッセージが表示されてしまいます。
そこで、現在のページでパスワード入力前かどうかをリファラーと投稿のパーマリンクを比較することで確認します。
function show_error_message( $form ) {
// パスワード入力前かどうか postpass_XXXX が Cookie に保存されているかで確認。
// Cookie がない場合はパスワード入力前なのでフォームをそのまま出力
if ( ! isset ( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ) ) {
return $form;
}
// パスワード入力前かどうかリファラーと投稿のパーマリンクを比較して確認
if ( wp_get_raw_referer() !== get_permalink() ) {
return $form;
}
// Cookie があり、パスワードが一致しない場合にメッセージを表示
$error_message = '<p class="custom-password-message">パスワードが違います</p>';
return $form . $error_message;
}
add_filter( 'the_password_form', 'show_error_message' );
フォームをそのまま返すところはまとめてしまってもオッケーです。
if ( ! isset ( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ) || wp_get_raw_referer() !== get_permalink() ) {
return $form;
}