WordPressで「表示設定」>「ホームページの表示」で「 固定ページ (以下で選択)」を選び、ホームページ: を固定ページで作った「トップページ」に設定しました。
「ホームページ」はthemeの「front-page.php」で作成したデザインが適応されるようにしています。
「ホームページ(トップページといいたい)」は簡単に言うと、
ヘッダー
メイン画像
ナビ
最新新着5件
自由欄(固定ページで編集)
フッター
こんな感じ。
「最新新着5件」をサブループ
「自由欄」をメインループ
で表示させます。
サブループとメインループについてはいろんなブログがありますので、
https://hirashimatakumi.com/blog/18.html
こんな感じ。
上の投稿ではサブループを
$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はグローバル変数(定数)という記述を見つけることが出来ませんでした。
探し方が下手なのかもですが。
グローバル変数・定数についてまとめてあったページ
https://elearn.jp/wpman/variable
https://elearn.jp/wpman/variable#type_post
コメントを残す