Pracuję nad witryną z funkcją wyszukiwania, która pozwala użytkownikom przeszukiwać wiele meta postów. Istnieje określony wzorzec wyszukiwania, dla którego chciałbym siłą nie zwracać wyników. WP_Query technicznie znajdzie wyniki w bazie danych, ale chciałbym to przesłonić, aby wymusić, aby nie zwracał żadnych wyników, aby spowodować if( $example->have_posts() )
niepowodzenie.
Czy istnieje jakiś parametr, który mogę przekazać do WP_Query 'force_no_results' => true
, co zmusi go do zwrócenia żadnych wyników?
WP_Query()
braku wyników może, ale nie musi być najlepszym sposobem na udzielenie odpowiedzi na to pytanie. Pomocne może być również opisanie wzorca wyszukiwania, którego nie można zapytać. Znajomość wzorca wyszukiwania może pomóc w znalezieniu rozwiązania.Odpowiedzi:
Próbować
Prosto i do rzeczy.
źródło
post__in
zwracanie postów po przekazaniu pustej tablicy ...array(0)
działa świetnie! Jest to dziwne, ale można go przypisać do problemu, który pojawił się w jądrze WP jako błąd, ale został pozostawiony bez zmian,Co ciekawe, nie ma czystego / wyraźnego sposobu na zwarcie
WP_Query
.Jeśli jest to główne zapytanie, możesz coś rozwiązać
WP->parse_request()
, wydaje się, że jest tam stosunkowo nowy (3.5)do_parse_request
filtr.Ale
WP_Query
same w sobie brudne hacki są zwykle w porządku, takie jak zwieranie zapytań SQL przez dodanieAND 1=0
przezposts_where
filtr itp.źródło
"post_type" => "break_loop"
który nie istnieje.Problemy z ustawieniem parametru zapytania na nieistniejącą wartość to 2:
'posts_*'
zaczepów filtrów ('posts_where'
,'post_join'
itp.), Które działają na zapytania, więc nigdy nie możesz być pewien, że nawet ustawienie nieistniejącego parametru zapytania nie zwróci żadnych wyników, prostaOR
klauzula zwrócona przez filtr sprawi, że coś zwróci.Potrzebujesz trochę hardcorowej rutyny, aby mieć pewność, że zapytanie nie zwróci żadnego wyniku i nie wystąpi (lub będzie bardzo minimalny) problem z wydajnością.
Aby uruchomić tę procedurę, możesz użyć każdej metody, technicznie możesz przekazać dowolny argument
WP_Query
, argumenty zdarzenia, które nie istnieją.Więc jeśli lubisz coś takiego
'force_no_results' => true
, możesz użyć tego w następujący sposób:i dodaj wywołanie zwrotne działające na nim
'pre_get_posts'
, wykonując ciężką pracę:To, co robi ten kod, jest uruchamiane
'pre_get_posts'
tak późno, jak to możliwe. Jeśli w zapytaniu występuje argument „force_no_results”, wówczas:SELECT ID FROM wp_posts WHERE 0 = 1
po usunięciu wszystkich filtrów nie ma możliwości zmiany tego zapytania i jest ono bardzo szybkie i na pewno nie ma żadnego wynikuźródło