質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

351閲覧

ループで条件に一致しない場合のelse記述の方法

umauman

総合スコア57

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/01/30 16:36

前提・実現したいこと

とあるイベントのサイトをWordPressで作っています。
参加受付中のイベントのみを一覧表示させるページを作りたく思っています。
受付中の判定はタイムスタンプを使った判定処理をしています。
※この部分のソースは割愛していますが必要があれば記述します。

受付中のイベントのみを一覧表示されるところまではできました。

##下記で受付中のイベントのみ表示させることができました。

php

1<?php 2$args = array ( 3 'post_type' => 'event', //eventという名前のカスタム投稿です。 4); 5$event = new WP_Query( $args ); 6if($event->have_posts()): ?> 7 8<?php 9$event = new WP_Query( $args ); 10if($event->have_posts()): ?> 11<ul> 12<?php while ($event-> have_posts()) : $event->the_post(); ?> 13 14<?php //受付中の判定処理を記載(詳細ソースは省略) 15//受付中の場合は 16$flag = true; 17//受付終了の場合は 18$flag = false; 19?> 20 21<?php if($flag): //受付中の場合 22?> 23<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a> 24<?php endif; ?> 25 26<?php endwhile; ?> 27</ul> 28<?php endif; ?> 29<?php wp_reset_postdata(); ?>

ただ、受付中のイベントが無い場合、
「予定されているイベントはありません」と表示したく思っています。
これはどこにどのように記述をしたら良いのでしょうか?

例えば、下記のようにwhile文の中に入れてしまうと、イベント終了した投稿の数だけ
繰り返し表示されてしまいます。

下記のソースの場合、終了したイベントの数だけ「予定されているイベントはありません」がループ表示されてしまいます。

php

1<?php if($flag): //受付中の場合?> 2<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a> 3<?php else: ?> 4<p>予定されているイベントはありません</p> 5<?php endif; ?>

ループの外側に判定部分を記述した場合は、flagの条件部分が効かなくなってしまい、何も表示されなくなってしまいます。

##下記のソースの場合、「予定されているイベントはありません」が表示されません。

php

1<?php 2$event = new WP_Query( $args ); 3if($event->have_posts()): ?> 4 5<?php //受付中の判定処理を記載 6//受付中の場合は 7$flag = true; 8//受付終了の場合は 9$flag = false; 10if($flag): //受付中の場合 11?> 12<ul> 13<?php while ($event-> have_posts()) : $event->the_post(); ?> 14<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a> 15<?php endwhile; ?> 16</ul> 17<?php else: ?> 18<p>予定されているイベントはありません</p> 19<?php endif; ?> 20 21 22<?php endif; ?> 23<?php wp_reset_postdata(); ?>

どのように記述をするべきかご教示いただけないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PHP

1$all_flag = false; 2$args = array ( 3 'post_type' => 'event', //eventという名前のカスタム投稿です。 4); 5$event = new WP_Query( $args ); 6if($event->have_posts()): ?> 7 8<?php 9$event = new WP_Query( $args ); 10if($event->have_posts()): ?> 11<ul> 12<?php while ($event-> have_posts()) : $event->the_post(); ?> 13 14<?php //受付中の判定処理を記載(詳細ソースは省略) 15//受付中の場合は 16$flag = true; 17//受付終了の場合は 18$flag = false; 19?> 20 21<?php 22$all_flag = $flag || $all_flag; 23?> 24 25<?php if($flag): //受付中の場合 26?> 27<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a> 28<?php endif; ?> 29 30<?php endwhile; ?> 31</ul> 32<?php endif; 33if(!$all_flag):?> 34<p>予定されているイベントはありません</p> 35<?php endif; ?> 36<?php wp_reset_postdata(); ?>

投稿2018/01/30 16:46

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umauman

2018/01/30 17:20

ご回答ありがとうございます。 教えていただいたソースで動作するようになりました。 <?php $all_flag = $flag || $all_flag; ?> 上記ですが、ループの最後の投稿の時に値が代入されるわけでは無く、 途中で「true(受付中)」のものがあった場合、 $all_flagに「true」が代入されるという理解で大丈夫でしょうか? 例えば最後の投稿が「$flag = false(受付終了)」であった場合でも途中の「true」がそのまま 代入されているという認識で問題無いですか? 何度も申し訳ありません。
umauman

2018/01/30 17:44

$all_flagの真偽値をループ表示させたかったのですが、方法がわからず…。添付いただいたページ等見つつやってみます。またわからなかった場合は別で質問してみます。ありがとうございました。
kei344

2018/01/30 18:17

$all_flag = false || $all_flag; $all_flag = true || $all_flag; $all_flag = false || $all_flag; var_dump($all_flag); とかで試してみてください。 「真偽値をループ表示」についてはどういった値が表示されることを期待しているかがわかりません。
umauman

2018/01/30 18:43

説明下手申し訳ありません。 意図としては記述頂いた通り、一度「true」になってその後のループで「false」になった場合 $all_flagの値はどのようになるのかと言った疑問でした。 (var_dumpを記述する場所を間違えていたようで表示できませんでした。お騒がせしました。) 後にfalseが来てもtrueが保持されるのがわかりました。 何度もありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問