ページネーション

2020.04.06 2020.04.06

TOPICS

翻訳元記事はこちらです。

ページネーションにより、ユーザーは複数のコンテンツのページを前後に行き来することができます。

WordPressでは、以下の場合にページネーションを利用できます。

<!--nextpage-->

ページネーションを使用して投稿一覧を分割する

WordPressサイトでページ分割の最も一般的な使い方は、長い記事の一覧を別々のページに分割することです。
ブログやサイトのカテゴリ、アーカイブ、デフォルトのインデックスページを表示している場合でも、WordPressのデフォルトでは1ページあたり10件の投稿しか表示されません。
ユーザーは、「表示設定」で各ページに表示される投稿数を変更することができます。管理画面 > 設定 >表示設定。

ループとページネーション

この簡略化された例では、メインループのどこにページネーション関数を追加するかを示しています。ループの直前または直後に関数を追加してください。

<?php if ( have_posts() ) : ?>
 
    <!-- Add the pagination functions here. -->
 
    <!-- Start of the main loop. -->
    <?php while ( have_posts() ) : the_post(); ?>
 
    <!-- the rest of your theme's main loop -->
 
    <?php endwhile; ?>
    <!-- End of the main loop -->
 
    <!-- Add the pagination functions here. -->
 
 
<div class="nav-previous alignleft"><?php next_posts_link( 'Older posts' ); ?></div>
 
 
 
<div class="nav-next alignright"><?php previous_posts_link( 'Newer posts' ); ?></div>
 
 
<?php else : ?>
 
<?php _e('Sorry, no posts matched your criteria.'); ?>
 
<?php endif; ?>

ページネーションを表示するメソッド

これらのページ分割関数のいずれかを、ページ分割されているループでテンプレートファイルの外で使用する場合は、グローバル変数 $wp_query を呼び出す必要があります。

function your_themes_pagination(){
    global $wp_query; 
    echo paginate_links();
}

WordPressには、ループ内に他のページへのリンクを表示する機能が多数あります。これらの機能の中には、特定のコンテキストでのみ使用されるものもあります。
個別投稿ページで使うのと、アーカイブページで使うのとでは、異なる機能を使うことになります。
次のセクションでは、アーカイブテンプレートのページ分割機能について説明します。それ以降のセクションでは、個別投稿のページネーションについて説明します。

シンプルなページネーション

posts_nav_link

最もシンプルな方法の一つがposts_nav_link()です。この関数はループの後にテンプレートに配置します。これにより、次のページへのリンクと前のページへのリンクが生成されます。この関数はシンプルなページ分割が必要なテーマに最適です。

next_posts_link と prev_posts_link

前後の投稿ページのリンクが表示される場所を制御できるテーマを作成する際には、next_posts_link() と prev_posts_link() を使用します。

ページネーションリンクを PHP 変数に渡す必要がある場合は、 get_next_posts_link() および get_previous_posts_link() を使用します。

$next_posts = get_next_posts_link(); 
$prev_posts = get_previous_posts_link();

番号つきのページネーション

コンテンツのページ数が多い場合は、次の記事や前の記事を何度もクリックするのではなく、ユーザーがどのページのリンクをクリックしても良いようにページ番号の一覧を表示した方が、より良い体験ができるでしょう。
WordPressには、ページ番号一覧を自動的に表示するための機能がいくつか用意されています。

WordPress4.1以上

より強固なページネーションオプションが必要な場合は、WordPress 4.1以降ではthe_posts_pagination()を使用することができます。これは、投稿の前のページと次のページへのリンクを含むページ番号のセットを出力します。

4.1以前のWordPressの場合

古いバージョンのWordPressに対応させたい場合は、paginate_links()を使用する必要があります。

echo paginate_links();

個別投稿間のページネーション

インデックスページやアーカイブページでは、これまでの関数をすべて使用する必要があります。個別記事を表示している場合は、 prev_post_linknext_post_link を使用する必要があります。single.phpのループの下に以下の関数を配置します。

previous_post_link();
next_post_link(); 

投稿のページネーション

WordPressでは、その記事内でのページネーションを可能にするために、記事のコンテンツに配置できるタグを用意しています。

<!--nextpage-->

コンテンツ内でこのタグを使用する場合は、ループ内のsingle.phpテンプレート内にwp_link_pages関数が配置されていることを確認する必要があります。

<?php if ( have_posts() ) : ?>
   
    <!-- Start of the main loop. -->
    <?php while ( have_posts() ) : the_post(); ?>
      
        <?php the_content(); ?>
          
        <?php wp_link_pages(); ?> 
       
    <?php endwhile; ?>
  
<?php endif; ?>