How to paginate the get_users function?

First get the total number of users:

$total_users = count_users();
//var_dump($total_users); //for debugging purpose
$total_users = $total_users['total_users'];

and the current page:

$paged = get_query_var('paged');

Set a variable that will decide how many users to display per page:

$number = 20; // ie. 20 users page page 

Then, in your $args array add the offset if the current page != 0, and the max number of users to return:

'offset' => $paged ? ($paged - 1) * $number : 0,
'number' => $number,

Now add your code from above, and create the page links:

// display the user list here

if($total_users > $number){

  $pl_args = array(
     'base'     => add_query_arg('paged','%#%'),
     'format'   => '',
     'total'    => ceil($total_users / $number),
     'current'  => max(1, $paged),
  );

  // for ".../page/n"
  if($GLOBALS['wp_rewrite']->using_permalinks())
    $pl_args['base'] = user_trailingslashit(trailingslashit(get_pagenum_link(1)).'page/%#%/', 'paged');

  echo paginate_links($pl_args);
}

See paginate_links() for a full list of arguments….

Leave a Comment