WordPressログイン時に非公開記事を記事一覧ページに表示しない方法【WordPress】

最終更新日:

公開日:2025-02-21

ページ内に広告が含まれています。
WordPressログイン時に非公開記事を記事一覧ページに表示しない方法【WordPress】

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ログイン時に非公開記事を記事一覧ページに表示しない方法を解説しました。
非公開の記事が一覧に表示されると紛らわしいと自分は思うので、毎回非表示(除外)にするようしています。これは人によって好みが分かれるかと思いますので、実際に使用する方と相談されるのがいいでしょう。

おすすめ記事

当ブログ運営者 ヒデ

北海道札幌市在住のフリーランスでWeb制作を行っているヒデです。Webコーディング(HTML・CSS・JSなど)やWordpressのカスタマイズ等のテクニック、困った時に確認できる分かりやすい解説を目標にして情報を発信していければと思っています。プロフィールはこちら

当サイトに関するご意見・ご感想・ご要望または仕事のご依頼は以下のフォームよりお願い致します。

お問い合わせ お仕事のご依頼

各SNSのフォローはこちらから

PAGE TOP