
現在Wordpressで特定のカテゴリを一覧表示させる設定を行っています。
ただ、記事が一件もない場合に、その旨を伝えるメッセージを表示させたいのと全てを非表示にさせたいと思っているのですが上手くいきません。(メッセージを表示とコンテンツ全体非表示の2つの方法をお伺いしたいです)
以下、実際のソースになるのですが、該当するカテゴリに記事が0件の場合
「○○に関する記事は現在ありません。」
と表示させるにはどうしたらよいでしょうか?
<h2 class="entry-title">カテゴリ1の投稿一覧</h2>
<div class="container">
<?php
$postslist = get_posts('numberposts=-1&orderby=post_date&order=DESC&cat=1');
foreach ($postslist as $post) : setup_postdata($post);
?>
<ul class="hogehoge">
<a href="<?php the_permalink(); ?>" ><img src="<?php echo catch_that_image(); ?>" /></a>
<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 endforeach; ?>
</div><!-- /container -->
2つ目の質問となりますが、投稿が0の場合にメッセージの表示ではなく、
<h2 class="entry-title">カテゴリ1の投稿一覧</h2>
から、
</div><!-- /container -->
まで、全てのレイアウトを含めた表示を非表示にするにはどのような定義を行えばよいでしょうか?
試行錯誤試してみたのですが、本件2つの方法が解決できませんでした。
お詳しい方いらっしゃいましたらアドバイスのほどお願いいたします。
よろしくお願いします。
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に任せたほうがいいような気もする。
この回答への補足
有難う御座います。
その後、頂いたアドバイスとリファレンス的なサイトを渡り歩き、何とか思ったとおりの表示が出来ました。
投稿がない場合は、枠自体も表示されません。希望とおりです。
本当に有難う御座いました。
これから例のHTML部分を綺麗に修正したいと思います。
感謝、感謝です!m(_ _)m
有難う御座います。
お教えいただいた方法で試しておりますが、現状、解決できておりません。
エラーとなり何も表示されません。
色々と試行錯誤して試してみたいと思います。
また、HTML部分でのご指摘も有難う御座います。
問題解決しましたら、もう少し綺麗にソースを整えてみたいと思います。
>>WP Multibyte Patch
有難う御座います、今回このページのこの部分のみが80文字にしたいと考えていましたので、プログラム側で設定してみました。アドバイス有難う御座います。
ちなみに、上記ソースはWPのindex.phpテンプレートで試しているのですが、本来はカテゴリ1が表示されるのでしょうか?真っ白なので悩んでおります…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpの問い合わせフォームを作っ...
-
reuterの記事をbeautiful.soup....
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
Q&Aサイトを作成していてURLの...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
SplFileObject を利用したとき...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
-
phpのheader("Location:#pos")...
-
PHPからCSVをアップロード後、m...
-
[php初心者]サイトを見てデータ...
-
phpに関わる所での、form actio...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php 特定の範囲を指定したい ワ...
-
WordPressのLighting(テーマ)に...
-
■pukiwikiについての質問です。
-
URLから変数が渡らない。
-
PHP初心者です。
-
文字列連結がうまくいきません
-
素人な質問ですが、PHPのURLを…
-
XAMPPについて
-
phpBBのFAQの内容を変更したい...
-
ランキングを表示する際の画像...
-
ワードプレス index.phpの差し...
-
phpの中にphpを(wordpres関連...
-
WP/ 記事タイトルをクリックさ...
-
Wordpressで記事がない場合にメ...
-
phpの構成(wordpress)
-
Advanced Custom Fieldsの出力
-
Google Adsenseのモバイル向け...
-
wordpressの記事一覧が文字化け
-
PHP記述に便利なソフトを教...
-
wordpress パーマリンク設定時...
おすすめ情報