ワードプレスには、標準でページにパスワード設定が出来る「パスワード保護」機能があります。
ただ、こちらのパスワード保護ページ、標準だと記事一覧ページやインデックスページに表示されるようになっています。
パスワード保護しているページなので、インデックスページに表示されたくない…という時に、こちらを非表示にする方法です。
pre_get_posts
投稿の一覧から特定の何かを非表示などする場合は「pre_get_posts」が役に立ちます。
pre_get_postsのフックはクエリ変数オブジェクトの生成後、実際にクエリが実行される前に呼び出されます。
諸条件を色々考えるならもう少し設定が必要かもしれませんが、ひとまずこれだけで「パスワード保護」のページが消えます。
function password_post_exclude($query) {
$query->set('has_password', false);
}
add_action('pre_get_posts', 'password_post_exclude');
一覧から消えました!
ただし、このままだと管理画面の投稿一覧からも表示が消えてしまいます。
全ての場所から消えてしまいました。
投稿ページからも見えなくなります。
これでは意味が無くなってしまうので、ひと工夫してみます。
is_singular() || is_admin()
投稿ページと管理画面では表示させておきたいので、ひと工夫入れてみます。
function password_post_exclude($query) {
if(is_singular() || is_admin()) {
return;
}
$query->set('has_password', false);
}
add_action('pre_get_posts', 'password_post_exclude');
投稿ページと管理画面を除外すれば、表示されるようになります。
まとめ
この方法で「パスワード保護」の投稿を一覧ページから非表示にすることができます。ただし、phpを扱うことになりますので、操作はくれぐれも慎重に行う必要があります。
バックアップ等は必ず取っておきましょう。