Modifică numărul de articole afișate pe pagină

11 oct. 2011, 05:13:34
Vizualizări: 43.8K
Voturi: 20

Î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?

0
Toate răspunsurile la întrebare 3
4
30

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;
}
11 oct. 2011 06:19:40
Comentarii

set este o metodă a obiectului $query?

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

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

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

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!

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

De când a devenit necesar să nu-l schimbi niciodată dacă este admin dashboard? Se pare că nu sincronizează opțiunea "Număr de articole pe pagină:" din opțiunile ecranului în WP, ceea ce poate duce la pagini la care nu poți naviga.

NoBugs NoBugs
19 ian. 2016 01:03:55
1

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

}
10 oct. 2018 13:01:44
Comentarii

Există o problemă și în codul tău, deoarece utilizarea variabilei globale $wp_query va duce la risipă de memorie, dar nu poți apela variabila nedefinită $wp_the_query

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

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;
}
16 sept. 2019 23:29:20