【WordPress】カスタム投稿の特定タグの記事を一覧から非表示にする方法

ブログ・サイト
ブログ・サイト
この記事は約3分で読めます。

とっちゃん@nyanco! です。

今回はWordPressの「カスタム投稿」の特定のタグがついた記事を一覧から除外(非表示)する方法の覚書です。

肉玉にゃんこ

ちなみに「カスタム投稿」はプラグイン「CPT UI」を使って作成しましたにゃ~
その他の方法で作成したカスタム投稿でも参考にはなると思いますにゃ~

スポンサーリンク

記事を公開したいけど一覧には表示させたくない

WordPressサイトを運用していると、記事を一般公開する前に外部の関係者に確認してもらいたいというシーンが良くあります。

以前はプラグイン「Public Post Preview」を使っていたのですが、プラグインを使わず別の方法で似たようなことができないか…と考えて思いついたのが次の方法です。

  • 「外部確認」というタグ(タクソノミー)「external-CHK」というスラッグ名で作成 ※名前・スラッグ名は任意でOK
  • 一般公開前に外部確認できるようにしたい記事に「外部確認」をつける
  • 公開はされるけど一覧には表示されない

要は記事を公開状態にするけど一覧には非表示になるので、記事のURLを知ってる人しか確認できないようにするという方法です。

ただこの方法だと、記事を公開しているので部外者がURLをたまたま入力して見られてしまうというリスクがあります(可能性は低いですが)。

肉玉にゃんこ

記事にパスワードをかけるなどしておくと良いかも知れませんにゃ〜
本文は隠れるけどタイトルは見えちゃう点は要注意ですにゃ〜

なので一般公開前に部外者に見られてしまうと非常にマズイ内容の記事には向いてませんが、万が一見られてもリスクは低いといったライトなシーンでは十分使えるかなと思います。

「カスタム投稿」の「特定タグ」の記事を一覧から除外するコード

早速ですがコードはこちら。

<?php query_posts($args = array(
  'post_type' => 'test',//カスタム投稿名 (通常の「投稿」はpost)
  'tax_query' => array(
            array(
            'taxonomy' => 'test-tag', //タクソノミー名を指定 (通常の「投稿」はcategory)
            'field' => 'slug', //'term_id'、'slug'など、次の term を指定するフィールド名を指定
            'terms' => array('external-CHK'), //タームを指定 ※複数タイプだけど1つ指定も可能
            'operator' => 'NOT IN', //これを入れることで指定したタームの記事が一覧から除外(非表示)になる
            )
        )
)); ?>

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>

~出力内容~

<?php endwhile; ?>
<?php else : ?>

~該当記事なしの場合~

<?php endif; ?>
<?php wp_reset_query(); ?><!-- query_postsの終わりに必ず入れる! -->

query_postsはメインクエリを書き換えてしまう=問題が起こりやすいことから非推奨とされていますが、取り急ぎの対応だったのでquery_postsを利用しています。

以下、自分用メモです。

  • 特定の「カテゴリ」を一覧から除外する場合、除外したい「カテゴリ」の「ID」の前に「-」をつければ非表示にできるが、「タグ」だとできない?
  • 「’operator’ => ‘NOT IN’」というパラメータで一覧表示から除外できる
肉玉にゃんこ

自分用メモなので間違えてる解釈があるかもですにゃ~

おわりに

本記事がどなたかの参考になれば幸いです。

今回は以上となります。
最後まで読んでいただきましてありがとうございました!
それではまた〜✧٩(ˊωˋ*)و✧

コメント