WEBサイト作成時に発生するエラーやトラブル対応の備忘録を中心に、いろいろと書いております。


WordPressでサブループのあとのメインループがうまく動いてくれません。

,

WordPressで「表示設定」>「ホームページの表示」で「 固定ページ (以下で選択)」を選び、ホームページ: を固定ページで作った「トップページ」に設定しました。

「ホームページ」はthemeの「front-page.php」で作成したデザインが適応されるようにしています。

「ホームページ(トップページといいたい)」は簡単に言うと、

ヘッダー
メイン画像
ナビ
最新新着5件
自由欄(固定ページで編集)
フッター

こんな感じ。

「最新新着5件」をサブループ
「自由欄」をメインループ
で表示させます。

サブループとメインループについてはいろんなブログがありますので、

こんな感じ。

上の投稿ではサブループを
$the_query = new WP_Query($args);
で回しておられますが、
私は「get_posts()」を使用しています(投稿だけでいいですしね)。

そして、「wp_reset_postdata();」を入れることでメインループに復帰。

というのが基本です。

しかし、私の記載しているコードではどうやってもメインループが戻らない。

簡単に書くと

サブループ

<?php
#リストを取得
$args = array(
	'posts_per_page' => 3
);
$posts = get_posts($args);
if($posts):
?>
<ul>
	<?php foreach($posts as $post) : setup_postdata( $post );
			get_template_part( 'template-parts/list-item');
		endforeach;?>
</ul>
<?php
endif;	
wp_reset_postdata();
?>

メインループ

<?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>
<div>
<?php the_content();?>
</div>
<?php endwhile; endif; ?>

で、メインループで表示されるコンテンツの内容が、サブループで取得した記事の最後の内容になります。

resetもしてるし、なんでだー?

さて、賢明なWordPressユーザーならピンと来られたかもしれません。
私、知らんかったんです!

最初のサブループのget_posts($args);
を受けてる変数「$posts」が駄目だったようです。

これを「$post_array」とかに変えたら、問題なく動きました!

setup_postdata()に入れる変数は「$post」じゃないとダメみたいな記載を見てて、もしかして?と思いまして。
変えてみたらうまくいきました。

グローバル変数(定数?)だから使っちゃだめなんですね。
でも、公式っぽいところでは、$postsはグローバル変数(定数)という記述を見つけることが出来ませんでした。
探し方が下手なのかもですが。

グローバル変数・定数についてまとめてあったページ

“WordPressでサブループのあとのメインループがうまく動いてくれません。” への1件のコメント

  1. […] Global_Variables(Codex.WordPress.org)WordPressでサブループのあとのメインループがうまく動いてくれません。(Ter… copyright:natsukoweb2404 […]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください