Cambiar el número de entradas por página
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?

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;
}

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

¡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!

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

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;
}
