例えば、イベント案内などをカスタム投稿で作ったとします。
…で、そのイベント日時が過ぎてしまうと、その記事の役割は8割がたなくなりますよね?
また、いつまでも表示していると、勘違いしてしまうお客さんも出てきたりして…。
あんまり更新しないサイトだと、
何ヶ月も前に終了したイベントなんかが「最新情報」として載っていたりね。
そんなの嫌だ。「僕は嫌だ!」
…で、どうやっていたか言うと、
終了したイベント案内は「下書き」にしたりして誤魔化していたんですよね。
でも例えば、過ぎてしまったイベントの記事なんかは、「過去のイベント」などのカテゴリーにしてしまって、そのカテゴリーを表示しないようにしてしまえば良くないですか?!
実際に、いつも使っているテーマ「Enfold」だと、
一覧表示は、「Advanced Layout Editor」を有効にして、
固定ページに「Content Elements」から「Blog Posts」を選んで、
表示したいカスタム投稿(投稿でもOK)のカテゴリーを選べば、選択されていないカテゴリーは表示しないようにできます。
同じように、
「最新情報」みたいな感じで、投稿のタイトルと簡単な紹介文(抜粋)を5件程、トップページに表示したい場合は、
「Content Elements」から「Magazine」を選んで、
表示したいカスタム投稿(投稿でもOK)のカテゴリーを選べば、選択されていないカテゴリーは表示しないようにできます。
問題は、ウィジェットなんですよね…。
カスタム投稿の「最近の投稿」をウィジェットで表示する方法は色々あるとは思いますが、
手軽で便利なので「Custom Post Type Widgets」というプラグインを使って表示していたんです。
このプラグインだと、
「最近の投稿」「カテゴリー」「アーカイブ」など、標準のウィジェットがカスタム投稿用にも追加されます。
すごく重宝してます!
でも、カスタム投稿用「最近の投稿」には、カテゴリーの選択機能というのがありません。
標準の「最近の投稿」にも、カテゴリーの選択機能はないですから当然なのですが…。
今回、前置きが非常に長くなって申し訳ありません。
そろそろ本題です!
使用環境
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」のコードがあるので、これを複製してカスタム投稿のウィジェットに変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
/** * AVIA CUSTOM POSTBOX // ←分りやすいようにコメントで名称を入れてます */ if (!class_exists('avia_custom_postbox')) // ←カスタム投稿のWidgetだという事がわかる名前を付けます { class avia_custom_postbox extends avia_newsbox // ←上で定義した名前で定義 { function __construct() { $this->avia_term = 'newscate'; // ←ここはカスタム投稿の Taxonomies を入れます $this->avia_post_type = 'news'; // ←ここはカスタム投稿の Post types を入れます $this->avia_new_query = ''; //set a custom query here $widget_ops = array('classname' => 'newsbox custom_postbox', 'description' => 'A Sidebar widget to display latest portfolio entries in your sidebar' ); // ←classname を適宜変更・追加します WP_Widget::__construct( 'custom_postbox', THEMENAME.' Latest Custom post', $widget_ops ); // ←この箇所も適宜変更しておきます。 } } } |
※今回は、カスタム投稿の Post types を「news」、
Taxonomies を「newscate」とすると仮定しています。
ちなみに、カスタム投稿は「Custom Post Type UI」というプラグインで追加しています。
その記事はこちら
もう1つ、テーマのfunctions.php、487〜506行目あたりに「activate framework widgets」の関するコードがまとめられているので、「avia_portfoliobox」の下あたりに
1 |
register_widget( 'avia_custom_postbox' ); |
と追加しておきましょう。
これで、ウィジェットでも、カスタム投稿の最近の記事を表示する際に、表示したいカテゴリーだけ選ぶ事ができるようになります。(諸々の調整はご自身で解決して下さいね)