Cambiare il numero di articoli per pagina
In WordPress Impostazioni => Lettura => Le pagine del blog mostrano al massimo [campo input] articoli
Al momento ho impostato 3 articoli per pagina.
Nella mia homepage, negli archivi per data, nei tag, nelle categorie, nei risultati di ricerca, ecc... Tutte le pagine che utilizzano il loop e la paginazione mostrano ora 3 articoli per pagina.
Il mio obiettivo è poter avere un numero diverso di risultati per pagine diverse. Nella mia homepage potrei avere 3 articoli, ma nei risultati di ricerca o negli archivi, mostrare un numero diverso di risultati per pagina.
Qualche idea su come realizzarlo?

Questo farà al caso tuo: (aggiungi al file functions.php del tuo 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 );
}
// Ecc..
return $query;
}

@RutwickGangurde Sì. In effetti, anche is_search() e is_archive() lo sono, il che ora è un po' più chiaro dopo aver aggiornato la mia risposta con le informazioni tratte da questo ottimo post: http://www.billerickson.net/customize-the-wordpress-query/ L'articolo nota anche che avremo il metodo $wp_query->is_main_query() in WP3.3, il che è piuttosto interessante.

Fantastico amico! Grazie mille per il post fantastico. Non conoscevo questi metodi e sono solito scavare nell'oggetto / array per modificare / impostare valori. Ottimo per hack rapidi! +1 per te!

Migliorando la risposta precedente: l'hook pre_get_posts
viene recuperato per riferimento, quindi non richiede una chiamata global
o 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 );
}
// Ecc..
}

Utilizzo di $GLOBALS['wp_query'] o semplicemente $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;
}
