LoginSignup
brian67
@brian67

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

投稿ページに投稿一覧をつくることは可能なのかどうか

Q&AClosed

問題背景

とある事情で、別の方が作っていたHPを自分が作らなくてはならなくなりました。
現在、製品一覧ページを作っています。一覧ページはできたものの、どの投稿をクリックしても同じ内容が表示されてしまいます。おそらくサブクエリの書き方が違うのではないかと思い調べていたところ、一覧ページは"固定ページにする"という記述を発見しました。確認してみるとその一覧ページはカスタム投稿としてつくられていました。これによって、クリックしても同じ内容が表示されるという現象が起こっているのではないかと仮定しました。

このHPを触りだしてからWordPressに触れ始めたので、表現方法、用語の使い方、前提知識に多々間違いがあると思いますが、何卒宜しくお願い致します。

解決したいこと・疑問

①そもそも、カスタム投稿ページに投稿一覧を作り、固定ページに投稿一覧を作った時と同様の動作をさせることは可能なのか

②可能な場合、投稿一覧があるページとその投稿のページのサブクエリの記述はどのように異なるのか

③できない場合、投稿一覧のあるページを固定ページにし、サブクエリを適切なものに変えるということでよいのか

一覧の投稿をクリックして、それぞれのページに飛べるようにしたいです。

発生している問題・エラー

一覧ページ(投稿ページ)サブクエリ
<?php
				$args =array(
				'post_type' =>'products',
				'posts_per_page' => 5,
				'order' => 'ASC',
				'paged' => $paged
				);
				$the_query = new WP_Query($args);
?>

投稿サブクエリ
<?php
			$args =array(
			'post_type' =>'products',
			'posts_per_page' => 1,
			'paged' => $page
			);
			$the_query = new WP_Query($args);
?>

0

2Answer

クラシックテーマを前提に回答させていただきます。
※もし質問者様のテーマがブロックテーマだと以下は通用しないかもです。ご了承ください。

WordPressにはテンプレート階層というものがあり、端的に言うと WordPress は URL に準拠するテンプレート階層に則った HTML データを生成(webページ)して返します 。

テンプレート階層の一覧画像はこちら

今回でいうと、

  • archive-products.phpがカスタム投稿タイプproducts一覧ページ
  • 個別ページはsingle-products.php(またはsingular.php
    になります。

つまり、single-products.php(またはsingular.php)を用意すれば自ずと個別ページが表示されるはずです。

先ほどの「テンプレート階層の一覧画像はこちら」の右から4列目にarchive-$posttype.php, single-$posttype.phpというものがあることが確認できると思いますが、それが上記で説明したarchive-products.php, single-products.php になります。

ご参考になりますと幸いです。

1Like

ご丁寧にご返信ありがとうございます。
テンプレート階層確認いたしました。実際のファイルを確認してみると、一覧ページはarchive-products.php, 投稿ページはsingle-products.phpとなっておりました。となると、別の問題なのでしょうか。

私の推測ですが、投稿ページで読みこまれているものが、1番目のものになるので、ループの記述のhave_posts()とthe_post()で先頭のものが読み込まれているのではないかと思いました。
さきほど、確認してみると、投稿ページ内にもループ処理が記述されておりました。その記述を削除してみると、それぞれの投稿ページが表示されるようになりました!

そもそも必要のないループ処理が記述されていたことで起こっていた問題だったようです。問題解決のきっかけとなって下さりありがとうございます。Qiitaで質問してよかったです。繰り返しになりますが、ありがとうございました。

0Like

Comments

  1. そもそも必要のないループ処理が記述されていたことで起こっていた問題だったようです

    なるほど、ループ処理の記述ですか。そこを盲点に話を進めてしまって失礼いたしました。しかし無事に解決されたようで何よりです。

    ループ処理でいうとWordPressには メインクエリ(ループ)サブクエリ(ループ) という仕組みがあります。大抵の場合カスタム投稿タイプはサブループを使うことが多いと思います。
    以下の記事が手軽に読めて分かりやすかったので良ければご参照ください。

    PS:問題解決した場合は他の回答者が誤って回答してしまわないようにクローズしていただけますと幸いです。

  2. @brian67

    Questioner

    ご丁寧にありがとうございました。

Your answer might help someone💌