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

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

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

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

PHP

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

Q&A

解決済

1回答

1161閲覧

WordPressの投稿ページに同じカテゴリーの記事を表示させたい

otakedesu

総合スコア2

WordPress

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

PHP

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

0グッド

0クリップ

投稿2021/05/22 05:48

前提・実現したいこと

プラグインを使わず、表示中の投稿ページと同じカテゴリーの投稿を一覧で表示させたいです。

発生している問題

表示中のカテゴリーとは関係ない投稿が表示されます。

該当のソースコード

PHP

1<ul class="related-post__parts related-post-list"> 2 3 <?php 4 $categories = get_the_category($post->ID); 5 6 $category_ID = array(); 7 foreach ($categories as $category) : 8 array_push($category_ID, $category->cat_ID); 9 endforeach; 10 11 $args = array( 12 'post__not_in' => array($post->ID), 13 'posts_per_page' => 3, 14 'category__in' => $category_ID, 15 'orderby' => 'DESC' 16 ); 17 18 $query = new WP_Query($args); 19 if ($query->have_posts()) : 20 while ($query->have_posts()) : 21 $query->the_post(); 22 ?> 23 24 <li class="related-post-list__item blogRelation-card"> 25 <a href="<?php the_permalink(); ?>" class="blogRelation-card__link"> 26 <div class="blogRelation-card__img-box-wrapper"> 27 <div class="blogRelation-card__img-box"> 28 <?php 29 if (has_post_thumbnail()) : 30 the_post_thumbnail('post-thumbnail', array('class' => 'blogRelation-card__img', 'alt' => the_title_attribute('echo=0'))); 31 else : 32 ?> 33 <img class="blogRelation-card__img" src="<?php echo get_template_directory_uri(); ?>/assets/images/common/no-image.jpg" alt="" /> 34 <?php endif; ?> 35 </div> 36 </div> 37 <div class="blogRelation-card__body"> 38 <h3 class="blogRelation-card__title"> 39 <?php the_title(); ?> 40 </h3> 41 </div> 42 </a> 43 </li> 44 45 <?php endwhile; ?> 46 <?php else : ?> 47 <p>関連記事はありません</p> 48 <?php endif; ?> 49 <?php wp_reset_query(); ?> 50 51</ul>

試したこと

① 表示中の投稿ページのカテゴリーIDの表示はできました。→画面に表示されたカテゴリーIDはしっかり1つ(152)のみ表示されました。

PHP

12<?php 3$cat = get_the_category(); 4$cat = $cat[0]; 5$cat_id = $cat->cat_ID; 6?> 7 8<?php echo $cat_id; ?>

② 表示中の投稿ページのカテゴリーIDを指定して、カテゴリーのタイトルのみの表示もできました。→カテゴリーが同じ記事が1つあるので計2つ表示されました。

PHP

12<?php $posts = get_posts('numberposts=30&category=152'); ?> 3<?php if($posts): foreach($posts as $post): setup_postdata($post); ?> 4 <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> 5<?php endforeach; endif; ?>

③表示中の投稿ページと同カテゴリーの投稿をタイトルのみ表示→これはなぜか29記事分のタイトルが表示されました。

PHP

1<?php 2$cat = get_the_category(); 3$cat = $cat[0]; 4$cat_id = $cat->cat_ID; 5?> 6 7<?php $posts = get_posts('numberposts=30&category=$cat_id'); ?> 8<?php if($posts): foreach($posts as $post): setup_postdata($post); ?> 9 <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> 10<?php endforeach; endif; ?>

補足情報

開発環境はLocalです。
WP Migrationでテスト環境にアップしてみましたが同様の結果でした。

至らない点があるかと思いますが、
ご教授いただけると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下お試しいただくとどうなりますでしょうか?

該当のソースコード

php

1category__in 23category__and

3

php

1$posts = get_posts('numberposts=30&category=$cat_id'); 23$posts = get_posts('numberposts=30&category=' . $cat_id);

こちらの認識が違っていたら教えていただければと思います。

投稿2021/05/22 06:42

編集2021/05/22 06:44
euicnvhf202105

総合スコア126

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

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

otakedesu

2021/05/22 07:07

ご回答ありがとうございます。 ① category__in ↓ category__and 変えてみましたが変化はありませんでした。 ② $posts = get_posts('numberposts=30&category=$cat_id'); ↓ $posts = get_posts('numberposts=30&category=' . $cat_id); こちら記事が7つ表示されました。全て別カテゴリーのものが表示されでります。
euicnvhf202105

2021/05/22 08:57

検証ありがとうございます。 >表示中の投稿ページと同じカテゴリーの投稿を一覧で表示 >表示中のカテゴリーとは関係ない投稿が表示されます。 こちらは表示中の投稿が仮にAカテゴリとBカテゴリに所属していたら 以下のどちらの動きを希望されますでしょうか。 AカテゴリとBカテゴリのどちらかに所属している投稿の一覧 → category__in AカテゴリとBカテゴリ両方に所属している投稿の一覧 → category__and ご提示いただいたソースを簡易的にではありますが こちらの開発環境で検証してみましたが ソース内(該当のソースコード内)に問題はなさそうな気がします。 single.phpを単純にご提示のソースだけにして検証することは可能でしょうか。 パッと思いついた可能性としては 該当のソースコードの wp_reset_query を wp_reset_postdata() に変えてみる。 該当のソースコードのphpファイルに前後があれば wp_reset_query、wp_reset_postdata()等でループをしっかりリセットできているかを確認。 ↑header.phpやfooter.phpも外してみるといいかもしれません。
otakedesu

2021/05/22 09:30

euicnvhf202105 様 ご回答いただき誠にありがとうございます。 euicnvhf202105様のアドバイスどおり実行したところ無事に実装できました。 該当コードの前のループがwp_reset_query、wp_reset_postdata()等でリセットできていなかったことが要員でした。 この度は本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問