WordPressの特定のカテゴリに記事がある場合のみ、そのカテゴリに属している記事のみをトップページ( front-page.php )に新着表示する仕組みを作ろうとしました。
最初、 in_category で行けるかと思っていました。
以前にもin_category を使用した処理を書いたことはあったけど、まあ回数は少なかったので忘れてメモがてら説明を。
WordPress Codex 日本語版の説明には、
現在の投稿(あるいは指定した任意の投稿)に、指定したカテゴリーが割り当てられているか調べます。
関数リファレンス/in category
とあります。
「指定した任意の投稿」という表現に惑わされます。
この他、in_category の説明をしているブログなどでも、考えが「トップページに表示したい」という頭になっていると、思い込みも含めて、ちょっと分かりづらい説明になってしまっています。
「トップページに表示させたい」と思いながら下記のような記事を読むと、「正しいはずなのに表示されない!」となってしまいます…。
【備忘録】in_categoryの条件分岐【WordPress】
in_category は、「今自分がどこにいるか」で挙動が変わってきます。
たとえば、「news」というカテゴリと「information」というカテゴリがあったとして、
| 1 2 3 | <?php if (in_category('information')) { ?> ここに何か表示させる <?php } ?> | 
という書き方をしたときは、自分が information カテゴリにいるときしか機能しないものになります。
私のように、「特定のカテゴリの新着情報をトップページに表示させたい」という場合には、次のような書き方をすればOKです。
なんだかスッキリしない書き方だけど、今の私にはこれが限界。
アクションフックなんかが使えればカッコイイんだけどなぁ。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <?php     $chosen_id = 15; // 投稿数をカウントしたいカテゴリのID     $thisCat = get_category($chosen_id);     if ($thisCat->count != 0 ) { //上記で指定したカテゴリIDの投稿が 0 以外だったときの処理         echo <<<EOD                 <div class="inside-article">                     <h2>◯◯カテゴリの投稿</h2>                         <dl class="news"> EOD;                         $newslist = get_posts( array(                             'posts_per_page' => '3',                             'cat' => '15' // $chosen_id で指定したのと同じIDを設定                         ));                         foreach( $newslist as $post ):                         setup_postdata( $post );                         $cat = get_the_category();                         $catName = $cat[0]->cat_name;                         $catSlug = $cat[0]->category_nicename;                 ?>                 <dt><?php the_time('Y.m.d'); ?></dt>                     <dd>                         <span class="<?php echo $catSlug; ?> cat"><?php echo $catName ?></span>                         <span class="news-title"><a href="<?php the_permalink(); ?>"> <?php the_title(); ?></a></span></dd>                 <?php                   endforeach;                   wp_reset_postdata();                  echo <<<EOD                         <p><a href="/news/category/hogehoge/">もっと見る</a></p>                     </dl>                 </div><!-- .inside-article --> EOD; } elseif ( $thisCat->count == 0 ) { // カテゴリ内の投稿が 0 だったら何も表示しない ?> <?php } ?> | 
