it-swarm.com.de

"pre_get_posts" wird bei jeder Abfrage ausgelöst

Wie kann ich Argumente nur für die Hauptabfrage ändern und andere Abfragen nicht beeinflussen?

add_filter('pre_get_posts', 'custom_post_count');
function custom_post_count($query){
  $query->set('posts_per_page', 5);
  return $query;
};

Da diese Aktion in der Methode get_posts von WP_Query aufgerufen wird, ändert dieser Code das Argument posts_per_page für alle Schleifen, nicht nur für die Hauptschleife. Das Übergeben dieses Arguments an WP_Query ist daher sinnlos.

3
onetrickpony

Grundsätzlich suchen Sie die Variableglobal $wp_the_query, die auf den Wert der Hauptabfrage gesetzt ist. Es ist möglicherweise nicht für 100% der Fälle geeignet, funktioniert jedoch wahrscheinlich in 99% der Fälle:

add_action( 'pre_get_posts', 'custom_post_count' );
function custom_post_count( $query ){
  global $wp_the_query;
  if ( $wp_the_query === $query ) {
    $query->set( 'posts_per_page', 5 );
  }
  return $query;
};
7
MikeSchinkel

Erstens ist 'pre_get_posts' eine Aktion und kein Filter. Das ist das Hauptproblem. Zweitens müssen Sie Bedingungen für den Kontext festlegen.

add_action('wp', 'custom_post_count');
function custom_post_count($query){
    if($query->is_home || $query->is_front_page){
        $query->set('posts_per_page', 5);
    }
    return $query;
};

Das vorherige Beispiel ist, wenn Sie dies einmal in Ihrer functions.php verwenden möchten, ohne Ihre Vorlagendateien zu berühren. Wenn Sie keine neue Abfrage erstellen, wird für jede Schleife mit pre_get_posts $ die Abfrage übernommen. Aus diesem Grund benutze ich query_posts (), um im folgenden Beispiel eine neue Abfrage zu erstellen.

Benutzerdefinierte Loops

So mache ich benutzerdefinierte Loops:

$args = array(
    'posts_per_page' => 5
);
query_posts($args);

if(have_posts()): while(have_posts()): the_post();


endwhile; else:

endif;

wp_reset_query();

Platzieren Sie einfach query_posts () über der Schleife und wp_reset_query () am Ende der Schleife.

Hoffe das hilft dir weiter. :)

5
Brian Fegter