WordPressのインデックスやアーカイブでページ移動するときのリンクをBootstrapのpagerで表示させるための関数です。ついでにPaginationにも対応できるようにしました。どっちがついでなのかと小一時間(ry
Usage
<?php tkb_posts_nav_link( $items, $before, $after, $nextpagelink, $previouspagelink, $bothend ); ?>
Parameters
- $items (integer)
- 現在のページを中心に数字を前後にいくつ表示するか指定します。
‘0’ を指定すると現在のページも含めて数字は表示しません。デフォルトは 0 です。 - $before / $after (string)
- 全体を囲む文字列です。デフォルトは<ul>と</ul>です。
中身は<li>を使って表示するので、必ず<ul>を含ませてください。 - $nextpagelink / $previouspagelink (string)
- 次ページ/前ページへのリンクの文字列を指定することができます。デフォルトはNewerとOlderです。
- $bothend ( 0 / 1 / 2 )
- 数字表示の際に、両端(1ページと最終ページ)を常に表示させることができます。
0 … 両端ページは表示されません。デフォルト値
1 … 両端のページを常に表示させます。
2 … 両端のページを常に表示させ、間にページがある場合「…」マスを表示させます。
Examples
パラメータ無しでも動きますがNewerとOlderがリスト表示される(縦に並ぶ)だけです。
BootstrapのPager用に記述をするには下記のように書きます。
<?php tkb_posts_nav_link('0', '<ul class="pager">', '</ul>'); ?>
<ul class="pager"> <li class="next disabled"><span>Newer</span></li> <li class="previous"><a href="#">Older</a></li> </ul>
BootstrapのPagination用であれば下記のように書きます。
<?php tkb_posts_nav_link(
'2', '<div class="pagination"><ul>', '</ul></div>', '«', '»', '2'); ?>
<div><ul> <li><a href="#">«</a></li> <li><a href="#">1</a></li> <li><span>2</span></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li><span>…</span></li></li> <li><a href="#">14</a></li> <li><a href="#">»</a></li> </ul></div>
Description
ソースをfunctions.phpに貼り付けてご利用ください。
今回は各リンクを<li>で固定している完全に手抜き関数です。もうBootstrap専用として(笑
$itemsを指定すると、その数字の * 2(前後)+ 1(現在のページ)だけ表示します。
TopやEndに近い場合、現在のページは端に寄っていき、上記の表示数は確保されます。
さらに$bothend=’2’を設定するとけっこう長くなりますのでご注意ください。
Bootstarp用の.previous/.nextと.activeと.disabledを<li>に付与します。。
Next/Prevを表示させないオプションは未実装です。
Source
function tkb_posts_nav_link(
$items = '0',
$before = '<ul>',
$after = '</ul>',
$nextpagelink = 'Newer',
$previouspagelink = 'Older',
$bothend = '0'
) {
global $wp_query;
global $paged; if(empty($paged)) $paged = 1;
$pages = $wp_query->max_num_pages;
$output = '';
if ( $pages > 1 ) {
if ( $paged > $items ) { $s_page = $paged - $items; } else { $s_page = '1'; }
$e_page = $s_page + ( $items * 2 );
if ( $e_page > $pages ) { $e_page = $pages; $s_page = $e_page - ( $items * 2 ); if ( $s_page < 1) { $s_page = '1'; } }
if ($items) {
for ($i = $s_page; $i <= $e_page; $i++) {
if ( $i != $paged ) { $output .= '<li><a href="'.get_pagenum_link($i).'">'.$i.'</a></li>'; }
else { $output .= '<li class="active"><span>'.$i.'</span></li>'; }
}
if ($bothend) {
if ( $bothend == 2 ) {
if ( $s_page > 2 ) { $output = '<li class="disabled"><span>…</span></li>'.$output; }
if ( $e_page < ($pages-1) ) { $output .= '<li class="disabled"><span>…</span></li>'; }
}
if ( $s_page > 1 ) { $output = '<li class="disabled"><a href="'.get_pagenum_link(1).'">1</a></li>'.$output; }
if ( $e_page < $pages ) { $output .= '<li class="disabled"><a href="'.get_pagenum_link($pages).'">'.$pages.'</a></li>'; }
}
}
if ( $paged != 1 ) { $output = '<li class="next"><a href="'.get_pagenum_link($paged - 1).'">'.$nextpagelink.'</a></li>'.$output; }
else { $output = '<li class="next disabled"><span>'.$nextpagelink.'</span></li>'.$output; }
if ( $paged != $pages ) { $output .= '<li class="previous"><a href="'.get_pagenum_link($paged + 1).'">'.$previouspagelink.'</a></li>'; }
else { $output .= '<li class="previous disabled"><span>'.$previouspagelink.'</span></li>'; }
$output = $before.$output.$after."\n";
echo $output;
}
}
Notes
またコメント行を書かなかったorz
もっと汎用的にしたいけどソースが長くなるのが難点ですね。
変更が必要な時は直接コードを書き換えればいいかなって。
それにしても記事に貼り付けるとき、一部のクラスが消えてしまうのはどうにかならないものか…。
Related Links – I’m really grateful for everything.
- Bootstrap | Twitter
- Sleek, intuitive, and powerful front-end framework for faster and easier web development.
- Function Reference / posts nav link | WordPress Codex
- Displays links for next and previous pages.
- テンプレートタグ / posts nav link | WordPress Codex 日本語版
- インデックスやアーカイブページが複数ページにわたる場合、その前後ページへのリンクを出力。