Creo que estoy casi allí con esto, pero no puedo mostrar los enlaces de paginación para un directorio de autores que estoy creando.
Mi código está debajo, pero no sé cómo hacer que funcionen los enlaces para navegar entre páginas de autores. ¿Alguien puede ayudarme? Tengo la sensación de que esto podría ser útil, pero no sé cómo implementarlo:
Gracias
Osu
<?php
/* ****************************************************************** */
/* !LIST AUTHORS */
/* ****************************************************************** */
// THANKS TO:
// http://www.mattvarone.com/wordpress/list-users-with-wp_user_query/
// pagination
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // Needed for pagination
$paged -= 1;
$limit = 2;
$offset = $paged * $limit;
// prepare arguments
$args = array(
// search only for Authors role
'role' => 'Subscriber',
// order results by display_name
'orderby' => 'display_name',
// return all fields
'fields' => 'all_with_meta',
'number' => $limit,
'offset' => $offset
);
// Create the WP_User_Query object
$wp_user_query = new WP_User_Query($args);
// Get the results
$authors = $wp_user_query->get_results();
// Check for results
if (!empty($authors))
{
echo '<div class="author-entry">';
// loop trough each author
foreach ($authors as $author)
{
$author_info = get_userdata($author->ID); ?>
<span style="float:left;padding:0 5px 0 0;"><?php echo get_avatar( $author->ID, 50 ); /* http://codex.wordpress.org/Function_Reference/get_avatar */ ?></span>
<span class="fn"><strong>First name</strong> : <?php echo $author_info->first_name; ?></span><br />
<span class="ln"><strong>Last name</strong> : <?php echo $author_info->last_name; ?></span><br />
<span class="em"><strong>Email address</strong> : <a href="mailto:<?php echo $author_info->user_email; ?>"><?php echo $author_info->user_email; ?></a></span><br />
<span class="we"><strong>Website</strong> : <a href="<?php echo $author_info->user_url; ?>"><?php echo $author_info->user_url; ?></a></span><br />
<span class="de"><strong>Bio</strong> :<br /><?php echo $author_info->description ; ?></span>
<div class="clear"> </div>
<?php
}
echo '</div>';
} else {
echo 'No authors found';
}
?>
<?php /* WHAT DO I PUT HERE TO CREATE THE PAGINATION LINKS? */ ?>
Respuestas:
Esto debería acercarte mucho. No lo he probado, pero es casi idéntico a una configuración que he usado varias veces.
fuente
Realmente no deberías usar la respuesta de Pippin. La consulta es muy ineficiente.
$user_count_query
en el ejemplo, puede devolver hasta 999,999 usuarios de su base de datos a su script, con todos los campos de usuario. Esto seguramente afectará los límites de memoria y / o tiempo para PHP si / cuando su sitio crece lo suficientemente grande.Pero esa puede haber sido la única solución en 2012.
Aquí hay una mejor manera de hacerlo. En este ejemplo, solo tengo la página siguiente y la anterior, pero si necesita paginación numerada, las variables están ahí para construirla. WordPress no tiene una función de paginación que sea compatible con WP_User_Query (que yo sepa).
Ejemplo que muestra la página 2:
Actualización 8/6/2018: Cómo agregar números de página en lugar de Siguiente / Anterior
Si desea tener números de página en lugar de enlaces de página siguiente / anterior, así es como puede configurarlo. Tenga en cuenta que deberá reemplazar los números con enlaces de página, no se podrá hacer clic en ellos en este ejemplo (basado en /programming//a/11274294/470480 , modificado para mostrar una cantidad constante de números intermedios y no agregar el "..." a menos que se omita una página).
También puede ver mi archivo Gist que contiene una función reutilizable para este propósito.
Salida (de la página 1 a la 10):
fuente
$start_user_num = (($current_page-1) * $users_per_page) + 1;
y$end_user_num = $start_user_num + count($users->get_results());
.Call to a member function get_results() on a non-object
así que modifica$end_user_number
a$start_user_num + ($users_per_page-1);
y que solucionó el problema. ¡Gracias de nuevo!$end_user_number
mi solución. De vuelta a la mesa de dibujo, ¡ja!El crédito completo debería ir a @ radley-sustaire por su respuesta, pero vi un pequeño problema con él, así que estoy compartiendo mi versión de la respuesta aquí.
Con mi versión, también estaba filtrando los resultados por ubicación, palabra clave, etc., por lo que algunas páginas tuvieron menos resultados que la var '$ users_per_page'. Entonces, por ejemplo, si mis usuarios por página se configuraron para mostrar 10, pero los resultados del filtro solo devolvieron 3 usuarios, obtuve 'Mostrar 10 de 3 usuarios' en la parte superior de la página. Obviamente, esto no tenía sentido, así que agregué una simple declaración "if" para verificar si el recuento de resultados fue mayor que la variable '$ users_per_page'.
Radley, si editas tu respuesta con la actualización, felizmente votaré por la respuesta correcta, ya que creo que es mejor que la solución de Pippin.
Así que este es el código final para cualquiera que lo desee.
fuente