Modifica post per numero di pagine


14

Nelle impostazioni di wordpress => Lettura => Le pagine del blog mostrano al massimo post [campo di input]

L'ho impostato su 3 post al momento.

Sul mio indice, archivi di date, archivi di tag, archivi di categoria, risultati di ricerca, ecc ... Tutte le pagine che utilizzano il ciclo e il paging, ora mostra 3 post per pagina.

Il mio obiettivo è quello di poter avere un numero diverso di risultati per pagine diverse. Sul mio indice forse ho 3 post ma nei risultati di ricerca o negli archivi, mostra un numero diverso di risultati per pagina.

qualche idea sul come farlo?

Risposte:


23

Questo lo farà: (aggiungi alle funzioni.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 );
  }
  // Etc..

  return $query;
}

È setun metodo di $query?
Rutwick Gangurde,

@RutwickGangurde Sì. In effetti, anche is_search () e is_archive (), che ora è un po 'più chiaro dopo aver aggiornato la mia risposta con le informazioni ricavate da questo fantastico post: billerickson.net/customize-the-wordpress-query Quell'articolo nota anche che' Avrò il metodo $ wp_query-> is_main_query () in WP3.3, che è piuttosto interessante.
Dave Romsey,

Uomo meraviglioso! Grazie mille per l'ottimo post. Non ho mai conosciuto questi metodi e ho usato il drill down dell'oggetto / array per cambiare / impostare i valori. Buono per gli hack al volo! +1 per te!
Rutwick Gangurde,

Da quando è necessario non cambiarlo mai se is_admin dashboard? Sembra che non sincronizzi il "Numero di elementi per pagina:" nelle opzioni dello schermo in WP, il che potrebbe comportare pagine sulle quali non puoi effettuare la pagina.
NoBugs

0

Miglioramento della risposta sopra: l'hook pre_get_postsviene recuperato per riferimento, quindi non richiede una globalchiamata o una returnchiamata.

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

}

C'è anche un problema con il tuo codice poiché l'uso del $ wp_query globale farà ricorso a uno spreco di memoria ma non puoi chiamare vari $ wp_the_query indefiniti
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;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.