上毛印刷株式会社

【WordPress】メインループでページネーション実装(プラグインなし)

【WordPress】メインループでページネーション実装(プラグインなし)

2023年01月16日
WEBサイト制作
  • #PHP
  • #WordPress
  • #備忘録
  • #tips

こんにちは!
上毛印刷WEB制作担当のソーヤです。

今回は最近ちょっと手こずったWordPressのことについて、自分自身の備忘録として紹介させてもらえればと思います!

ページネーション

その手こずった内容とはですね・・・メインループでページネーションが全然出力されないんです。
ページネーションとはですね、「ページ送り」のことです。
弊社サイトですと、この赤枠のことです。↓

ページネーション

ブログサイトやメディア系のポータルサイトでよくあるやつですよね。
皆さんも一度は見かけたことがあると思います。

私も以前作成したWordPressサイトでも実装経験があります。
ですが、私が実装したものは全てサブループでした。

なので今回は勉強も兼ねて、メインループページネーションを実装してみようと思いたったのです。

そんなの簡単でしょ。

意気揚々と実装を開始するのですが、
うまくいきません・・・

Google先生に聞くか・・・と思い「メインループ ページネーション」でググっても、
なかなかバッチリ合う記事が見当たらないんです。
ほとんどの記事がサブループで実装してました。

どうしようかな・・・と思っていたところ、WordPress Codex 日本語版の記事が参考になりました。
この記事です。(外部リンク)

テンプレート実装例

カスタム投稿タイプで実装したので、
archive-投稿タイプのスラッグ.phpを編集します。

<ul class="blog-list">
  <?php if(have_posts()): ?><!-- if文開始 記事の投稿があれば表示 -->
  <?php paginate_links(); ?><!-- ページネーション関数 -->
  <?php while(have_posts()):the_post(); ?><!-- メインループ開始 -->
  <!-- ここにループさせたいHTMLを入れてください -->
  <?php endwhile; ?><!-- メインループ終了 -->
</ul>
<?php
  $maxlist = 9999;
  $args = array(
    'type'      => 'list',
    'next_text' => '次へ',
    'prev_text' => '戻る',
    'mid_size'  => 3,
    'end_size'  => 3,
    'base'      => str_replace($maxlist, '%#%', esc_url(get_pagenum_link($maxlist))),
    'current'   => max(1, get_query_var('paged'))
  );
  echo '<div class="pagination-list">';
  echo paginate_links($args); //ページネーション関数
  echo '</div>';
?>
<?php endif; ?><!-- if文終了 -->

このコードの肝は、メインループの直前にページネーション関数を一回呼び出す箇所です。
3行目のところですね。

で、メインループが終わった後にもう一回ページネーション関数を呼び出すというようなやり方です。

ダッシュボード設定

テンプレートの方を実装したら、次は忘れずにダッシュボードの表示設定を変更しましょう。
ダッシュボードの表示設定
赤枠の部分です。
ここで、1ページに表示したい投稿数を設定してください。

ちなみにここで設定する場合、全てのアーカイブページの投稿表示が一緒になりますので、
個別に投稿数を制御したい場合はfunctions.phpなどで設定してください。

まとめ

いかがでしょうか。
今後、自分自身の備忘録のために色々WEB制作に役立つ小技や困ったことなどを紹介していきたいと思います。
この記事をご覧になっている方の役に立てれば幸いです。
ガンガンコピペして使ってください!

WEB制作担当ソーヤ

ソーヤ

上毛印刷WEB制作担当
前職は東証プライム企業の本社WEB受託チームにてフロントエンドエンジニアを3年経験。


この記事に対するご意見・ご感想・ご質問等ありましたら、
ぜひ下記フォームにてお送りください。

    お名前必須
    メールアドレス必須
    お問い合わせ内容必須
    PAGE TOP