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

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

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

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

WordPress

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

PHP

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

1回答

837閲覧

WPで、関連記事がない時、別のカテゴリーの関連記事を表示したく思っています。

j123

総合スコア15

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

WordPress

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

PHP

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2021/03/23 05:20

編集2021/03/23 08:30

Wordpressで関連記事を表示しているのですが、
関連記事がない場合に別のカテゴリーの関連記事を表示したく思っています。

以下の方な記述で色々試しているのですが、
分岐、whileの使い方が間違っている?のか、
エラーで表示されず、解決できずにいる状態です。。

<!--関連商品--> <section> <?php $categories = get_the_category($post->ID); $category_ID = array(); foreach($categories as $category): array_push( $category_ID, $category -> cat_ID); endforeach ; $args = array( 'post__not_in' => array($post -> ID), 'posts_per_page'=> 5,//defaultは10 'category__in' => $category_ID, 'orderby' => 'rand', ); $st_query = new WP_Query($args); ?> <?php if( $st_query -> have_posts() ): ?> <?php while ($st_query -> have_posts()) : $st_query -> the_post(); ?> <h4>関連商品</h4> <div> <dl> <dt class="thumbBox"> <a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"> <?php if ( has_post_thumbnail() ): // サムネイルを持っているときの処理 ?> <?php $title= get_the_title(); the_post_thumbnail(array( 300,300 ), array( 'alt' =>$title, 'title' => $title)); ?> <?php else: // サムネイルを持っていないときの処理 ?> <img src="<?php echo get_template_directory_uri(); ?>/images/NoImg.png" alt="no image" title="no image" width="150" height="150" /> <?php endif; ?> </a> </dt> <dd> <h5 class="entry-title"> <a href="<?php the_permalink(); ?>"><?php echo mb_substr( $post->post_title, 0, 30) . '...'; ?></a> </h5> </dd> </dl> </div><!-- /.entry --> <?php endwhile; ?> <!-- 関連商品がない時、別カテゴリーの商品一覧を追加したい --> <?php query_posts('cat=1,2'); ?><!--カテゴリーID:例えば1,2のカテゴリーを指定--> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <h4>別カテゴリーの商品一覧</h4> <div class="entry"> <dl> <dt class="thumbBox"> <a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"> <?php if ( has_post_thumbnail() ): // サムネイルを持っているときの処理 ?> <?php $title= get_the_title(); the_post_thumbnail(array( 300,300 ), array( 'alt' =>$title, 'title' => $title)); ?> <?php else: // サムネイルを持っていないときの処理 ?> <img src="<?php echo get_template_directory_uri(); ?>/images/NoImg.png" alt="no image" title="no image" width="150" height="150" /> <?php endif; ?> </a> </dt><!-- /.thumbBox --> <dd> <h5 class="entry-title"> <a href="<?php the_permalink(); ?>"><?php echo mb_substr( $post->post_title, 0, 30) . '...'; ?></a> </h5> </dd> </dl> </div><!-- /.entry --> <?php else: ?> <p>関連商品はありませんでした←これは本当はいらない</p> <?php endif;wp_reset_postdata();?> </section>

Wordpressの「ループ」のページのwhileの使い方も読んで。同じような記述にしているつもりなのですが、、、
何が間違っているのか、教えていただけないでしょうか?

お手数おかけしますが、
よろしくお願いいたします。

追記ーーー
エラーメッセージは
『このサイトで重大なエラーが発生しました。』
と表示されている状態です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

<!-- 関連商品がない時、別カテゴリーの商品一覧を追加したい -->

というのが

<?php if( $st_query -> have_posts() ): ?>に対してなら、

対応するelseが必要ではないでしょうか?
現状ですと上のif文が閉じていないためにエラーが出ているのだと思います。(elseの他に末尾にendifも必要ですね)

【追記】
動作確認していませんが下記のコードでどうなりますでしょうか?
また、エラーがでる場合エラーメッセージも追記お願いします。

PHP

1 <!--関連商品--> 2 <section> 3 <?php 4 $categories = get_the_category($post->ID); 5 $category_ID = array(); 6 foreach($categories as $category): 7 array_push( $category_ID, $category -> cat_ID); 8 endforeach ; 9 $args = array( 10 'post__not_in' => array($post -> ID), 11 'posts_per_page'=> 5,//defaultは10 12 'category__in' => $category_ID, 13 'orderby' => 'rand', 14 ); 15 $st_query = new WP_Query($args); ?> 16 <?php if( $st_query -> have_posts() ): ?> 17 <?php while ($st_query -> have_posts()) : $st_query -> the_post(); ?> 18 <h4>関連商品</h4> 19 <div> 20 <dl> 21 <dt class="thumbBox"> 22 <a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"> 23 <?php if ( has_post_thumbnail() ): // サムネイルを持っているときの処理 ?> 24 <?php 25 $title= get_the_title(); 26 the_post_thumbnail(array( 300,300 ), 27 array( 'alt' =>$title, 'title' => $title)); ?> 28 <?php else: // サムネイルを持っていないときの処理 ?> 29 <img src="<?php echo get_template_directory_uri(); ?>/images/NoImg.png" alt="no image" 30 title="no image" width="150" height="150" /> 31 <?php endif; ?> 32 </a> 33 </dt> 34 <dd> 35 <h5 class="entry-title"> 36 <a 37 href="<?php the_permalink(); ?>"><?php echo mb_substr( $post->post_title, 0, 30) . '...'; ?></a> 38 </h5> 39 </dd> 40 </dl> 41 </div><!-- /.entry --> 42 <?php endwhile; ?> 43 <?php else:?> 44 45 <!-- 関連商品がない時、別カテゴリーの商品一覧を追加したい --> 46 <?php query_posts('cat=1,2'); ?> 47 <!--カテゴリーID:例えば1,2のカテゴリーを指定--> 48 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 49 <h4>別カテゴリーの商品一覧</h4> 50 <div class="entry"> 51 <dl> 52 <dt class="thumbBox"> 53 <a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"> 54 <?php if ( has_post_thumbnail() ): // サムネイルを持っているときの処理 ?> 55 <?php 56 $title= get_the_title(); 57 the_post_thumbnail(array( 300,300 ), 58 array( 'alt' =>$title, 'title' => $title)); ?> 59 <?php else: // サムネイルを持っていないときの処理 ?> 60 <img src="<?php echo get_template_directory_uri(); ?>/images/NoImg.png" alt="no image" 61 title="no image" width="150" height="150" /> 62 <?php endif; ?> 63 </a> 64 </dt><!-- /.thumbBox --> 65 <dd> 66 <h5 class="entry-title"> 67 <a 68 href="<?php the_permalink(); ?>"><?php echo mb_substr( $post->post_title, 0, 30) . '...'; ?></a> 69 </h5> 70 </dd> 71 </dl> 72 </div><!-- /.entry --> 73 74 <?php else: ?> 75 <p>関連商品はありませんでした←これは本当はいらない</p> 76 <?php endif;wp_reset_postdata();?> 77 <?php endif;?>

投稿2021/03/23 06:28

編集2021/03/23 07:57
gogoweb_ikeda

総合スコア1426

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

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

j123

2021/03/23 07:51

gogoweb_ikedaさん ご回答ありがとうございます! 上と下の間にということですよね? ですので間に <?php else: endif; ?> や <?php endif; ?> <?php else: ?> など、色々組み合わせを入れてみたりしたのですがエラー解消せず。。 という状態です。。 申し訳ないのですが、 もう少しアドバイスいただければありがたいです。。 よろしくお願いいたします。
j123

2021/03/23 08:31

gogoweb_ikedaさん 追記ありがとうございます。 記述いただいたものをそのままコピペ、 また数パターン他にも試してみましたが、 現状、まだエラーのままです。 エラーは 『 このサイトで重大なエラーが発生しました。』 と表示されるだけでして。。 もう少し試してみますが、 現状で改善点がもしお分かりでしたら、 またご返答いただければ幸いです。。 よろしくお願いいたします。
gogoweb_ikeda

2021/03/23 08:34

wp-config.phpの中にある define('WP_DEBUG', false);をdefine('WP_DEBUG', true);に変更してください。 エラー内容がでるようになります。
j123

2021/03/23 08:57

gogoweb_ikedaさん ありがとうございます。 何度も恐縮です。。 wp-config.phpは変更してみたのですが、 最初にプラグイン関係のエラーがでた時、 エラープラグインを無効化したのですが、 その後のエラーは、 『このサイトで重大なエラーが発生しました。 WordPress のトラブルシューティングについてはこちらをご覧ください。』 とでるだけでして。。 もう少しチェックしてみます。 とりいそぎ報告まで
j123

2021/03/23 09:11

gogoweb_ikedaさん ありがとうございます! 解決できました! wp-config.phpの define('WP_DEBUG', true); をしてるのに詳細がでないのは少々意味不明なのですが、、、 とりあえず質問の表示がでないエラーは解決しました! gogoweb_ikedaさんが追記いただいた最後の </div><!-- /.entry --> <?php else: ?> <p>関連商品はありませんでした←これは本当はいらない</p> <?php endif;wp_reset_postdata();?> <?php endif;?> を </div><!-- /.entry --> <?php endwhile; ?> <?php else: ?> <p>関連商品はありませんでした</p> <?php endif; wp_reset_postdata();?> <?php endif;?> に変更したところ、無事表示されました! よくよくみるとwhileが終わってなかったようで、 その数があっていなかったようです。 おかげさまでこの記述の内容がわかりましたので 感謝です。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問