Cambiar el número de entradas por página

11 oct 2011, 05:13:34
Vistas: 43.8K
Votos: 20

En la configuración de WordPress Ajustes => Lectura => Las páginas del blog muestran como máximo [campo de entrada] entradas

Actualmente lo tengo configurado para mostrar 3 entradas.

En mi página de inicio, archivos por fecha, archivos de etiquetas, archivos de categorías, resultados de búsqueda, etc... Todas las páginas que utilizan el loop y la paginación muestran ahora 3 entradas por página.

Mi objetivo es poder tener diferentes cantidades de resultados para diferentes páginas. En mi página de inicio tal vez tener 3 entradas, pero en los resultados de búsqueda o archivos, mostrar una cantidad diferente de resultados por página.

¿Alguna idea de cómo hacer esto?

0
Todas las respuestas a la pregunta 3
4
30

Esto lo logrará: (agrega al archivo functions.php de tu tema)

add_action( 'pre_get_posts',  'set_posts_per_page'  );
function set_posts_per_page( $query ) {

  global $wp_the_query;

  if ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_search() ) ) {
    $query->set( 'posts_per_page', 3 );
  }
  elseif ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 );
  }
  // Etc..

  return $query;
}
11 oct 2011 06:19:40
Comentarios

¿Es set un método de $query?

Rutwick Gangurde Rutwick Gangurde
11 oct 2011 07:34:46

@RutwickGangurde Sí. De hecho, is_search() e is_archive() también lo son, lo cual queda un poco más claro después de actualizar mi respuesta con información obtenida de este excelente post: http://www.billerickson.net/customize-the-wordpress-query/ Ese artículo también menciona que tendremos el método $wp_query->is_main_query() en WP3.3, lo cual es bastante genial.

Dave Romsey Dave Romsey
11 oct 2011 08:10:57

¡Increíble, hermano! Muchas gracias por el excelente post. Nunca conocí estos métodos, y solía adentrarme en el objeto/array para cambiar/establecer valores. ¡Genial para hacks rápidos! ¡+1 para ti!

Rutwick Gangurde Rutwick Gangurde
11 oct 2011 08:20:54

¿Desde cuándo fue necesario no cambiarlo si es el panel de administración? Parece que no sincroniza el "Número de elementos por página:" en las opciones de pantalla en WP, lo que posiblemente resulte en páginas a las que no puedes navegar.

NoBugs NoBugs
19 ene 2016 01:03:55
1

Mejorando la respuesta anterior: el hook pre_get_posts se obtiene por referencia, por lo que no requiere un llamado global ni un return.

add_action( 'pre_get_posts',  'set_posts_per_page'  );
function set_posts_per_page( $query ) {

  if ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_search() ) ) {
    $query->set( 'posts_per_page', 3 );
  }
  elseif ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 );
  }
  // etc..

}
10 oct 2018 13:01:44
Comentarios

También hay un problema con tu código ya que usar el global $wp_query resultará en un desperdicio de memoria, pero no puedes llamar a la variable indefinida $wp_the_query

Abdulkabir Ojulari Abdulkabir Ojulari
16 sept 2019 23:28:19
0

Usando $GLOBALS['wp_query'] o simplemente $wp_query

add_action( 'pre_get_posts',  'set_posts_per_page'  );
function set_posts_per_page( $query ) {

  // Si no es el panel de administración, es la consulta principal y es una búsqueda
  if ( ( ! is_admin() ) && ( $query === $GLOBALS['wp_query'] ) && ( $query->is_search() ) ) {
    $query->set( 'posts_per_page', 3 ); // Establece 3 posts por página para búsquedas
  }
  // Si no es el panel de administración, es la consulta principal y es un archivo
  elseif ( ( ! is_admin() ) && ( $query === $GLOBALS['wp_the_query'] ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 ); // Establece 5 posts por página para archivos
  }

  return $query;
}
16 sept 2019 23:29:20