From c1d042931b3a5666f84709364b28701cdc7ad6ec Mon Sep 17 00:00:00 2001 From: Ryan Boren Date: Tue, 3 Oct 2006 07:16:49 +0000 Subject: [PATCH] paginate_links() from mdawaffe. fixes #3159 git-svn-id: https://develop.svn.wordpress.org/trunk@4275 602fd350-edb4-49c9-b593-d223f7449a82 --- wp-admin/users.php | 18 ++++---- wp-includes/general-template.php | 78 ++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 9 deletions(-) diff --git a/wp-admin/users.php b/wp-admin/users.php index 4f2b8fdbc0..25c83f2759 100644 --- a/wp-admin/users.php +++ b/wp-admin/users.php @@ -84,15 +84,15 @@ class WP_User_Search { function do_paging() { if ( $this->total_users_for_query > $this->users_per_page ) { // have to page the results - $prev_page = ( $this->page > 1) ? true : false; - $next_page = ( ($this->page * $this->users_per_page) < $this->total_users_for_query ) ? true : false; - $this->paging_text = ''; - if ( $prev_page ) - $this->paging_text .= '

« Previous Page

'; - if ( $next_page ) - $this->paging_text .= '

Next Page »

'; - if ( $prev_page || $next_page ) - $this->paging_text .= '
'; + $this->paging_text = paginate_links( array( + 'total' => ceil($this->total_users_for_query / $this->users_per_page), + 'current' => $this->page, + 'prev_text' => '« Previous Page', + 'next_text' => 'Next Page »', + 'base' => 'users.php?%_%', + 'format' => 'userspage=%#%', + 'add_args' => array( 'usersearch' => urlencode($this->search_term) ) + ) ); } } diff --git a/wp-includes/general-template.php b/wp-includes/general-template.php index 12e771581e..99d195e852 100644 --- a/wp-includes/general-template.php +++ b/wp-includes/general-template.php @@ -877,4 +877,82 @@ function language_attributes() { echo $output; } + +function paginate_links( $arg = '' ) { + if ( is_array($arg) ) + $a = &$arg; + else + parse_str($arg, $a); + + // Defaults + $base = '%_%'; // http://example.com/all_posts.php%_% : %_% is replaced by format (below) + $format = '?page=%#%'; // ?page=%#% : %#% is replaced by the page number + $total = 1; + $current = 0; + $show_all = false; + $prev_next = true; + $prev_text = __('« Previous'); + $next_text = __('Next »'); + $end_size = 1; // How many numbers on either end including the end + $mid_size = 2; // How many numbers to either side of current not including current + $type = 'plain'; + $add_args = false; // array of query args to aadd + + extract($a); + + // Who knows what else people pass in $args + $total = (int) $total; + $current = (int) $current; + $end_size = 0 < (int) $end_size ? (int) $end_size : 1; // Out of bounds? Make it the default. + $mid_size = 0 <= (int) $mid_size ? (int) $mid_size : 2; + $add_args = is_array($add_args) ? $add_args : false; + $r = ''; + $page_links = array(); + $n = 0; + $dots = false; + + if ( $prev_next && $current && 1 < $current ) : + $link = str_replace('%_%', 2 == $current ? '' : str_replace('%#%', $current - 1, $format), $base); + if ( $add_args ) + $link = add_query_arg( $add_args, $link ); + $page_links[] = ""; + endif; + for ( $n = 1; $n <= $total; $n++ ) : + if ( $n == $current ) : + $page_links[] = "$n"; + $dots = true; + else : + if ( $show_all || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) : + $link = str_replace('%_%', 1 == $n ? '' : str_replace('%#%', $n, $format), $base); + if ( $add_args ) + $link = add_query_arg( $add_args, $link ); + $page_links[] = "$n"; + $dots = true; + elseif ( $dots && !$show_all ) : + $page_links[] = "..."; + $dots = false; + endif; + endif; + endfor; + if ( $prev_next && $current && ( $current < $total || -1 == $total ) ) : + $link = str_replace('%_%', str_replace('%#%', $current + 1, $format), $base); + if ( $add_args ) + $link = add_query_arg( $add_args, $link ); + $page_links[] = ""; + endif; + switch ( $type ) : + case 'array' : + return $page_links; + break; + case 'list' : + $r .= "\n"; + break; + default : + $r = join("\n", $page_links); + break; + endswitch; + return $r; +} ?>