- 2007-04-02 (月) 18:26
- archives
WordPress標準の、次ページor前ページのリンクを表示する関数は、インデントや改行が汚かったりMaxページが1だったりすると空要素となってしまったりする。…これが嫌で嫌でどうにかならんもんかなぁと思いつつ、試行錯誤を重ね、標準関数ではどうにも出来ないことに。ショック。
Wordpressは、かなり生なとこまで触れるのに、標準の関数の表示フォーマットが乏しすぎるなぁ。値だけ出力するか、出力時のに前後の文字列をカスタマイズできるようにするか、どの関数もechoの前にHookできるようにしてほしいなぁ。
ということで、独自に関数を作ってみました。
/**
* 次ページ、前ページへのリンクを表示します。
*/
function paging_link($args = '') {
global $paged, $wpdb, $wp_query;
if (is_array($args))
$r = &$args;
else
parse_str($args, $r);
$defaults = array('next_label' => 'Next Page', 'prev_label' => 'Previous Page', 'indent' => '');
$r = array_merge($defaults, $r);
extract($r);
if ($indent != '') {
$indent = (int) $indent;
for ($i = 0; $i < $indent; $i ++)
$indentText .= "\\t";
}
// max_page を取得
if (!$max_page)
$max_page = $wp_query->max_num_pages;
// paged を取得
if (!$paged)
$paged = 1;
// 次ページのページ番号を設定
$nextpage = intval($paged) + 1;
if(!is_single()) {
if ($max_page > 1)
echo "$indentText<ul class=\\"flip\\" id=\\"flip2\\">\\n";
if (empty($paged) || $nextpage <= $max_page) {
echo "$indentText\\t<li><a href=\\"";
next_posts($max_page);
echo '">'. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $next_label) ."</a></li>\\n";
}
if ($paged > 1) {
echo "$indentText\\t<li><a href=\\"";
previous_posts();
echo '">'. preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $prev_label) ."</a></li>\\n";
}
if ($max_page > 1)
echo $indentText . '</ul>' . "\\n";
}
}
これを、functions.phpのどこかに貼り付けて、index.phpの出力したい部分(多くは以下の感じ)に、
<?php paging_link('next_label=次のページ&prev_label=前のページ&indent=3') ?>
<ol class="topicPath">
<li><a href="/" title="Home">Index</a></li>
<li class="current">Memo</li>
</ol>
</div><!-- /main -->
指定してあげるといいと思います。
- Newer: WPのパーマリンクのURIを年/月/日/時間にする
- Older: エントリー本文をインデントするHook
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://miniturbo.org/2007/04/02/182605/trackback/
- Listed below are links to weblogs that reference
- pagingをエントリー下部にリストで出力 from miniturbo.org