Modifică numărul de articole afișate pe pagină
În WordPress Setări => Citire => Paginile de blog afișează maxim [câmp input] articole
În prezent am setat să afișeze 3 articole.
Pe pagina mea principală, arhivele după dată, arhivele pentru etichete, arhivele pentru categorii, rezultatele căutării, etc... Toate paginile care folosesc bucla (loop) și paginare, afișează acum 3 articole pe pagină.
Obiectivul meu este să pot avea un număr diferit de rezultate pentru pagini diferite. Pe pagina principală poate să afișeze 3 articole, dar în rezultatele căutării sau arhive, să afișeze un număr diferit de rezultate pe pagină.
Aveți idei cum pot face acest lucru?
Aceasta va funcționa: (adaugă în functions.php al temei tale)
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 Da. De fapt, is_search() și is_archive() sunt și ele metode, lucru care devine acum mai clar după ce am actualizat răspunsul meu cu informații din acest articol excelent: http://www.billerickson.net/customize-the-wordpress-query/ Articolul menționează de asemenea că vom avea metoda $wp_query->is_main_query() în WP3.3, ceea ce este destul de interesant.

Super tare! Mulțumesc mult pentru articolul excelent. Nu știam de aceste metode și obișnuiam să parcurg obiectul/array-ul pentru a modifica/seta valori. Foarte util pentru hack-uri rapide! +1 pentru tine!

Îmbunătățirea răspunsului de mai sus: hook-ul pre_get_posts
este preluat prin referință, astfel nu necesită un apel global
sau un apel 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..
}

Folosirea $GLOBALS['wp_query'] sau doar $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 ); // Setează 3 postări pe pagină pentru căutări
}
elseif ( ( ! is_admin() ) && ( $query === $GLOBALS['wp_the_query'] ) && ( $query->is_archive() ) ) {
$query->set( 'posts_per_page', 5 ); // Setează 5 postări pe pagină pentru arhive
}
return $query;
}
