null, 'pages' => null,
'range' => 3, 'gap' => 3, 'anchor' => 1,
'before' => '
', 'after' => '
',
'title' => __('Pages:' , 'Triton'),
'nextpage' => __('»' , 'Triton'), 'previouspage' => __('«' , 'Triton'),
'echo' => 1
);
$r = wp_parse_args($args, $defaults);
extract($r, EXTR_SKIP);
if (!$page && !$pages) {
global $wp_query;
$page = get_query_var('paged');
$page = !empty($page) ? intval($page) : 1;
$posts_per_page = intval(get_query_var('posts_per_page'));
$pages = intval(ceil($wp_query->found_posts / $posts_per_page));
}
$output = "";
if ($pages > 1) {
$output .= "$before$title";
$ellipsis = "...";
if ($page > 1 && !empty($previouspage)) {
$output .= "$previouspage";
}
$min_links = $range * 2 + 1;
$block_min = min($page - $range, $pages - $min_links);
$block_high = max($page + $range, $min_links);
$left_gap = (($block_min - $anchor - $gap) > 0) ? true : false;
$right_gap = (($block_high + $anchor + $gap) < $pages) ? true : false;
if ($left_gap && !$right_gap) {
$output .= sprintf('%s%s%s',
and_paginate_loop(1, $anchor),
$ellipsis,
and_paginate_loop($block_min, $pages, $page)
);
}
else if ($left_gap && $right_gap) {
$output .= sprintf('%s%s%s%s%s',
and_paginate_loop(1, $anchor),
$ellipsis,
and_paginate_loop($block_min, $block_high, $page),
$ellipsis,
and_paginate_loop(($pages - $anchor + 1), $pages)
);
}
else if ($right_gap && !$left_gap) {
$output .= sprintf('%s%s%s',
and_paginate_loop(1, $block_high, $page),
$ellipsis,
and_paginate_loop(($pages - $anchor + 1), $pages)
);
}
else {
$output .= and_paginate_loop(1, $pages, $page);
}
if ($page < $pages && !empty($nextpage)) {
$output .= "$nextpage";
}
$output .= $after;
}
if ($echo) {
echo $output;
}
return $output;
}
function and_paginate_loop($start, $max, $page = 0) {
$output = "";
for ($i = $start; $i <= $max; $i++) {
$output .= ($page === intval($i))
? "$i"
: "$i";
}
return $output;
}
?>