Ich arbeite an einer Website mit einer Suchfunktion, mit der Benutzer viele Post-Metas durchsuchen können. Es gibt ein bestimmtes Suchmuster, für das ich keine Ergebnisse erzwingen möchte. Die WP_Query findet technisch gesehen Ergebnisse in der Datenbank, aber ich möchte das irgendwie überschreiben, um sie dazu zu zwingen, keine Ergebnisse zurückzugeben, um das Fehlschlagen auszulösen if( $example->have_posts() )
.
Gibt es eine Art von Parameter, den ich an WP_Query übergeben kann 'force_no_results' => true
, der es zwingt, keine Ergebnisse zurückzugeben?
WP_Query()
Zurückgeben von Ergebnissen kann der beste Weg sein, diese Frage zu beantworten. Es kann auch hilfreich sein, wenn Sie das Suchmuster beschreiben , das Sie nicht abfragen möchten. Wenn Sie das Suchmuster kennen, können Sie möglicherweise eine Lösung finden.Antworten:
Versuchen
Einfach und auf den Punkt.
quelle
post__in
Beiträge zurückgegeben wurden, wenn ein leeres Array übergeben wurde ...array(0)
funktioniert großartig! Das ist seltsam, aber es kann tatsächlich auf ein Problem zurückgeführt werden, das im WP-Kern als Fehler aufgetreten ist, aber dann so belassen wurde, wie es ist, weil zu viele Theme- / Plugin-Entwickler Funktionen darum herum erstellt haben. -_- core.trac.wordpress.org/ ticket / 28099Seltsamerweise gibt es keinen sauberen / expliziten Weg zum Kurzschließen
WP_Query
.Wenn es sich um eine Hauptabfrage handelt, mit der Sie möglicherweise etwas anfangen
WP->parse_request()
, scheint es dort einen relativ neuen (3.5)do_parse_request
Filter zu geben.Aber für
WP_Query
sich sind schmutzige Hacks normalerweise in Ordnung, wie das Kurzschließen von SQL-Abfragen durch HinzufügenAND 1=0
überposts_where
Filter usw.quelle
"post_type" => "break_loop"
er nicht existiert.Die Probleme beim Festlegen eines Abfrageparameters auf einen nicht vorhandenen Wert sind 2:
'posts_*'
Filter-Hooks ('posts_where'
,'post_join'
usw.), die auf Abfragen einwirken. Sie können also nie sicher sein, dass eine einfacheOR
Klausel, die von einem Filter zurückgegeben wird, etwas zurückgibt, wenn Sie nicht vorhandene Parameter für die Abfrage zurückgeben .Sie benötigen ein wenig Hardcore- Routine, um sicherzustellen , dass eine Abfrage kein Ergebnis zurückgibt und kein (oder nur sehr geringfügiges) Leistungsproblem vorliegt.
Um diese Routine auszulösen, können Sie jede Methode verwenden. Technisch gesehen können Sie jedes Argument an
WP_Query
Ereignisargumente übergeben, das nicht vorhanden ist.Wenn Ihnen also etwas gefällt
'force_no_results' => true
, können Sie es folgendermaßen verwenden:und fügen Sie einen Rückruf hinzu, der ausgeführt wird und
'pre_get_posts'
die harte Arbeit erledigt :Was dieser Code tut, wird
'pre_get_posts'
so spät wie möglich ausgeführt. Wenn das Argument 'force_no_results' in der Abfrage vorhanden ist, gilt Folgendes:SELECT ID FROM wp_posts WHERE 0 = 1
Wenn alle Filter entfernt wurden, gibt es keine Möglichkeiten, diese Abfrage zu ändern. Sie ist sehr schnell und hat mit Sicherheit kein Ergebnisquelle