Cambiar publicaciones por recuento de páginas

14

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

Lo tengo configurado en 3 publicaciones en este momento.

En mi índice, archivos de fechas, archivos de etiquetas, archivos de categorías, resultados de búsqueda, etc. Todas las páginas que usan el bucle y la paginación, muestra 3 publicaciones por página ahora.

Mi objetivo es poder tener un número diferente de resultados para diferentes páginas. EN mi índice puede tener 3 publicaciones, pero en los resultados de búsqueda o en los archivos, muestra un número diferente de resultados por página.

¿Alguna idea de como hacer esto?

JasonDavis
fuente

Respuestas:

23

Esto lo hará: (agregue a las funciones de su tema.php)

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;
}
Dave Romsey
fuente
Es setun método de $query?
Rutwick Gangurde
@RutwickGangurde Sí. De hecho, is_search () y is_archive () también lo son, lo que ahora es un poco más claro después de actualizar mi respuesta con la información obtenida de esta gran publicación: billerickson.net/customize-the-wordpress-query Ese artículo también señala que ' Tendré el método $ wp_query-> is_main_query () en WP3.3, que es bastante bueno.
Dave Romsey
¡Hombre asombroso! Muchas gracias por la gran publicación. Nunca conocí estos métodos, y solía profundizar en el objeto / matriz para cambiar / establecer valores. Bueno para los trucos sobre la marcha! +1 para ti!
Rutwick Gangurde
¿Desde cuándo era necesario no cambiarlo nunca si is_admin dashboard? Parece que no sincroniza el "Número de elementos por página:" en las opciones de pantalla en WP, posiblemente resultando en páginas a las que no puede acceder.
NoBugs
0

Mejora en la respuesta anterior: el gancho pre_get_postsse obtiene por referencia, por lo que no requiere una globalllamada o una returnllamada.

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..

}
Arte fantasía
fuente
También hay un problema con su código, ya que usar $ wp_query global recurrirá al desperdicio de memoria, pero no puede llamar a varios $ wp_the_query indefinidos
Abdulkabir Ojulari
0

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

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

  if ( ( ! is_admin() ) && ( $query === $GLOBALS['wp_query'] ) && ( $query->is_search() ) ) {
    $query->set( 'posts_per_page', 3 );
  }
  elseif ( ( ! is_admin() ) && ( $query === $GLOBALS['wp_the_query'] ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 );
  }

  return $query;
}
Abdulkabir Ojulari
fuente