以前は固定ページを作って複数カテゴリーの中から新着をリストにしていたのですが、その方法でも今回はページネーションがうまくいかなかったので、他にもいろいろな原因があるのだと思われます。表示設定やphpの名前を変更や、固定ページのテンプレートにしてもうまくいかなかったので。
なので、このページを「news」カテゴリーの新着情報として扱うことにしました。
複数のカテゴリーが入るリストですが、他のカテゴリーであっても、投稿記事のカテゴリー選択で、
「他のカテゴリー」+「news」を必ず選択させるということで、newsの一覧リストとして表示させました。
投稿記事を入力する時にカテゴリーを複数選択するので、スマートではなくなりますが、ページネーションはできるようになりました。
複数のカテゴリーを選択するとURLの優先がありますが、Yoast SEOプラグインを入れて、投稿画面でカテゴリーのメインを選択し、記事のアドレスをカテゴリーのメインになるようにしました。
念のため設定したコードを記載します(前のコードではうまくページ送りできなかったので)
<div class="news-list">
<dl>
<?php
$paged = (int) get_query_var('paged');
$post_loop = new WP_Query( array(
'post_type' => 'post',
'category_name' => 'news,estate', //カテゴリースラッグ
'posts_per_page' => 5,
'paged' => $paged,
) );if ($post_loop->have_posts()): ?>
<?php while ( $post_loop->have_posts() ) : $post_loop->the_post();?>
<?php get_template_part('module_loop_post'); ?>
<dt><?php the_date('Y/m/d'); ?></dt>
<dd>
<a href="<?php the_permalink(); ?>"><h2><?php the_title(); ?></h2></a>
<?php
add_filter( 'excerpt_length', function ( $length ) {
return 50;
}, 999 );
the_excerpt();
?>
</dd>
<?php endwhile; endif; ?>
</dl>
</div><!-- /news-list -->
<!-- pegenation -->
<div class="pagination pagination-index">
<?php
$big = 9999999999;
$arg = array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'current' => max( 1, get_query_var('paged') ),
'total' => $post_loop->max_num_pages,
'type' => 'list'
);
echo paginate_links( $arg );
?>
</div>
-
この返信は2年、 9ヶ月前にchatmが編集しました。
chatmさん、こんにちは。
最初のコードでは単純に paged パラメータが足りなかっただけではないでしょうか。
リファレンスにも
posts_per_page (整数) – 1ページに含める投稿数(バージョン 2.1 以降で使えます。非推奨になった showposts パラメータを置き換えます)。’posts_per_page’=>-1 を使用するとすべての投稿を含めます(このとき ‘offset’ パラメータは無視されます)。ページ送りを使用するにはこのパラメータと一緒に ‘paged’ パラメータを指定してください。
とあります。
ご参考になれば。
ありがとうございます!
確かに、
'paged' => $paged,
を入れたらページ送りできました。
どちらのコードでも良いのでしょうかね。
念のため最初のコードの修正版を下記に記載します
<div class="news-list">
<dl>
<?php
$wp_query = new WP_Query();
$my_posts = array(
'post_type' => 'post',
'category_name' => 'news,estate', //スラッグ
'posts_per_page'=> '5',
'paged' => $paged,
);
$wp_query->query( $my_posts );
if( $wp_query->have_posts() ): while( $wp_query->have_posts() ) : $wp_query->the_post();
?>
<dt><?php the_date('Y/m/d'); ?></dt>
<dd>
<a href="<?php the_permalink(); ?>"><h2><?php the_title(); ?></h2></a>
<?php
add_filter( 'excerpt_length', function ( $length ) {
return 50;
}, 999 );
the_excerpt();
?>
</dd>
<?php endwhile; endif;//ループ終わり ?>
</dl>
</div><!-- /news-list -->
<!-- pegenation -->
<div class="pagination pagination-index">
<?php
$big = 9999999999;
$arg = array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages,
'type' => 'list'
);
echo paginate_links( $arg );
?>
</div>