WordPressのパスワード保護記事を徹底的に隠す


WordPressには記事閲覧にパスワードをかけられるパスワード保護という機能がある。

しかし、記事一覧やフィードで表示されてしまったり、記事ページでは本文のみパスワード保護されるのでタイトルやメタ情報部分は表示されてしまう。

個人的にパスワードをかけているときは、公開されているページからは非表示にしたいので以下のような調整を入れている。



記事一覧からパスワード保護記事を除外

記事一覧にパスワード保護記事が表示されてしまう。

WP_Queryを使っている箇所でパラメータに ‘has_password’ => false を追加してもよいが、以下をfunctions.phpに追記すれば一括して非表示に出来る。

//パスワード保護記事を非表示
function custom_pre_get_posts($query) {
  if(is_singular() || is_admin()) {
    return;
  }
  $query->set('has_password', false);
}
add_action('pre_get_posts', 'custom_pre_get_posts');

記事ページと管理画面では表示出来るようにis_singular()、is_admin()は除外している。

記事ページをまるごとパスワード保護

本文以外の箇所が見えてしまう。

以下を functions.phpに追記すればパスワード保護記事の場合に通常のヘッダーなどは表示されずパスワードフォームのみ表示される。

//パスワード保護記事の場合パスワードフォームのみ表示
function custom_add_header() {
  if(post_password_required()) {
    echo '<meta charset="utf-8">';
    echo '<meta name="viewport" content="width=device-width, user-scalable=yes">';
    echo get_the_password_form();
    exit;
  }
}
add_action('get_header', 'custom_add_header');

文字化けはしないっぽいが一応文字コードのmetaタグを追加。
スマホでも見やすいようにviewportのmetaタグも追加。
見た目をカスタマイズしてもよい気もするが、そこまで必要ない気がするのでとりあえずこのまま。

記事ページ全体をパスワード保護。

get_the_password_form()はformタグの部分のみ出力するようなのでテンプレートを分けて装飾してもよいかもしれない。



関連記事