Anzahl der Beiträge pro Seite ändern

14

In den wordpress Einstellungen => Lesen => Blogseiten zeigen höchstens [Eingabefeld] Beiträge

Ich habe es im Moment auf 3 Stellen gesetzt.

In meinem Index, in Datumsarchiven, Tag-Archiven, Kategoriearchiven, Suchergebnissen usw. werden jetzt 3 Beiträge pro Seite angezeigt.

Mein Ziel ist es, für verschiedene Seiten eine unterschiedliche Anzahl von Ergebnissen zu erzielen. In meinem Index befinden sich möglicherweise 3 Beiträge. In Suchergebnissen oder Archiven wird jedoch eine andere Anzahl von Ergebnissen pro Seite angezeigt.

Irgendwelche Ideen, wie das geht?

JasonDavis
quelle

Antworten:

23

Das wird es tun: (füge die functions.php deines Themas hinzu)

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
quelle
Ist seteine Methode von $query?
Rutwick Gangurde
@RutwickGangurde Ja. In der Tat, is_search () und is_archive () sind auch die nach dem Update meine Antwort mit Informationen von dieser großen Beitrag nachgelesen jetzt ein wenig mehr klar: billerickson.net/customize-the-wordpress-query Dieser Artikel stellt ferner fest , dass wir‘ In WP3.3 wird die Methode $ wp_query-> is_main_query () verwendet, was ziemlich cool ist.
Dave Romsey
Toller Kerl! Vielen Dank für den tollen Beitrag. Ich habe diese Methoden nie gekannt und habe das Objekt / Array aufgeschlüsselt, um Werte zu ändern / festzulegen. Gut für on the fly Hacks! +1 für dich!
Rutwick Gangurde
Seit wann war es notwendig, es nie zu ändern, wenn das Dashboard is_admin ist? Es sieht so aus, als würde die "Anzahl der Elemente pro Seite:" in den Bildschirmoptionen in WP nicht synchronisiert, was möglicherweise zu Seiten führt, auf die Sie nicht blättern können.
NoBugs
0

Verbesserung der obigen Antwort: Hook pre_get_postswird per Referenz abgerufen, daher ist weder ein globalAnruf noch ein returnAnruf erforderlich .

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

}
Kunst Fantasie
quelle
Es gibt auch ein Problem mit Ihrem Code, da die Verwendung der globalen $ wp_query zu Speicherverschwendung führt, aber Sie können nicht undefiniert verschiedene $ wp_the_query
Abdulkabir Ojulari 16.09.19
0

Verwenden Sie $ GLOBALS ['wp_query'] oder nur $ 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
quelle