Ich denke, dass ich jetzt verstehe, was Sie versuchen zu tun. Wenn Sie eine benutzerdefinierte Abfrage mit ausführen WP_Query
und das Limit so festlegen, dass nur 5 Posts pro Seite abgerufen werden, werden nur 5 Posts von der Abfrage abgerufen, und diese Abfrage enthält nur 5 Posts, ABER aus Gründen der Paginierung wird WP_Query
immer noch die gesamte Datenbank durchlaufen und zählt alle Beiträge, die den Kriterien der Abfrage entsprechen.
Dies ist ersichtlich, wenn Sie sich die $found_posts
und $max_num_pages
-Eigenschaften der Abfrage ansehen . Nehmen wir ein Beispiel:
Sie haben 20 Beiträge, die zum Standardbeitragstyp gehören post
. Sie benötigen nur die letzten 5 Beiträge ohne Paginierung. Ihre Anfrage sieht so aus
$q = new WP_Query( 'posts_per_page=5' );
var_dump( $q->posts )
Sie erhalten erwartungsgemäß die letzten 5 Beiträge
echo $q->found_posts
werde dir geben 20
echo $q->max_num_pages
werde dir geben 4
Die Auswirkungen dieser zusätzlichen Arbeit sind auf Websites mit nur wenigen Posts minimal. Dies kann jedoch teuer werden, wenn Sie eine Website mit Hunderten oder Tausenden von Posts betreiben. Dies ist eine Verschwendung von Ressourcen, wenn Sie immer nur die 5 neuesten Beiträge benötigen
Es gibt einen undokumentierten Parameter namens, no_found_rows
der boolesche Werte verwendet, mit denen Sie Ihre Abfrage bailen können, nachdem die 5 benötigten Posts gefunden wurden. Dadurch wird WP_Query
erzwungen, nicht mehr nach Posts zu suchen, die die Kriterien erfüllen, nachdem die Anzahl der abgefragten Posts abgerufen wurde. Dieser Parameter ist bereits eingebaut get_posts
, deshalb get_posts
ist er etwas schneller als WP_Query
obwohl er get_posts
verwendet wirdWP_Query
Fazit
Wenn Sie keine Paginierung für eine Abfrage verwenden, ist es immer ratsam, 'no_found_rows=true'
in Ihrer Abfrage die Dinge zu beschleunigen und Ressourcen zu verschwenden.
'posts_per_page=5'