Modifier les publications par nombre de pages

14

Dans les paramètres de wordpress => Lecture => Les pages de blog affichent au plus [champ de saisie] messages

Je l'ai mis à 3 postes pour le moment.

Sur mon index, les archives de dates, les archives de balises, les archives de catégories, les résultats de recherche, etc ... Toutes les pages qui utilisent la boucle et la pagination, il affiche maintenant 3 publications par page.

Mon objectif est de pouvoir avoir un nombre différent de résultats pour différentes pages. SUR mon index peut avoir 3 messages mais sur les résultats de recherche ou les archives, affichez un nombre différent de résultats par page.

Des idees pour faire cela?

JasonDavis
la source

Réponses:

23

Cela le fera: (ajouter aux fonctions de votre thème.php)

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;
}
Dave Romsey
la source
Est setune méthode de $query?
Rutwick Gangurde
@RutwickGangurde Oui. En fait, is_search () et is_archive () le sont aussi, ce qui est maintenant un peu plus clair après la mise à jour de ma réponse avec des informations glanées dans cet excellent article: billerickson.net/customize-the-wordpress-query Cet article note également que nous ' ll aura la méthode $ wp_query-> is_main_query () dans WP3.3, ce qui est plutôt cool.
Dave Romsey
Homme merveilleux! Merci beaucoup pour l'excellent post. Je n'ai jamais connu ces méthodes et j'avais l'habitude d'explorer l'objet / le tableau pour changer / définir des valeurs. Bon pour les hacks à la volée! +1 pour vous!
Rutwick Gangurde
Depuis quand était-il nécessaire de ne jamais le changer si le tableau de bord is_admin? Il semble qu'il ne synchronise pas le "Nombre d'éléments par page:" dans les options d'écran de WP, ce qui peut entraîner des pages auxquelles vous ne pouvez pas accéder.
NoBugs
0

Amélioration de la réponse ci-dessus: le hook pre_get_postsest récupéré par référence, il ne nécessite donc globalni appel ni returnappel.

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

}
Arts Fantasy
la source
Il y a aussi un problème avec votre code car l'utilisation de $ wp_query globale entraînera un gaspillage de mémoire mais vous ne pouvez pas appeler divers $ wp_the_query non définis
Abdulkabir Ojulari
0

Utiliser $ GLOBALS ['wp_query'] ou simplement $ 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;
}
Abdulkabir Ojulari
la source