WPベースのサイトでは、私は一般の人々から隠す必要があるカスタムフォームを持っていて、それから私からパスワードを得てそれを入力してフォームにアクセスしてそれを送信する少数の人だけにアクセスを与えます。フォーム送信時に、それらを別のページにリダイレクトします。以下のコードを私のfunctions.php
で使用しました。リダイレクトされると、パスワードで保護されたページからログアウトされます。
add_action( 'wp', 'post_pw_sess_expire' );
function post_pw_sess_expire() {
if ( isset( $_COOKIE['wp-postpass_' . COOKIEHASH] ) )
// Setting a time of 0 in setcookie() forces the cookie to expire with the session
setcookie('wp-postpass_' . COOKIEHASH, '', 0, COOKIEPATH);
}
今度は、パスワードで保護されたページから選択された少数のユーザーがログアウトされたら、パスワードを無効にする必要があります。必須ではありませんが、ワンタイムパスワードのようなものです。解決策は素晴らしいでしょう、あるいはそれが不可能な場合は私にいくつかのポインタや代替案をお願いします。
フォームを送信した後、新しいページにリダイレクトする前に、現在のユーザーのパスワードをリセットします。
単純なwp_update_user(array('ID' => $userid, 'user_pass' => 'YourNewPaSSword'));
はあなたのためにすべてをします。
私はこの小さなテストをして、それはうまくいきますが、技術的に正しいであれば見当がつかない:
add_action( 'wp', 'post_pw_sess_expire' );
function post_pw_sess_expire()
{
if ( isset( $_COOKIE['wp-postpass_' . COOKIEHASH] ) )
{
// Setting a time of 0 in setcookie() forces the cookie to expire with the session
setcookie('wp-postpass_' . COOKIEHASH, '', 0, COOKIEPATH);
add_action( 'wp_footer', 'change_pw_wpse_119986' );
}
}
function change_pw_wpse_119986()
{
global $post;
if( $post->post_password == md5('something') )
return;
$post->post_password = md5('something');
wp_update_post( $post );
remove_action( 'wp_footer', 'change_pw_wpse_119986' );
}
しかし、もっと大きな問題があります。1人のパスワードではなく、1ページに1つのパスワードがあるということです。最初のパスがパスに入ると、次のパスは使用できなくなります。人が使用したらすぐに、異なるパスワードを設定し、それぞれの設定を解除する独自のソリューションを構築する必要があります。