![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
現在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で質問しましょう!
似たような質問が見つかりました
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- PHP PHP MySql ページング 2 2022/09/20 06:38
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- HTML・CSS FC2カートのテンプレートでの商品表示について 1 2023/03/02 18:05
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
こちらはただの直列処理ですか?
-
php 確認表示画面で値をSESSION...
-
php 入力画面から確認表示画面...
-
phpでcookieがうまく保存されない
-
アップロード画像数でCSSを分け...
-
ここで言う空文字の意味とは?
-
空文字 "" ですが 空文字の意味...
-
ワードプレスサイト PHP8.0.25...
-
ECCUBE4のページ管理でPHPを実...
-
値の取り出し方について教えて...
-
$filePath = './user_img/' . $...
-
PHP MySql 画像を取得
-
EC-CUBEをeclipseからコンパイ...
-
jpgraphで表示されない
-
配列の値の更新方法について
-
a href リンクタグでだけで 送...
-
PHPSpreadsheetを使って関数を...
-
PHPSpreadsheetによる書き出し...
-
「ログイン機能を持たせる」説...
-
ここで言う「アロー演算子」の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WordPressのLighting(テーマ)に...
-
wordpress投稿内でcgiを動かしたい
-
PHPのソース変更が反映されない
-
Wordpressで記事がない場合にメ...
-
xreaでのWordpressインストール...
-
Smartyのテンプレートにinclude...
-
<?php phpinfo(); ?>が出たり出...
-
Webデザイナー向けLinuxユーザ...
-
変数で日付を指定し、新しい順...
-
ワードプレス index.phpの差し...
-
サーバーへアプロード、エラー...
-
wordpressサイトの、任意の場所...
-
WordPress(ワードプレス)の記...
-
各ユーザーの記事が閲覧できる...
-
ワードプレスでカテゴリー毎に...
-
PHPでワードプレスにできること...
-
『PHP』ワードプレスで特定カテ...
-
URL短縮ツール「楽々URL」をさ...
-
wordpress カスタム投稿タイプ...
-
PHP記述に便利なソフトを教...
おすすめ情報