WordPress一覧表示で、特定のカテゴリ/投稿を表示しないようにするには?→category_not_in・post_not_inで

      2021/02/23   1955文字

今回は、WordPressの公式フォーラムを見ていたら、『一覧から特定のカテゴリ/投稿を表示しないようにするにはどうする』みたいなことを書いていた人がいたので(特に面識はありません)、それに対し、管理人が以前やってみた方法で対処できそうだったのでご紹介します。
get_posts(内部ではWP_QueryをつかうのでWP_Queryでも可)に配列でパラメータ渡すときに、特定の項目を指定することで対処できました。さっそくやり方をみてみましょう。

今回やりたいこと~記事一覧などの部分で、特定カテゴリや特定記事を非表示にする


このサイト(読んどけコラム)の例ですけど、通常こんな風に一覧がでます。デフォルトだと全部のカテゴリ・公開している記事を拾ってしまうので、状況によっては『〇〇は一覧に出したくない』みたいな希望がでてくるかもしれません。

例えば、webのコンサルタントさんのサイトで、『サイトのブランディング上、おすすめとして一覧に出すのはSEO情報とかにして、昨日食ったラーメンの記事は一覧にださない』みたいな感じでしょうか。ユーザー・読者的には、『余計なものが一覧に出てこない』というメリットがあります(状況によっては、一見不必要なお遊び記事を出しておく、という戦略もあるかもしれません。ラーメン屋のサイトでアイドルの話とかね)。

WordPress一覧表示で、特定のカテゴリ/投稿を表示しないようにするには

テーマによって状況が違うかもしれませんが(例えば、一覧をとるときに、直接データベースにSQLを投げてるとか)、get_postsやWP_Queryで記事をとってきて一覧を出すようなタイプだと、以下の方法が使えると思います。ここでは、管理人が作った著作権フリー曲サイトSSFで実装した例を、2つみてみましょう。

特定カテゴリ非表示は、category_not_inで


先日、SSFに実装した『ショートコードでトップで新着記事表示』のプログラムです。get_postsで記事を取ってきて、PHPのforeachでループ回して出力していくタイプです。変数$argは配列で、get_postsに渡すパラメータが入っています。ここでcategory_not_inを指定しました。1番は、非表示にしたいカテゴリ(未分類)のidです。


このように、未分類カテゴリ以外の記事がトップ新着にでました。未分類には曲素材追加の記事がないため、この指定をすることにより、ユーザーはトップから曲素材追加の記事だけに飛ぶことができます。

特定記事を非表示にするときは、post_not_inで


SSFのフィールド検索システムページです。テスト記事を表示モードにしたところ、こちらの一覧でも拾って表示されるようになってしまったので、この記事単体で、一覧非表示をやってみます。


記事取得プログラムの部分。このあとこちらも$posts_array =get_posts($args);みたいにして、foreachで回します。その前に、先ほどと同じようにパラメーター指定。こちらはpost_not_inとid指定をしました。非表示にしたいテスト記事のidは890番。


出てこなくなりました。成功です。

参考リンク(codex)

あとがき・まとめ

  • get_posts・WP_Queryなどで記事を拾っている場合は、パラメータ指定で非表示ok
  • 特定カテゴリを非表示にするときはcategory__not_inを使う
  • 特定の投稿を非表示にするときはpost__not_inを使う

まとめるとこんなところでしょうか。直接SQL投げているテーマでは別の方法でやるかもしれませんが、通常のget_posts・WP_Queryなどで拾うものに関しては、この方法でいけると思います。今回紹介した内容とは逆に『特定カテゴリ・特定記事を拾う』というのもできるので、記事表示などもうまくコントロールしてみてください。


【カテゴリ】 - PHP・データベースetc
【タグ】 - ,

  関連記事

【画像つきでわかりやすい】WordPressで使われるデータは、MySQLデータベースに、どのように格納されているの?
【WP記事取得クエリ・プラグイン無し】お知らせなどに使える、ショートコードで特定カテゴリ記事を表示プログラム
【別に止めなくてOK】WordPressサイトなどに、アメブロ・fc2など無料ブログの更新情報を表示して連携する方法
【超危険】WordPressデータベースリビジョンお掃除
【WordPress条件分岐】is_singleとis_singularって違うの?→idやスラッグ指定、投稿タイプ指定の面で違いが
【WPユーザー名バレ対策】ユーザー名表示からPHP・preg_matchでリダイレクト(wp-json/wp/v2/usersなど)
PHP・shuffleやarrayを使った、画像ランダム表示方法~メインビジュアルやバナー・テキストにも利用可能
YouTube Data APIを使って、PHPで『タイトル・動画id・サムネイル画像』などを取得してみる(Search: listリソース)
【WordPressカスタムフィールド検索】meta_queryで、シリアライズ値が入ったフィールドを持つ記事をヒットさせるには?
WordPressの記事IDで判定して転送~PHP・headerとget_the_IDで対応、the_IDとの挙動の違いも
WordPress・REST APIのjsonファイルにカスタムフィールドを入れ、タイトル・アイキャッチと共に外部サイトで取得・表示
【WordPress】記事文字数のカウント方法(コア機能・プラグイン)チェックと、フロントへの出力について