新着一覧にカスタム投稿を含めるには?

このブログではカスタム投稿タイプという機能を利用して、原種シクラメンと岩千鳥・羽蝶蘭に関する記事は、カスタム投稿タイプとして投稿しています。別にカテゴリーでいいんじゃない? という話なのですが、投稿数が増えてくると記事の一覧から探す場合などに便利です。

Luxeritas はオリジナル記事新着ウィジェットが用意されていますが、WordPress のアクションフック機能を利用することで標準ウィジェットの新着と同様、Luxeritas オリジナルウィジェットでもカスタム投稿を含めることが出来ます。

Luxeritas メニューの「子テーマの編集」から functions.php に以下のPHPコードを追加します。

<pre>function my_latest_posts($wp_query){
    if ((is_home() || is_archive()) && !isset($wp_query->query_vars['suppress_filters'])){
        $wp_query->query_vars['post_type'] = array('post', 'cyclamen', 'chidori');
    }
}
add_action('parse_query', 'my_latest_posts');
</pre>

ポイントは二点で、if 文の条件式の前半、(is_home() || is_archive()) と if ブロックの中身の $wp_query->query_vars によるフィルター指定です。

is_home() と is_archive() は、サイトのトップページかどうか、アーカイブページかどうかを判断しています。上記の条件なら、トップページまたはアーカイブページで真になります。ただし、is_home() については「表示設定」に影響を受けます。固定ページ->フロントページ を設定している場合は、is_home() の代わりに is_front_page() を使う必要があります。

また is_archive() が真となる条件は、カテゴリー、タグ、投稿者、日時で一覧表示したページの場合で、カスタム投稿タイプを利用する場合は、設定によってアーカイブ一覧扱いに出来ます。ここが $wp_query->query_vars のフィルター条件になるので、右辺値の array() の中に新着一覧に表示させたいカスタム投稿タイプのスラッグを追記します。

少なくとも ‘post’ は指定しておかないと記事一覧が表示されなくなるので、間違って消してしまわないようにご注意下さい。わたしの場合は ‘cyclamen’ = 原種シクラメン、’chidori’ = 岩千鳥・羽蝶蘭と、二つのカスタム投稿タイプを追加しています。

functions.php の編集はPHPコードを利用するので、記述間違いなどあるとブログが表示されない、などのトラブルが起こることも多いです。編集前に元の内容をコピーしてすぐに戻せるようにする、など対策を考えることも重要です。幸い WordPress 5.2 からはコード間違いが起きても元に戻せる仕組みを用意してくれたので、以前よりチャレンジしやすくなっています。

プラグインで出来る事も多い WordPress ですが、ちょっとしたカスタマイズならプラグインを使用しないほうが、簡単で動作も速くなることが多いです。特に Luxeritas の場合は標準機能だけでいろいろ出来るので、試してみると面白いんじゃないかと思います。