前回に引き続き、Wordpressの新テーマ、Twenty Seventeenのカスタマイズについて。
フロントページに表示される記事一覧をあるカテゴリーに絞り込むことは出来たのですが、そうすると該当ページ(news)をクリックした時にはまだ全カテゴリーの記事が表示されてしまう事態が起きます。
これに対応するために、index.phpを弄ります。(なぜindex.phpなのかは前記事のプラス解説を参照してください。)
/wp-content/themes/twentyseventeen/index.php
を子テーマにコピーして
/* Start the Loop */ while ( have_posts() ) : the_post(); /* * Include the Post-Format-specific template for the content. * If you want to override this in a child theme, then include a file * called content-___.php (where ___ is the Post Format name) and that will be used instead. */ get_template_part( 'template-parts/post/content', get_post_format() ); endwhile;
ここのWhile文の中に条件を付け加えます。
コメントもとっぱらって、
while ( have_posts() ) : the_post(); if (in_category("news")) { get_template_part( 'template-parts/post/content', get_post_format() ); } endwhile;
こんな感じに。
in_category(“slug”)またはin_category(id)で、投稿がそのカテゴリーに含まれるかどうかがチェックできます(参照:関数リファレンス/in category – WordPress Codex 日本語版)。
これで、newsページをクリックしても全記事ではなくニュースカテゴリーに入っている記事だけが表示されるようになります。
プラス解説
in_category()によく似た関数に、is_category()というのがあって、こちらは
カテゴリーアーカイブページであれば true、そうでなければ false
なので投稿のチェックにはなりませんので要注意。
さて、カテゴリーをしぼり込んだわけですが、ということは他のカテゴリーの記事を表示するページが必要になります。
でもカテゴリーなわけなので、カテゴリーの記事一覧を指定してあげれば問題ないはず。
・・・とここまで書いてきてやっと気が付きましたが、そもそもindex.phpをイジらなくても
yoursite.com/news
というURLを使わせずに、
yoursite.com/category/news
を見てもらえば良いわけですね。そうだったー。
つまり、メニューで固定ページへのリンクを使わずに、カテゴリーへのリンクを使えばいいというわけです。(メニューの編集方法は公式サイトなどを参照のこと)
後は念のために、
yoursite.com/news
へのアクセスを切り替えれば良いのかなあ。別に要らない気もしますが(気になる方は上のようにindex.phpをいじっちゃえば良いし、.htaccess使うとか色々と方法はあります)。
それより、カテゴリー一覧だと、タイトルに「カテゴリー: ニュース」みたいに出ちゃうのをなんとかしましょうかね。ここねー、spanタグでも挟んでくれれば良いのに素で出力してくれちゃうという、wordpressさんの中の人に真意を聞きたいポイントの一つです。次回はここを書いてみたいと思います。