takopitto
@takopitto

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

固定ページのページネーションがうまく表示されません

解決したいこと

固定ページに表示させる合計50件以上の投稿一覧を、ページネーションにより5つのページにわけ、1ページあたり10件ずつ表示させたいと思っています。

そこで下記のように、posts_per_pageに"10"と記載したのですが、1ページに50件すべての投稿が表示されてしまいます。

ちなみにコードは下記を参考に記述しております。

参考URL
https://digitor.jp/textbook/wordpress-pagination-selfmade-plugin/#i-4

該当するソースコード

 <!-- ページネーション -->
            <div class="pagination">
                <div class="list-box">
                    <ul>
                        <?php
                        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
                        $the_query = new WP_Query(array(
                            'post_status' => 'publish',
                            'post_type' => 'post', // ページの種類(例、page、post、カスタム投稿タイプ名)
                            'paged' => $paged,
                            'posts_per_page' => 10, // 表示件数
                            'orderby'     => 'date',
                            'order' => 'DESC'
                        ));


                        if ($the_query->have_posts()) :
                            while ($the_query->have_posts()) : $the_query->the_post();
                        ?>
                                <?php
                                /* ここにループさせるコンテンツを入れます */
                                ?>
                        <?php
                            endwhile;
                        else :
                            echo '<div><p>ありません。</p></div>';
                        endif;
                        ?>
                    </ul>
                </div>

                <div class="pnavi">
                    <?php //ページリスト表示処理
                    global $wp_rewrite;
                    $paginate_base = get_pagenum_link(1);
                    if (strpos($paginate_base, '?') || !$wp_rewrite->using_permalinks()) {
                        $paginate_format = '';
                        $paginate_base = add_query_arg('paged', '%#%');
                    } else {
                        $paginate_format = (substr($paginate_base, -1, 1) == '/' ? '' : '/') .
                            user_trailingslashit('page/%#%/', 'paged');
                        $paginate_base .= '%_%';
                    }
                    echo paginate_links(array(
                        'base' => $paginate_base,
                        'format' => $paginate_format,
                        'total' => $the_query->max_num_pages,
                        'mid_size' => 2,
                        'current' => ($paged ? $paged : 1),
                        'prev_text' => '< 前へ',
                        'next_text' => '次へ >',
                    ));
                    ?>
                </div>
            </div>

考えてみたこと

ページネーションとは別の話にはなるのですが、投稿記事一覧を下記のコードで取得しております。

その際、こちらのposts_per_pageを50として、50件すべてが表示されるようにしているのですが、それと相性が悪いということは考えられますでしょうか…?

(当たり前の話で恐縮ですが、ここの数字を10件に変えてみたところ、2ページ以降すべて同じ10件の記事のみしか表示されません…。)

参考サイト
https://note.com/koushikagawa/n/nad899f38cf3c

<?php
  global $post;
  $args = array( 'posts_per_page' => 50 );
  $myposts = get_posts( $args );
  foreach( $myposts as $post ) {
   setup_postdata($post);
?>

<div class="item">
   <div class="img">
       <?php the_post_thumbnail('index_thumbnail'); ?>
   </div>
   <div class="title">
       <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
   </div>
   <div class="time">
       <?php the_time('Y.m.d') ?>    
   </div>
   <div class="category">
       <?php the_category(',') ?>
   </div>
</div>
<?php
}
wp_reset_postdata();
?>
  

自分で試したこと

WP管理画面>設定>表示設定で、「1ページに表示する最大投稿数」を変えてみる。

→この数字を10にしたり、いろんな数字で試してみたのですが何も変化はありませんでした。

***
分かりづらく稚拙な質問で申し訳ございませんが、ご教示いただけますと大変ありがたいです。
どうぞよろしくお願いいたします。

0

2Answer

原因を特定するには情報が足りないのですが、
該当ソースコード17行目あたりのif ($the_query->have_posts()) : の直前に
$the_query->post_count = 10; を挿入すれば期待する動作になると思います。

ちなみにご存じかもしれませんが、全件表示の場合は
'posts_per_page' => 50のような具体的な値ではなく、
'posts_per_page' => -1のように-1を指定して対応する方がベターです。

1Like

@mwm2

お忙しいなかご回答いただきまして、誠にありがとうございます。

大変ご丁寧にお答えいただき本当に感謝しております。

>>>全件表示の場合は
'posts_per_page' => 50のような具体的な値ではなく、
'posts_per_page' => -1のように-1を指定して対応する方がベターです。

→こちら大変勉強になりました!ご教示いただきありがとうございます。

>>>該当ソースコード17行目あたりのif ($the_query->have_posts()) : の直前に
$the_query->post_count = 10; を挿入すれば期待する動作になると思います。

→こちらを試してみたのですが、相変わらず50件すべて表示されています…(´;ω;`)
(私の質問の情報不足も原因かと思いますが💦)

もう少し原因を調べてみようかと思います!

0Like

Your answer might help someone💌