web関連
wordpressで固定ページに記事一覧を表示する方法
wordpressで「投稿・カスタム投稿2つ」合わせた記事一覧を用意する必要性があり、固定ページに記事一覧を表示したときの備忘録
実際に使ったコード
投稿、カスタム投稿01、カスタム投稿02を合わせた記事一覧を作成したかったのでpost_type
に配列が入っていますが、投稿だけだったら'post_type' => 'post',
という風にしてください。
<div class="contens">
<?php
$paged = (int) get_query_var('paged');
$args = array(
'posts_per_page' => 10,
'paged' => $paged,
'post_type' => array('post','カスタム投稿01','カスタム投稿02'),
'post_status' => 'publish'
);
$the_query = new WP_Query($args);
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
?>
// ループさせて表示するものが入ります。
<?php endwhile; ?>
<?php else: ?>
// ループさせるものが無い時の表示。
<?php endif; ?>
</div>
<div class="pagination">
<?php
if ($the_query->max_num_pages > 1) {
echo paginate_links(array(
'base' => get_pagenum_link(1) . '%_%',
'format' => 'page/%#%/',
'current' => max(1, $paged),
'total' => $the_query->max_num_pages,
'prev_text' => false,
'next_text' => false
));
}
?>
</div>
<?php wp_reset_postdata(); ?>
注意
'paged' => $paged,
はないとページャーで2ページ目に遷移しても1ページ目の情報が表示されてしまいます。
$pagedとは?
一覧ページ内の現在のページが何ページ目かを取得できるようです。
実際、var_dump($paged);
で中身を見てみると「int(0)」みたいに表示されますが、1ページ目ですよーということらしい。
2ページ目は「int(1)」
つまり'paged' => $paged,
がないと現在のページ情報が取得できないから1ページ目がずっと表示されるってことだと思う。
WP_Query
だとサブループになるらしくうまくページャーが機能しなかった…固定ページだとメインループがそもそもないのかうまくいった。 Wordpressの仕様よくわからないから時間あったら調べたいな…