WordPressにログインしている時に、記事一覧ページに非公開記事が表示されている事はありませんか?
何度かクライアントから「非公開記事が表示されている」とか「非公開記事が並んでいると紛らわしい」連絡をいただいた事があるのですが、そんな時に使える非公開記事を表示しない(除外)する方法を解説します。
非公開記事を表示しない方法は、メインループとサブループでやり方が違いますのでご注意ください。
※functions.phpを変更する場合は、記述を間違ってしまうと画面が白くなり何も表示されなかったり、エラーが出てしまう場合がありますのでバックアップを必ず取るようにしてください。
メインループの場合
メインループの場合はpre_get_postsフックを使います。
pre_get_postsはWordpressのアクションフックの1つで、メインループを変更する際に使用します。
以下のコードをfunctions.phpに記述します。
function custom_pre_get_posts(){
global $wp_query;
if ($wp_query->is_admin) return;
if (is_archive()){
$wp_query->query_vars['post_status'] = 'publish';
}
}
add_filter('pre_get_posts','custom_pre_get_posts');
上記のコードではis_archive()の条件に合う場合、公開済み(publish)の記事のみ一覧に表示されます。
is_archive()はカテゴリーアーカイブページ、タグアーカイブページ、日付アーカイブページ(年別、月別、日別)が該当します。is_archive()について詳しくは、WordPress関数is_archiveとis_post_type_archiveの違いと使い方について【WordPress】で解説していますのでご覧ください。
また、カスタム投稿タイプのアーカイブの場合はis_post_type_archive()、検索結果ページの場合はis_search()など、用途に応じて変更可能です。
サブループの場合
サブループの場合は、記事を取得する際クエリに直接指定します。
$args = array(
'post_type' => '●●●●●',
'post_status' => 'publish'
);
こちらもメインループの時と同じくpost_statusの値にpublish(公開済み)を指定します。
post_typeにはカスタム投稿タイプ名、またはデフォルトの投稿の場合はpostを指定します。
さいごに
いかがでしたでしょうか。
今回は、Wordpressログイン時に非公開記事を記事一覧ページに表示しない方法を解説しました。
非公開の記事が一覧に表示されると紛らわしいと自分は思うので、毎回非表示(除外)にするようしています。これは人によって好みが分かれるかと思いますので、実際に使用する方と相談されるのがいいでしょう。