ページネーション
TOPICS
翻訳元記事はこちらです。
ページネーションにより、ユーザーは複数のコンテンツのページを前後に行き来することができます。
WordPressでは、以下の場合にページネーションを利用できます。
- 1ページに収まりきらないほど多くの投稿が存在する場合の記事一覧の表示
- 以下のタグを使って手動で長めの投稿を分割したとき
<!--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_link
と next_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; ?>