web関連

wordpressで固定ページに記事一覧を表示する方法

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ページ目がずっと表示されるってことだと思う。

archive.phpを使って複数の投稿・カスタム投稿を混ぜた記事一覧を作ろうとも考えたがメインループとサブループというものがあるみたいで、WP_Queryだとサブループになるらしくうまくページャーが機能しなかった…固定ページだとメインループがそもそもないのかうまくいった。 Wordpressの仕様よくわからないから時間あったら調べたいな…