Oi @marcosalexandre,
A função get_users
é um wrapper para a função get_results
da classe WP_User_Query
e, para paginação, talvez seja mais fácil usar WP_User_Query
direto.
Essa resposta no wordpress.stackexchange.com pode te ajudar. Com base nela podemos pensar mais ou menos em um script. As linhas 19 e 20 do seu arquivo virariam algo como:
$users_per_page = 10;
$args = array(
'orderby' => 'display_name',
'order' => 'ASC',
'role' => 'Contributor',
'number' => $users_per_page,
'paged' => ( get_query_var('paged') ) ? get_query_var('paged') : 1,
'count_total' => TRUE,
);
$autores_query = WP_User_Query( $args );
$autores = $autores_query->get_results();
Para a paginação:
if ( $autores_query->get_total() > $users_per_page ) {
$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 );
}
Não testei o código, mas já deve servir de caminho para você. Não esqueça de voltar para contar se funcionou, se ficou com alguma dúvida e, se for o caso, para marcar seu tópico como resolvido, beleza?
-
Esta resposta foi modificada 7 anos, 9 meses atrás por
Felipe Elia. Razão: formatação
Valeu @felipeelia!
Com a excelente base que passou, fiz os ajustes necessários (abaixo) e deu tudo certo \o/
Tinha faltado o “new” antes de WP_User_Query:
$users_per_page = 10;
$args = array(
'orderby' => 'display_name',
'order' => 'ASC',
'role' => 'Contributor',
'number' => $users_per_page,
'paged' => ( get_query_var('paged') ) ? get_query_var('paged') : 1,
'count_total' => TRUE,
);
$autores_query = new WP_User_Query( $args );
$autores = $autores_query->get_results();
E na paginação, definir os valores das variáveis “total_users” (pegar o número de usuários do role necessário), da variável “$paged” e da variável “$number” (com o número de usuários a serem exibidos por página):
$total_users = count( get_users( array( 'role' => 'Contributor' ) ) );
$paged = get_query_var('paged');
$number = 10;
if ( $autores_query->get_total() > $users_per_page ) {
$pl_args = array(
'base' => add_query_arg( 'paged', '%#%' ),
'format' => '',
'total' => ceil( $total_users ),
'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 );
}
Abraço
Que bom que resolveu @marcosalexandre!
Para melhorar a performance, no segundo bloco, você pode tentar:
$total_users = $autores_query->get_total();
Dessa forma ele já usa a mesma instância de WP_User_Query que já está criada. Aí dá pra trocar o teste para
if ( $total_users > $users_per_page ) {
Para manter a consistência é melhor você usar só $number
ou só $users_per_page
, elas tem sempre o mesmo valor 🙂
Obrigado pelas dicas @felipeelia, fiz as alterações que sugeriu, 😉