ページネーションが簡単に出来るようになってた
| WordPressWordPressのページネーション?ページャー?ってプラグインのするのが僕はずっと定番でした。
よく使ってるのがWP-PageNaviですね。ド定番です。
これめっちゃ簡単なので、これで決まりだということで、これに出会ってからその辺り何も調べなかったのですが、ふと出会ってしまったのでご紹介。
プラグインを使わないで「ページネーション」を実装
プラグインを使わないで、WordPressのコードを使うことのメリットは
- WordPressのバージョン、プラグインのバージョンに依存せずに使える
- プラグインを使うことで、動作が重くなるという可能性がでる
こういうのは、よく言われてることですが、結構大事ですよね。
よく言われるということは真実味があるということです。
ってことで、ここはプラグインを使わない方法をご紹介です。
チョー簡単です。
<?php
$the_query = new WP_Query();
if($the_query->have_posts()): while($the_query->have_posts()): $the_query->the_post();
// 中略
endwhile;
endif;
$big = 999999999; // need an unlikely integer
$args = array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $the_query->max_num_pages
)
echo paginate_links($args);
wp_reset_postdata();
?>
はい、単純にはこんな感じです。
$argsでオプションを設定してカスタマイズできちゃいます。
オプション | 初期値 | 説明 |
---|---|---|
base | %_% | リンクを生成するために使われるベースのURL |
format | ?paged=%#% | ページネーションの形を指定 |
total | 1 | 全体のページ数 |
current | 0 | 現在のページ番号 |
show_all | false | trueの場合、全部のページ番号を表示 |
end_size | 1 | ページ番号のリストの両端(最初と最後)にいくつの数字を表示するか。 |
mid_size | 2 | 現在のページの両側にいくつの数字を表示するか(現在のページは含まない) |
prev_next | true | リストの中に「前へ」「次へ」のリンクを含むかどうか |
prev_text | __(‘ Previous’) | 前のページへのリンクとして表示する文言(’prev_next’ 引数が true 場合に有効) |
next_text | __(‘Next ‘) | 次ページへのリンクとして表示する文言。(’prev_next’ 引数が true 場合に有効) |
type | ‘plain’ | 戻り値の形式指定 “plain” 改行文字区切りのリンク文字列 “array” リンクの配列 “list” ul タグリスト |
add_args | false | 追加のクエリ引数の配列 |
add_fragment | なし | それぞれのリンクに付け加える文字列 |
before_page_number | なし | ページ番号の直前に付け加える文字列 |
after_page_number | なし | ページ番号の直後に付け加える文字列 |
これがデフォルトの値なので、変更したい場合は、こちらで設定です。
<?php $args = array(
'base' => '%_%',
'format' => '?page=%#%',
'total' => 1,
'current' => 0,
'show_all' => False,
'end_size' => 1,
'mid_size' => 2,
'prev_next' => True,
'prev_text' => __('« Previous'),
'next_text' => __('Next »'),
'type' => 'plain',
'add_args' => False,
'add_fragment' => '',
'before_page_number' => '',
'after_page_number' => ''
); ?>
こんな簡単なもんで、いけるんですね。
今後、こっち使っていこうかと思います。