[WordPress] ブログトップの投稿一覧から、特定のカテゴリがついた記事を除外して表示してみた
![アイキャッチ画像](/img/article/2019/04/09/00-eye-catch.png)
Nプログラマ(@Nprog128)です。
WordPressでトップページの記事一覧から特定のカテゴリを除外したい、という情報を探していたら、 Cocoon作者のわいひらさんの記事 にたどり着いて、無事にやりたいことを実現できました。
今回の内容は、わいひらさんの記事を参考にした時に、自分がやったことや思ったことのを備忘録として残しておきます。
特定のカテゴリを除外する目的
特定のカテゴリ除外の目的は、トップページの記事一覧で日記カテゴリーのみを除外して表示したい、というものです。
自分の雑記ブログなので色々とごちゃまぜなカテゴリがあってその中で記事一覧を表示していたのですが、日記カテゴリだけは一覧の中でノイズのような感じになっていました。
なので、この日記カテゴリだけを除外して投稿記事一覧を表示したいな〜と考えたわけです。
とは言え、除外したのは本当に最初の方です。
そもそも、このブログに個人の日記自体が必要なのかをよくよく考えると、、、
と、自分自身でもそう思ってしまったため、カテゴリを除外するのではなく別ブログとして運用する、ということになりました。
なので、今はサブドメインで 日記ブログ を運用しています。
さらにWordPressからHugoに引っ越して、ブログの環境も変わっています。
実装したコード
レンタルサーバーのPHPバージョンが7以上なので、自分は無名関数で実装しました。
funciton.phpを編集するので、バックアップを取っておきましょう。
1<?php
2add_action('pre_get_posts', function($query) {
3 if ($query->is_home() && $query->is_main_query()) {
4 $query->set('cat', '-10'); // 除外するカテゴリIDは10
5 }
6});
お手軽に実装できるので便利です。
注意点
個人的に注意したいなって思うのは、指定するカテゴリIDです。
WordPressの環境が異なるとカテゴリIDが変わる可能性があります。
WordPressの開発と本番の環境でカテゴリIDが違うってことが起こり、開発では動くけど本番じゃ動かねー!ってことがあるかもしれないですね。
しっかりと除外したいIDを確認しましょう。
参考にした公式のページ
実装にあたって、全体的な実装は pre_get_posts を、queryにセットする記述は is_main_query のドキュメントを参考にしました。
おわりに
今回の内容は、 Cocoon作者のわいひらさんの記事 を参考にした時に、自分がやったことや思ったことの備忘録、という内容でした。
本番環境でいきなり作るとエラーが出て真っ白なページがでる可能性があるので、実装は十分注意したいですね。
それでは、このへんで。
バイナリー!