it-swarm.com.de

Was ist der Unterschied zwischen post_limits und pre_get_posts?

Aufgrund des Mangels an Dokumentation zu post_limits ist es schwierig, mehr über diese Funktion und ihre Verwendung zu erfahren. Noch nie benutzt oder gesehen, vielleicht nicht benutzt?

function wpcodex_filter_home_post_limits( $limit, $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {
        return 'LIMIT 0, 25';
    }

    return $limit;
}
add_filter( 'post_limits', 'wpcodex_filter_home_post_limits', 10, 2 );

Basierend auf meinen Tests macht post_limits dasselbe wie pre_get_posts

Wenn ich 5 Posts unter Vorbehalt zurückgeben wollte, ohne den Rest zu paginieren, würde ich dann post_limits oder pre_get_posts verwenden?

6
Brad Dalton

Beachten Sie, dass Sie hier das Paging der Hauptabfrage mit dem posts_limits-Filter überschreiben, indem Sie fest codierte Werte verwenden:

'LIMIT 0, 25'

dabei steht 0 für den Versatz und 25 für die Anzahl der anzuzeigenden Beiträge.

In diesem Fall würde ich einfach pre_get_posts mit verwenden

$query->set( 'posts_per_page', 25 );

und wir müssen uns keine Sorgen um das Paging machen.

Wenn ich 5 Posts unter Vorbehalt zurückgeben wollte, ohne den Rest zu paginieren, würde ich dann post_limits oder pre_get_posts verwenden?

Wenn wir später entscheiden, dass eine Paginierung erforderlich ist, müssen wir Ihren posts_limits-Code überarbeiten. Der pre_get_posts-Filter würde so funktionieren, wie er ist, und wir könnten daher sagen, dass es sich zumindest um eine "zukunftssicherere" Methode handelt.

Eine andere Sache: Wenn Sie get_posts() oder WP_Query() mit suppressed -Filtern verwenden, ist der posts_limits -Filter nicht verfügbar, während auf den pre_get_posts-Hook zugegriffen werden kann.

5
birgire

Mit pre_get_posts können Sie die Abfrageargumente sehr früh in einer Anfrage ändern. Sie können alles ändern, was ein gültiges WP_Query-Argument wäre, einschließlich der LIMIT über das posts_per_page-Argument. Dies ermöglicht eine viel breitere Palette von Effekten als posts_limits, wodurch Sie nur einen Teil der SQL-Datenbankabfrage ändern können.

Verwenden Sie in Ihrem Fall pre_get_posts, da der Kerncode die Paginierung für Sie verwaltet (zumindest wenn dies die Hauptabfrage ist (). Wenn Sie post_limits verwenden, müssen Sie die Paginierung nachverfolgen und verwalten - den Teil "0,25" selbst Inkrementieren von Werten, während Sie blättern.

4
s_ha_dum