ナビゲーションタグの投稿

WP-PageNavi を使わずにナビゲーション表示 (改良版)
先月下旬に、「WP-PageNavi を使わずにナビゲーション表示」というテクニックを公開しましたが、パーマリンクを使っていても検索などクエリー文字列を使う URL の場合 (http://example.com/?s=検索文字列 など)、不具合が起きることが分かりました。
そこで、全面的に変更したものに差し替えます (元記事も新しいコードに入れ換えてあります)。ここまで長くなると、関数化した上でテーマの functions.php に切り出して、index.php 等からはその関数を呼び出す方がいいですね。
<div class="tablenav"><?php global $wp_rewrite;
$paginate_base = get_pagenum_link(1);
if (strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()) {
$paginate_format = '';
$paginate_base = add_query_arg('paged', '%#%');
} else {
$paginate_format = (substr($paginate_base, -1 ,1) == '/' ? '' : '/') .
user_trailingslashit('page/%#%/', 'paged');;
$paginate_base .= '%_%';
}
echo paginate_links( array(
'base' => $paginate_base,
'format' => $paginate_format,
'total' => $wp_query->max_num_pages,
'mid_size' => 5,
'current' => ($paged ? $paged : 1),
)); ?></div>

WP-PageNavi を使わずにナビゲーション表示
複数ページをいっぺんに飛べるナビゲーションを実現するプラグインとして WP-PageNavi は人気があります。しかし、このプラグインは、WordPress のバージョンに応じて使用するバージョンが異なっていて、ちょっと使いにくい面があります。
実は、WordPress の標準機能として、こういうナビゲーションを実現するテンプレートタグが存在します。管理パネルなどで使用されています。そこで、テーマでこのテンプレートタグを使えば、WP-PageNavi を使うことなく同等の機能が実現可能です。([追記: 2008-08-06] 根本的に変更しました)
<div class="tablenav"><?php global $wp_rewrite;
$paginate_base = get_pagenum_link(1);
if (strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()) {
$paginate_format = '';
$paginate_base = add_query_arg('paged', '%#%');
} else {
$paginate_format = (substr($paginate_base, -1 ,1) == '/' ? '' : '/') .
user_trailingslashit('page/%#%/', 'paged');;
$paginate_base .= '%_%';
}
echo paginate_links( array(
'base' => $paginate_base,
'format' => $paginate_format,
'total' => $wp_query->max_num_pages,
'mid_size' => 5,
'current' => ($paged ? $paged : 1),
)); ?></div>
<div class="tablenav"><?php echo paginate_links( array( 'base' => trailingslashit(get_pagenum_link(1)) . '%_%', 'format' => user_trailingslashit('page/%#%/', 'paged'), 'total' => $wp_query->max_num_pages, 'mid_size' => 3, 'current' => ($paged ? $paged : 1), )); ?></div>
base, format の部分は、パーマリンク設定によって変更が必要です。標準のパーマリンクの場合は以下のようにしてください。←新しいコードは両方対応です。
'base' => add_query_arg( 'paged', '%#%' ), 'format' => '',
これだけだと見た目がいまいちなので、style.css に以下の記述を入れてください。なお、当サイトでは違う色にしています。
.tablenav {
color: #2583ad;
background:white;
margin: 1em auto;
line-height:2em;
text-align:center;
}
a.page-numbers, .tablenav .current {
color: #00019b;
padding: 2px .4em;
border:solid 1px #ccc;
text-decoration:none;
font-size:smaller;
}
a.page-numbers:hover {
color:white;
background: #328ab2;
}
.tablenav .current {
color: white;
background: #328ab2;
border-color: #328ab2;
font-weight:bold:
}
.tablenav .next, .tablenav .prev {
border:0 none;
background:transparent;
text-decoration:underline;
font-size:smaller;
font-weight:bold;
}
これで、ほぼ WP-PageNavi と同等の表示になりました。というか、WordPress のデフォルトテーマがこうなっていてもいいと思うんですが……。

[追記] WP-PageNavi は、旅行記で以前ちょろっと使っていましたが、「最初へ」が「前へ」より左にあったり、「最後へ」が「次へ」よりも右にあるのが嫌だったので改造していました (「前へ」を「最初へ」よりも左に持っていく等)。論理的には不自然ですが、「一番左/右にあるものをクリックすれば、1ページずつの移動になる」わけで、直感的であり使いさすさは上だと思います。paginate_links() はまさにそういうナビゲーションを吐き出すので、「よくできている」と思います。みなさんも、ぜひお試しください。
[追記 2008-07-27] パーマリンク構造がスラッシュで終わってない場合 (/%year%/%monthnum%/%day%/%postname%.html のような場合) は不具合が出てしまうため、対策したコードに変更しました (掲載したコードは変更ずみです)。厳密には「1ページ目」へのリンクにスラッシュが残ってしまいますが、WordPress 2.3 以降では自動的にスラッシュなしにリダイレクトされるため Not Found にはなりません。これを回避するにはちょっとコードの改良が必要っぽいです。
[追記 2008-08-06] パーマリンク構造を設定していても、検索などクエリー文字列を使った URL だと動作が変でした。このため、URL にクエリー文字列を含むかどうかを判別させるようにました。パーマリンク構造がスラッシュで終わっていない場合にも対応しています。
カレンダー
3月 2010 月 火 水 木 金 土 日 « 2月 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 - 12日 14日まで OSC 神戸参加のための遠征 (行程立案中)
- 13日 OSC 神戸 (神戸ハーバーランド)
アーカイブ
- 1997年 (5)
- 1998年 (12)
- 1999年 (6)
- 2000年 (128)
- 2003年 (17)
- 2004年 (99)
- 2005年 (393)
- 2006年 (393)
- 2007年 (311)
- 2008年 (373)
- 2009年 (213)
- 2010年 (24)
カテゴリー
- WordPressハック (388)
- モバイル・携帯電話 (256)
- 旅行 (171)
- 更新履歴 (130)
- テレビ・メディア (127)
- 社会問題 (113)
- ソフトウェア (100)
- ジェンダー・セクシャリティー (84)
- 日常生活 (78)
- 食べ物・料理 (77)
- アップル・Macintosh (71)
- ふりひら (67)
- イベント (66)
- ユニバーサル・スタジオ・ジャパン (60)
- 鉄道 (59)
- 阪神タイガース (57)
- ネットワーク (48)
- 愛知万博 (33)
- スポーツ (28)
- コンピューター (17)
- オリンピック・パラリンピック (17)
- 航空 (15)
- 読書 (8)
- 音楽 (7)
- 映画 (6)
主なタグ (まだ整備中)
メタ情報
- RSS フィード
- Atom フィード
- トラックバック・コメントの RSS
- Valid XHTML の検査
- XFN
- Powered by WordPress


上に戻る