• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Wordpressで記事がない場合にメッセージ表示)

Wordpressで記事がない場合にメッセージ表示

このQ&Aのポイント
  • Wordpressで特定のカテゴリを一覧表示させる設定を行っています。記事が一件もない場合に、その旨を伝えるメッセージを表示させたい。
  • 以下のソースコードでは、該当するカテゴリに記事が0件の場合、「○○に関する記事は現在ありません。」と表示しています。
  • また、投稿が0の場合に、<h2 class="entry-title">カテゴリ1の投稿一覧</h2>から</div><!-- /container -->まで、全てのレイアウトを含めた表示を非表示にしたいという要件があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

そのテンプレート全体がどうなっているか分からないのでget_postsでもいいかも知れないが、代わりにWP_Queryを使うと使い勝手が良くなろう。 <?php $q = new WP_Query(array('cat' => 1, 'posts_per_page' => 1)); ?> WP_Queryの引数はposts_per_archive_pageあたりを調べても参考になろう。 で、これで$qにはカテゴリIDが1の全投稿が入るわけだが、後は普通に$q->have_posts()で投稿があるかどうかが判定できる。 以上のことから質問のソースを書き換えると ~~~~snippetここから~~~~ <?php $q = new WP_Query(array('cat' => 1, 'posts_per_page' => 1)); ?> <?php if($q->have_posts()): ?> <h2 class="entry-title">カテゴリ1の投稿一覧</h2> <div class="container"> <?php while($q->have_posts()): $q->the_post(); ?> <ul class="hogehoge"> <li> <a href="<?php the_permalink(); ?>" ><img src="<?php echo catch_that_image(); ?>" /></a> </li> <li> <a href="<?php the_permalink();?>"><b><?php the_title(); ?></b></a><br /> <a href="<?php the_permalink();?>"><?php echo mb_substr(get_the_excerpt(), 0, 80); ?>…</a> </li> </ul> <?php endwhile; ?> </div><!-- /container --> <?php else; ?> ○○に関する記事は現在ありまへん。 <?php endif; ?> ~~~~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タグを用いた方が良いのではないかな。それか<div>とかで1投稿に対する見せ方をレイアウトするか。 後、get_the_excerpt()の後ろのてんてんてんって要るかね? 80文字で切るも含めてこのあたりの制御はWP Multibyte Patchに任せたほうがいいような気もする。

oneday77
質問者

お礼

有難う御座います。 お教えいただいた方法で試しておりますが、現状、解決できておりません。 エラーとなり何も表示されません。 色々と試行錯誤して試してみたいと思います。 また、HTML部分でのご指摘も有難う御座います。 問題解決しましたら、もう少し綺麗にソースを整えてみたいと思います。 >>WP Multibyte Patch  有難う御座います、今回このページのこの部分のみが80文字にしたいと考えていましたので、プログラム側で設定してみました。アドバイス有難う御座います。 ちなみに、上記ソースはWPのindex.phpテンプレートで試しているのですが、本来はカテゴリ1が表示されるのでしょうか?真っ白なので悩んでおります…。

oneday77
質問者

補足

有難う御座います。 その後、頂いたアドバイスとリファレンス的なサイトを渡り歩き、何とか思ったとおりの表示が出来ました。 投稿がない場合は、枠自体も表示されません。希望とおりです。 本当に有難う御座いました。 これから例のHTML部分を綺麗に修正したいと思います。 感謝、感謝です!m(_ _)m

関連するQ&A