/** * Template tag: Boxed Style Paging * * @param array $args: * 'before': (string) * 'after': (string) * 'options': (string|array) Used to overwrite options set in WP-Admin -> Settings -> PageNavi * 'query': (object) A WP_Query instance */ function wp_pagenavi($args = array()) { if (!is_array($args)) { $argv = func_get_args(); list($before, $after, $options) = $argv; $query = $GLOBALS['wp_query']; } else { $args = wp_parse_args($args, array('before' => '', 'after' => '', 'options' => array(), 'query' => $GLOBALS['wp_query'])); extract($args, EXTR_SKIP); } $options = wp_parse_args($options, PageNavi_Core::$options->get()); $posts_per_page = intval($query->get('posts_per_page')); $paged = max(1, absint($query->get('paged'))); $total_pages = max(1, absint($query->max_num_pages)); if (1 == $total_pages && !$options['always_show']) { return; } $request = $query->request; $numposts = $query->found_posts; $pages_to_show = absint($options['num_pages']); $larger_page_to_show = absint($options['num_larger_page_numbers']); $larger_page_multiple = absint($options['larger_page_numbers_multiple']); $pages_to_show_minus_1 = $pages_to_show - 1; $half_page_start = floor($pages_to_show_minus_1 / 2); $half_page_end = ceil($pages_to_show_minus_1 / 2); $start_page = $paged - $half_page_start; if ($start_page <= 0) { $start_page = 1; } $end_page = $paged + $half_page_end; if ($end_page - $start_page != $pages_to_show_minus_1) { $end_page = $start_page + $pages_to_show_minus_1; } if ($end_page > $total_pages) { $start_page = $total_pages - $pages_to_show_minus_1; $end_page = $total_pages; } if ($start_page < 1) { $start_page = 1; } $out = ''; switch (intval($options['style'])) { // Normal case 1: if (!empty($options['pages_text'])) { $pages_text = str_replace(array("%CURRENT_PAGE%", "%TOTAL_PAGES%"), array(number_format_i18n($paged), number_format_i18n($total_pages)), $options['pages_text']); $out .= "<span class='pages'>{$pages_text}</span>"; } if ($start_page >= 2 && $pages_to_show < $total_pages) { $first_text = str_replace('%TOTAL_PAGES%', number_format_i18n($total_pages), $options['first_text']); $out .= _wp_pagenavi_single(1, 'first', $first_text, '%TOTAL_PAGES%'); if (!empty($options['dotleft_text'])) { $out .= "<span class='extend'>{$options['dotleft_text']}</span>"; } } $larger_pages_array = array(); if ($larger_page_multiple) { for ($i = $larger_page_multiple; $i <= $total_pages; $i += $larger_page_multiple) { $larger_pages_array[] = $i; } } $larger_page_start = 0; foreach ($larger_pages_array as $larger_page) { if ($larger_page < $start_page && $larger_page_start < $larger_page_to_show) { $out .= _wp_pagenavi_single($larger_page, 'smaller page', $options['page_text']); $larger_page_start++; } } if (!empty($options['prev_text'])) { $out .= get_previous_posts_link($options['prev_text']); } $timeline = 'smaller'; foreach (range($start_page, $end_page) as $i) { if ($i == $paged && !empty($options['current_text'])) { $current_page_text = str_replace('%PAGE_NUMBER%', number_format_i18n($i), $options['current_text']); $out .= "<span class='current'>{$current_page_text}</span>"; $timeline = 'larger'; } else { $out .= _wp_pagenavi_single($i, "page {$timeline}", $options['page_text']); } } if (!empty($options['next_text'])) { $out .= get_next_posts_link($options['next_text'], $total_pages); } $larger_page_end = 0; foreach ($larger_pages_array as $larger_page) { if ($larger_page > $end_page && $larger_page_end < $larger_page_to_show) { $out .= _wp_pagenavi_single($larger_page, 'larger page', $options['page_text']); $larger_page_end++; } } if ($end_page < $total_pages) { if (!empty($options['dotright_text'])) { $out .= "<span class='extend'>{$options['dotright_text']}</span>"; } $out .= _wp_pagenavi_single($total_pages, 'last', $options['last_text'], '%TOTAL_PAGES%'); } break; // Dropdown // Dropdown case 2: $out .= '<form action="" method="get">' . "\n"; $out .= '<select size="1" onchange="document.location.href = this.options[this.selectedIndex].value;">' . "\n"; foreach (range(1, $total_pages) as $i) { $page_num = $i; if ($page_num == 1) { $page_num = 0; } if ($i == $paged) { $current_page_text = str_replace('%PAGE_NUMBER%', number_format_i18n($i), $options['current_text']); $out .= '<option value="' . esc_url(get_pagenum_link($page_num)) . '" selected="selected" class="current">' . $current_page_text . "</option>\n"; } else { $page_text = str_replace('%PAGE_NUMBER%', number_format_i18n($i), $options['page_text']); $out .= '<option value="' . esc_url(get_pagenum_link($page_num)) . '">' . $page_text . "</option>\n"; } } $out .= "</select>\n"; $out .= "</form>\n"; break; } $out = $before . "<div class='wp-pagenavi'>\n{$out}\n</div>" . $after; echo apply_filters('wp_pagenavi', $out); }
function wp_pagenavi($before = '', $after = '') { global $wp_query; $options = PageNavi_Core::$options->get(); $posts_per_page = intval(get_query_var('posts_per_page')); $paged = intval(get_query_var('paged')); $request = $wp_query->request; $numposts = $wp_query->found_posts; $max_page = $wp_query->max_num_pages; if ($max_page <= 1 && !intval($options['always_show'])) { return; } if (empty($paged)) { $paged = 1; } $pages_to_show = intval($options['num_pages']); $larger_page_to_show = intval($options['num_larger_page_numbers']); $larger_page_multiple = intval($options['larger_page_numbers_multiple']); $pages_to_show_minus_1 = $pages_to_show - 1; $half_page_start = floor($pages_to_show_minus_1 / 2); $half_page_end = ceil($pages_to_show_minus_1 / 2); $start_page = $paged - $half_page_start; if ($start_page <= 0) { $start_page = 1; } $end_page = $paged + $half_page_end; if ($end_page - $start_page != $pages_to_show_minus_1) { $end_page = $start_page + $pages_to_show_minus_1; } if ($end_page > $max_page) { $start_page = $max_page - $pages_to_show_minus_1; $end_page = $max_page; } if ($start_page <= 0) { $start_page = 1; } $out = ''; switch (intval($options['style'])) { // Normal case 1: if (!empty($options['pages_text'])) { $pages_text = str_replace(array("%CURRENT_PAGE%", "%TOTAL_PAGES%"), array(number_format_i18n($paged), number_format_i18n($max_page)), $options['pages_text']); $out .= "<span class='pages'>{$pages_text}</span>"; } if ($start_page >= 2 && $pages_to_show < $max_page) { $first_text = str_replace('%TOTAL_PAGES%', number_format_i18n($max_page), $options['first_text']); $out .= _wp_pagenavi_single(1, 'first', $first_text, '%TOTAL_PAGES%'); if (!empty($options['dotleft_text'])) { $out .= "<span class='extend'>{$options['dotleft_text']}</span>"; } } $larger_pages_array = array(); if ($larger_page_multiple) { for ($i = $larger_page_multiple; $i <= $max_page; $i += $larger_page_multiple) { $larger_pages_array[] = $i; } } $larger_page_start = 0; foreach ($larger_pages_array as $larger_page) { if ($larger_page < $start_page && $larger_page_start < $larger_page_to_show) { $out .= _wp_pagenavi_single($larger_page, 'smaller page', $options['page_text']); $larger_page_start++; } } if (!empty($options['prev_text'])) { $out .= get_previous_posts_link($options['prev_text']); } for ($i = $start_page; $i <= $end_page; $i++) { if ($i == $paged && !empty($options['current_text'])) { $current_page_text = str_replace('%PAGE_NUMBER%', number_format_i18n($i), $options['current_text']); $out .= "<span class='current'>{$current_page_text}</span>"; } else { $out .= _wp_pagenavi_single($i, 'page', $options['page_text']); } } if (!empty($options['next_text'])) { $out .= get_next_posts_link($options['next_text'], $max_page); } $larger_page_end = 0; foreach ($larger_pages_array as $larger_page) { if ($larger_page > $end_page && $larger_page_end < $larger_page_to_show) { $out .= _wp_pagenavi_single($larger_page, 'larger page', $options['page_text']); $larger_page_end++; } } if ($end_page < $max_page) { if (!empty($options['dotright_text'])) { $out .= "<span class='extend'>{$options['dotright_text']}</span>"; } $out .= _wp_pagenavi_single($max_page, 'last', $options['last_text'], '%TOTAL_PAGES%'); } break; // Dropdown // Dropdown case 2: $out .= '<form action="" method="get">' . "\n"; $out .= '<select size="1" onchange="document.location.href = this.options[this.selectedIndex].value;">' . "\n"; for ($i = 1; $i <= $max_page; $i++) { $page_num = $i; if ($page_num == 1) { $page_num = 0; } if ($i == $paged) { $current_page_text = str_replace('%PAGE_NUMBER%', number_format_i18n($i), $options['current_text']); $out .= '<option value="' . esc_url(get_pagenum_link($page_num)) . '" selected="selected" class="current">' . $current_page_text . "</option>\n"; } else { $page_text = str_replace('%PAGE_NUMBER%', number_format_i18n($i), $options['page_text']); $out .= '<option value="' . esc_url(get_pagenum_link($page_num)) . '">' . $page_text . "</option>\n"; } } $out .= "</select>\n"; $out .= "</form>\n"; break; } $out = $before . "<div class='wp-pagenavi'>\n{$out}\n</div>" . $after; echo apply_filters('wp_pagenavi', $out); }