カスタム投稿の「最近の投稿」から特定のカテゴリーを非表示に[WordPress]

例えば、イベント案内などをカスタム投稿で作ったとします。
…で、そのイベント日時が過ぎてしまうと、その記事の役割は8割がたなくなりますよね?
また、いつまでも表示していると、勘違いしてしまうお客さんも出てきたりして…。

あんまり更新しないサイトだと、
何ヶ月も前に終了したイベントなんかが「最新情報」として載っていたりね。

そんなの嫌だ。「僕は嫌だ!」

…で、どうやっていたか言うと、
終了したイベント案内は「下書き」にしたりして誤魔化していたんですよね。

 

でも例えば、過ぎてしまったイベントの記事なんかは、「過去のイベント」などのカテゴリーにしてしまって、そのカテゴリーを表示しないようにしてしまえば良くないですか?!

実際に、いつも使っているテーマ「Enfold」だと、
一覧表示は、「Advanced Layout Editor」を有効にして、
固定ページに「Content Elements」から「Blog Posts」を選んで、
表示したいカスタム投稿(投稿でもOK)のカテゴリーを選べば、選択されていないカテゴリーは表示しないようにできます。

同じように、
「最新情報」みたいな感じで、投稿のタイトルと簡単な紹介文(抜粋)を5件程、トップページに表示したい場合は、
「Content Elements」から「Magazine」を選んで、
表示したいカスタム投稿(投稿でもOK)のカテゴリーを選べば、選択されていないカテゴリーは表示しないようにできます。

 

問題は、ウィジェットなんですよね…。

カスタム投稿の「最近の投稿」をウィジェットで表示する方法は色々あるとは思いますが、
手軽で便利なので「Custom Post Type Widgets」というプラグインを使って表示していたんです。
このプラグインだと、
「最近の投稿」「カテゴリー」「アーカイブ」など、標準のウィジェットがカスタム投稿用にも追加されます。
すごく重宝してます!

でも、カスタム投稿用「最近の投稿」には、カテゴリーの選択機能というのがありません。
標準の「最近の投稿」にも、カテゴリーの選択機能はないですから当然なのですが…。

 

categoryex_main

今回、前置きが非常に長くなって申し訳ありません。
そろそろ本題です!

使用環境

WordPress 4.9.9
テーマ:Enfold 4.1.2

「Enfold」は、優秀なテーマなので、
「Enfold Latest News」というウィジェットを追加してくれます。
標準の「最近の投稿」にサムネイルを付けてくれて、カテゴリーの選択もできるスグレモノです。
ただ、カスタム投稿には対応していません!

でも「Enfold」は、Portfolioというカスタム投稿を自動的に追加します。
で、Portfolioカスタム投稿用に「Enfold Latest Portfolio」というウィジェットも追加するんですね。
で、で、「このあたりを利用すればなんとかなるのでは?!」と思いつきました。


では、カスタマイズしていきましょう!
framework/php/class-framework-widgets.php の 696〜721行目あたりに「AVIA PORTFOLIOBOX」のコードがあるので、これを複製してカスタム投稿のウィジェットに変更します。

※今回は、カスタム投稿の Post types を「news」、
Taxonomies を「newscate」とすると仮定しています。

ちなみに、カスタム投稿は「Custom Post Type UI」というプラグインで追加しています。
その記事はこちら

もう1つ、テーマのfunctions.php、487〜506行目あたりに「activate framework widgets」の関するコードがまとめられているので、「avia_portfoliobox」の下あたりに

と追加しておきましょう。

 

これで、ウィジェットでも、カスタム投稿の最近の記事を表示する際に、表示したいカテゴリーだけ選ぶ事ができるようになります。(諸々の調整はご自身で解決して下さいね)