WordPressの投稿ページ・固定ページのパスワード保護機能が効かない

既に公開中のサイトでも、サンプルページを作成して社内にだけオープンにしたい場合、サイト全体でなく、個別のページだけパスワード保護機能を使用することは多いかもしれません。

投稿ページや固定ページの編集画面で、公開状態を簡単に「公開」「非公開」「パスワード保護」を選択して設定できます。
非公開設定(WordPressにログインした状態のときだけコンテンツが閲覧できる)でもよいのですが、ユーザー以外の方に共有する場合でしたら、わざわざWordPressのログイン情報まで伝えなくても、パスワード保護のほうが手軽ですよね。

ということで、あるサイトでさらっとパスワード保護設定にしてみたのですが、アクセスし直してみても丸見え。タイトルに「Protected:」とついているものの、記事全部丸見えでした。

使用していたテーマは「_S(アンダースコア)」で子テーマを作成して、プラグイン「カスタムフィールドテンプレート」を使用して何種類かテンプレート作成していて選択したテンプレートによってsingle.phpの中で条件分岐させていたんですが、それがよくなかったぽいです。

とりあえず、single.phpの最初のループ部分にこちらを追記したら無事パスワード保護できました。

<?php while( have_posts() ) : the_post(); //ここは通常のループ
    if( post_password_required($post->ID) ) { //パスワード保護されている場合
        echo get_the_password_form($post->ID); //パスワード入力フォームを出力
}else{ the_content(); } //そうじゃなければコンテンツ表示
?>

参考URL:WordPress 個別記事に対する「パスワード保護」を利用する関数

とっても助かりました。

で、_Sだとパスワードフォームのテキストが全部英語になってしまうので、functions.phpでテキストも変更しました。

//パスワード保護ページの文章
function my_password_form() {
	return '<p>このページのコンテンツはパスワードで保護されています。</p>
	<form class="post_password" action="' . home_url() . '/wp-login.php?action=postpass" method="post">
	<input name="post_password" type="password" size="24" />
	<input type="submit" name="Submit" value="' . esc_attr__("送信") . '" />
	</form>';
}
add_filter('the_password_form', 'my_password_form');

これですっきり解決しました。
心置きなくパスワード保護ができますね。

WordPressって万能だなあ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


top