パスワードでページを保護しました。入力したパスワードが正しくない場合は、短いエラーメッセージを追加します。
これどうやってするの?
このコードを追加して、自分のページのフォームを表示およびカスタマイズします。
私の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
という名前のクッキーに安全なハッシュとして保存されます。
パスワードフォームが呼ばれるとき、そのクッキーは既にWordPressによってvalidatedされています。それで、あなたはそのクッキーexistsをチェックする必要があるだけです:もしそれがあり、パスワードフォームが表示されたら、パスワードは間違っていました。
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;
}
たぶんそれは本当に答えるのが本当に遅いです。次のことをする必要があります。検証するデフォルトの方法はないので、いくつかの手順に従う必要があります。ここでは、生成されたクッキーの一致を確認するためにセッション変数を使用します。最初にセッションを開始する必要があります。
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!');
}
}
それでおしまい!!