Ich habe über Google und WPSE recherchiert und das einzige, was ich immer wieder sehe, ist die Verwendung showposts
, die veraltet ist.
Ich bin vertraut mit WP_Query
, und ich dachte, wenn ich festgelegt posts_per_page
auf meine Grenze (dh. 5) und nopaging
zu true
, um es zu so etwas wie werden würde „ Ok, ich gebe Ihnen nur 5 Beiträge “. Das geht aber nicht.
Wie kann ich das machen?
'posts_per_page=5'
found_posts
Eigenschaft zugreife , wird eine höhere Zahl als 5 angegeben. Ich möchte, dass meine Abfrage nur 5 Beiträge enthält. Ist es möglich? @PieterGoosennopaging
Parameter nicht setzen . Wenn Sie diesen auf true setzen, erhalten Sie alle Postsnopaging
Parameter nicht einstelle , wird der Standardwert übernommenfalse
, sodass auf der Startseite 5 Beiträge angezeigt werden, die Abfrage jedoch mehr. Ich füge der Frage ein Bild hinzu.Antworten:
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 wirdWP_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 ausvar_dump( $q->posts )
Sie erhalten erwartungsgemäß die letzten 5 Beiträgeecho $q->found_posts
werde dir geben20
echo $q->max_num_pages
werde dir geben4
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 wirdWP_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 eingebautget_posts
, deshalbget_posts
ist er etwas schneller alsWP_Query
obwohl erget_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.quelle
Nach dem Gespräch mit @Pieter Goosen über die Kommentare der Frage kann ich die Frage beantworten und meinen Fehler erklären.
Der Schlüssel ist, dass
found_posts
mich verwirrt hat. Ich denke, diese Nummer ist die Beiträge abgerufen, ist aber nicht. Es ist die Anzahl der Beiträge, die den Kriterien entsprechen . Es ist so, als ob dieWP_Query
zwei Teile hatten: einer zum Finden (aller) Beiträge und der andere zum Abrufen des Inhalts, wenn nach denpagination
Parametern gesucht wird. Wir haben also die$post_count
Eigenschaft, dass die Anzahl der abgerufenen Posts (laut CodexThe number of posts being displayed
) gleich der Anzahl derposts_per_page
Parameter und der Anzahl der Elemente in der$posts
Array-Eigenschaft ist.Also
WP_Query
macht keine unnütze Arbeit, wie ich dachte ^^Hoffe das hilft anderen!
quelle
Ok, Sie können einen Beitragstyp namens "blog_posts" erstellen und 5 Beiträge dieses Beitragstyps abrufen. Hier ist was Sie tun müssen
Die obige Abfrage gibt 5 Posts vom Typ 'blog_posts' zurück. Wenn es sich nicht um einen benutzerdefinierten Post-Typ handelt, ersetzen
'post_type' => 'posts',
Sie einfach diese, wenn Sie alle Posts abrufen möchten, und ersetzen Sie diese'posts_per_page' => '-1',
, um weitere Informationen zu erhalten. WP Queryquelle
Ich weiß, dass @ user1750063 den Code erwähnt hat, aber versuchen Sie dies
quelle
id
ist alsorderby
Wert ungültig undpagination
ist ein ungültiger Parameterpagination
ist kein gültiger Parameter. Du meinst'nopaging' => true
? Wenn ja, dann bekomme ich ALLE Beiträge. Das ist nicht was ich will. @PieterGoosen Ich denke er meintID
.ID
nicht seinid