icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

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

更新: 2024/02/11 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などで拾うものに関しては、この方法でいけると思います。今回紹介した内容とは逆に『特定カテゴリ・特定記事を拾う』というのもできるので、記事表示などもうまくコントロールしてみてください。


【カテゴリ】- WordPressファンクションetc
【タグ】- ,

関連記事