質問: wordpressで記事がない場合にメッセージ表示 現在wordpressで特定のカテゴリを一覧表示させる設定を行っています。 ただ、記事が一件もない場合に、その旨を伝えるメッセージを表示させたいのと全てを非表示にさせたいと思っているのですが上手くいきません。(メッセージを表示とコンテンツ全体非表示の2つの方法をお伺いしたいです) 以下、実際のソースになるのですが、該当するカテゴリに記事が0件の場合 「○○に関する記事は現在ありません。」 と表示させるにはどうしたらよいでしょうか? カテゴリ1の投稿一覧 ... 2つ目の質問となりますが、投稿が0の場合にメッセージの表示ではなく、 カテゴリ1の投稿一覧 から、 まで、全てのレイアウトを含めた表示を非表示にするにはどのような定義を行えばよいでしょうか? 試行錯誤試してみたのですが、本件2つの方法が解決できませんでした。 お詳しい方いらっしゃいましたらアドバイスのほどお願いいたします。 よろしくお願いします。
回答: そのテンプレート全体がどうなっているか分からないのでget_postsでもいいかも知れないが、代わりにwp_queryを使うと使い勝手が良くなろう。 1, 'posts_per_page' => 1)); ?> wp_queryの引数はposts_per_archive_pageあたりを調べても参考になろう。 で、これで$qにはカテゴリidが1の全投稿が入るわけだが、後は普通に$q->have_posts()で投稿があるかどうかが判定できる。 以上のことから質問のソースを書き換えると ~~~~snippetここから~~~~ 1, 'posts_per_page' => 1)); ?> have_posts()): ?> カテゴリ1の投稿一覧 have_posts()): $q->the_post(); ?> ... ○○に関する記事は現在ありまへん。 ~~~~snippetここまで~~~~ 上のコードは想像で書いたので実際に動かしてはないのでその辺はあれこれ試してみて欲しい。 まず、wp_queryで$qの中に投稿を詰め込む。前述の通り$q->have_posts()が投稿有無の判断基準になるので if($q->have_posts()): // ある else: // ない endif: が一番大きなくくりになる。で、「ある」の方は今度はwhileで$q->have_posts()がfalseになるまでくるくるまわす。while開始直後に$q->the_post()を呼ぶ事でそこからendwhileの中までは通常のthe_title()などで$q内の現在の投稿にアクセスする事ができる。「ない」は普通に「ねーよ」というのを書けばいい。 直接は関係ないがhtmlの話。一応1投稿に対して1ulタグにしたかったのかなと思ってサンプルコードはこうしたが、明らかに意図が違う2つのliタグが入っているulタグよりかはdlタグを用いた方が良いのではないかな。それかとかで1投稿に対する見せ方をレイアウトするか。 後、get_the_excerpt()の後ろのてんてんてんって要るかね? 80文字で切るも含めてこのあたりの制御はwp multibyte patchに任せたほうがいいような気もする。