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

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

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

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

PHP

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

Q&A

解決済

2回答

539閲覧

【 WordPress】年別アンカーリンク、年別見出しと個別記事の一覧表示の両立(ループ処理の複数表示)

_yamamo

総合スコア10

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/02/09 05:03

編集2019/02/09 06:39

WordPressの年別アンカーリンクと年毎の記事一覧表示の両立

WordPressにて下記のようなページを作りたいと思っているのですが、
アンカーリンクのループを追加すると個別記事のループが表示されず
個別記事のループを追加するとアンカーリンクのループが表示されなくなってしまい
ページがループ箇所以降読み込まれず、白くなってしまいます。

実装したい内容

--- 以下年別アンカーリンク --- ・2018年の記事見出し(見出しへのアンカーリンク)  2018年の記事1(記事へのアンカーリンク)  2018年の記事2(記事へのアンカーリンク) ・2017年の記事見出し(見出しへのアンカーリンク)  2017年の記事1(記事へのアンカーリンク)  2017年の記事2(記事へのアンカーリンク) --- 以下年別見出しと個別記事の一覧表示 --- ・2018年の記事見出し  2018年の記事内容1  2018年の記事内容2 ・2017年の記事見出し  2017年の記事内容1  2017年の記事内容2

各ループの処理

個別に読み込めば正しく表示されることは確認済みですが
二つを同一ページに読み込むと、後から読み込んだ方が表示されません。

アンカーリンク

<?php function archiveFunc($year01){ $newslist01 = new WP_Query( array( 'ignore_sticky_posts' => true, 'category_name' => 'dietician', 'posts_per_page' => -1, 'year' => $year01 )); if($newslist01->have_posts()) : ?> <section class="h3_box"> <ul class="anc" style="margin-bottom: 10px;"> <li><a href="dietician_detail.html#year01-<?php echo $year01; ?>"><?php echo $year01; ?>年の記事見出し</a></li> </ul> <ul class="bullet li-half"> <?php while($newslist01->have_posts()) : $newslist01->the_post(); ?> <li>&nbsp;&nbsp;<a href="dietician_detail.html#post-<?php the_ID(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> </ul> </section> <?php endif; wp_reset_postdata(); } $thisyear01 = date('Y'); for ($year01=$thisyear01; $year01 >= 2017; $year01--) { archiveFunc($year01); } ?>

年別見出しと個別記事の一覧表示

<?php function archiveFunc($year02){ $newslist02 = new WP_Query( array( 'ignore_sticky_posts' => true, 'category_name' => 'dietician', 'posts_per_page' => -1, 'year' => $year02 )); if($newslist02->have_posts()) : ?> <section class="h3_box"> <h2 id="year-<?php echo $year02; ?>"><?php echo $year02; ?>年の記事見出し</h2> <?php while($newslist02->have_posts()) : $newslist02->the_post(); ?> <h3 id="post-<?php the_ID(); ?>"><?php the_title(); ?></h3> <div class="image_border"><?php the_content(); ?></div> <?php endwhile; ?> </section> <?php endif; wp_reset_postdata(); } $thisyear02 = date('Y'); for ($year02=$thisyear02; $year02 >= 2017; $year02--) { archiveFunc($year02); } ?>

試してみた方法

<!-- アンカーリンク --> <?php function archiveFunc($year){ $newslist = new WP_Query( array( 'ignore_sticky_posts' => true, 'category_name' => 'dietician', 'posts_per_page' => -1, 'year' => $year )); if($newslist->have_posts()) : ?> <section class="h3_box"> <ul class="anc" style="margin-bottom: 10px;"> <li><a href="dietician_detail.html#year-<?php echo $year; ?>"><?php echo $year; ?>年の記事見出し</a></li> </ul> <ul class="bullet li-half"> <?php while($newslist->have_posts()) : $newslist->the_post(); ?> <li>&nbsp;&nbsp;<a href="dietician_detail.html#post-<?php the_ID(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> </ul> </section> <!-- 記事一覧 --> <section class="h3_box"> <h2 id="year-<?php echo $year; ?>"><?php echo $year; ?>年の記事見出し</h2> <?php while($newslist->have_posts()) : $newslist->the_post(); ?> <h3 id="post-<?php the_ID(); ?>"><?php the_title(); ?></h3> <div class="image_border"><?php the_content(); ?></div> <?php endwhile; ?> </section> <?php endif; wp_reset_postdata(); } $thisyear = date('Y'); for ($year=$thisyear; $year >= 2017; $year--) { archiveFunc($year); } ?>

上記の通り修正したところ2つの処理は正常にされているのですが

・2018年の記事見出し(見出しへのアンカーリンク)  2018年の記事1(記事へのアンカーリンク)  2018年の記事2(記事へのアンカーリンク) ・2018年の記事見出し  2018年の記事内容1  2018年の記事内容2 ・2017年の記事見出し(見出しへのアンカーリンク)  2017年の記事1(記事へのアンカーリンク)  2017年の記事2(記事へのアンカーリンク) ・2017年の記事見出し  2017年の記事内容1  2017年の記事内容2

となってしまい、想定通りの表示になりませんでした。

また、最初はそれぞれquery_postsを使用したメインループで書いていたのですが
調べたところ非推奨だったようなので、WP_Queryを使用したサブループに書き換えました。

その他、気を付ける点や書き換えるべき点はありますでしょうか。
WordPressはまだまだ勉強中のため、ご教示いただけますと幸いです。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

function archiveFuncが2つ含まれているのが原因かと思い
2つ目のループを下記の通り書き換えたところ2つとも表示されました。

<section class="h3_box"> <?php $args = array( 'category_name' => 'dietician', 'posts_per_page' => -1, 'order' => 'DESC' ); $the_query = new WP_Query($args); if($the_query->have_posts()): $post_year = false; while ($the_query->have_posts()): $the_query->the_post(); if ( $post_year != get_post_time('Y') ) { echo '<h2 id="year-'.get_post_time('Y').'">'.get_post_time('Y').'年の記事見出し</h2>'; } echo '<h3 id="post-'.get_the_ID().'">'.get_the_title().'</h3>'; echo '<section class="image_border">'.get_the_content().'</section>'; $post_year = get_post_time('Y'); endwhile; wp_reset_postdata(); endif; ?> </section>

投稿2019/02/09 08:04

_yamamo

総合スコア10

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

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

0

自己解決

function archiveFuncが2つ含まれているのが原因かと思い
2つ目のループを下記の通り書き換えたところ2つとも表示されました。

<section class="h3_box"> <?php $args = array( 'category_name' => 'dietician', 'posts_per_page' => -1, 'order' => 'DESC' ); $the_query = new WP_Query($args); if($the_query->have_posts()): $post_year = false; while ($the_query->have_posts()): $the_query->the_post(); if ( $post_year != get_post_time('Y') ) { echo '<h2 id="year-'.get_post_time('Y').'">'.get_post_time('Y').'年の記事見出し</h2>'; } echo '<h3 id="post-'.get_the_ID().'">'.get_the_title().'</h3>'; echo '<section class="image_border">'.get_the_content().'</section>'; $post_year = get_post_time('Y'); endwhile; wp_reset_postdata(); endif; ?> </section>

投稿2019/02/09 07:59

_yamamo

総合スコア10

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

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

_yamamo

2019/02/09 08:06

書き込みの際サーバーエラーが起こったため多重送信となってしまいました。 お目汚し失礼しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問