WordPress 記事一覧から非公開記事を除外する方法
最終更新日 - 公開日 2019.12.25
by
WordPress で記事一覧から非公開記事を除外(非表示)する方法を紹介します。
例えば、クライアント運用時「非公開記事の表示が紛らわしい」場合に便利な方法です。
サイト全体で非公開記事を除外する方法
投稿に「非公開記事」がある場合、管理画面へログイン中の時には記事一覧に「非公開記事」が表示されてしまいます。
非公開記事を非表示にするにはクエリをカスタマイズして、公開済みの記事のみを表示するようにすることができます。
例えば、アーカイブページ一覧から非公開記事を除外するには、function.php に次のコードを追加します。
/*【出力カスタマイズ】クエリーカスタマイズ、ループから非公開記事を除外 */
function custom_posts() {
global $wp_query;
if($wp_query->is_admin) return; // 管理画面内は除く
if(is_post_type_archive()){ // アーカイブページ
$wp_query->query_vars['post_status'] = 'publish'; // 投稿ステータス「公開済」
}
}
add_filter('pre_get_posts', 'custom_posts');
アーカイブページで実行されるように条件分岐を追加。特定のページに限定したい場合は、if文の条件を変更または追加してください。
次に、公開済記事のみを表示するために post_status
に値 publish
(公開済)を指定します。
カスタム投稿タイプのアーカイブのみ指定したい場合などは、is_post_type_archive('example')
などと指定してください。
他の条件で記事を除外する場合
非公開記事以外のステータスで記事を除外する場合は以下の表を参照してください。
- 公開済
- publish
- 予約済
- future
- 下書き
- draft
- 承認待ち
- pending
- 非公開
- private
- ゴミ箱
- trash
- 自動保存
- auto-draft
- 継承
- inherit
メインループやサブループから非公開記事を除外する方法
メインループやサブループから非公開記事を除外する場合は、クエリに条件を追加します。
例えば、サブループから非公開記事を削除する場合は次のコードを追加します。
<?php
$args = array(
'post_type' => 'Products', // 投稿タイプのスラッグを指定
'post_status' => 'publish', // 公開済の投稿を指定
'posts_per_page' => 5 // 投稿件数の指定
);
$the_query = new WP_Query($args); if($the_query->have_posts()):
?>
<?php while ($the_query->have_posts()): $the_query->the_post(); ?>
<?php echo get_the_date(); ?>
<?php the_permalink(); ?>
<?php echo get_the_title(); ?>
<?php the_content(); ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<!-- 投稿が無い場合の処理 -->
<?php endif; ?>
こちらも同様にステータスの指定 post_status
に、値 publish
(公開済)を指定します。
また、サブループの詳しい設定方法は「WordPress メインループとサブループの表示方法」をご覧ください。
まとめ
WordPress で記事一覧から非公開記事を除外(非表示)する方法を紹介しました。