WordPressでは投稿を非公開にした場合、ログインユーザーのみが表示できるようになり、未ログインユーザーでは閲覧できなくなります。また、ログインユーザーの場合は、投稿一覧にも非公開記事が含まれます。
直接投稿を開いて表示させるのは良いけど、投稿一覧では非公開記事は除外したいというケースもありますよね(特にクライアントワーク)。
そこで今回は、投稿一覧に非公開記事を表示しないようにする方法をご紹介したいと思います。
各種投稿一覧で非公開記事を表示しないようにする方法
ブログ一覧やカテゴリー一覧、月別アーカイブなどで非公開記事を表示しないようにするには、functions.phpに以下コードを追加します。
function private_post_exclusion_archive() {
global $wp_query;
if ($wp_query->is_admin) {
return;
}
if (is_home() || is_archive()) {
$wp_query->query_vars['post_status'] = 'publish';
}
}
add_filter('pre_get_posts', 'private_post_exclusion_archive');
is_home()もしくはis_archive()の条件に該当する場合は、ステータスが「公開」の投稿のみを表示させています。この条件で、カスタム投稿一覧なども含め、すべての一覧で非公開記事は表示されなくなるはずです。
サブループで非公開記事を表示しないようにする方法
WP_Queryなどのサブループで非公開記事を表示させたくない場合は、「’post_status’ => ‘publish’」というパラメータを追加します。
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'paged' => $paged,
'posts_per_page' => 5,
'post_type' => 'post',
'post_status' => 'publish'
);
$wp_query_post = new WP_Query($args);
if ($wp_query_post->have_posts()) :
?>
<ul class="post-list">
<?php while ($wp_query_post->have_posts()) : $wp_query_post->the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>">
<h3><?php the_title(); ?></h3>
</a>
</li>
<?php endwhile; ?>
</ul>
<?php
endif;
wp_reset_postdata();
?>
こちらも同様に、ステータスが「公開」の記事のみが抽出されます。
あとがき
会員サイトでログインユーザーのみに見せたい投稿があるとかじゃなければ、投稿一覧では非公開記事は除外しておいた方が変な混乱がなくて良い気はします。
かなり細かいところではありますが、参考になれば幸いです。