WordPressの特定のカテゴリに記事がある場合のみ、そのカテゴリに属している記事のみをトップページ( front-page.php )に新着表示する仕組みを作ろうとしました。
最初、 in_category で行けるかと思っていました。
以前にもin_category を使用した処理を書いたことはあったけど、まあ回数は少なかったので忘れてメモがてら説明を。
WordPress Codex 日本語版の説明には、
現在の投稿(あるいは指定した任意の投稿)に、指定したカテゴリーが割り当てられているか調べます。
関数リファレンス/in category
とあります。
「指定した任意の投稿」という表現に惑わされます。
この他、in_category の説明をしているブログなどでも、考えが「トップページに表示したい」という頭になっていると、思い込みも含めて、ちょっと分かりづらい説明になってしまっています。
「トップページに表示させたい」と思いながら下記のような記事を読むと、「正しいはずなのに表示されない!」となってしまいます…。
1234 記事が属するカテゴリーをカテゴリーIDで指定して条件分岐させる<?php if(in_category(9)) : ?>// カテゴリーIDが9のカテゴリーに属した記事のときの処理を書く<?php endif; ?>
【備忘録】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 } ?> |