Próba zbudowania wyszukiwania, które przeszukuje nie tylko wartości domyślne (tytuł, treść itp.), Ale także określone pole niestandardowe.
Moje obecne zapytanie:
$args = array(
'post_type' => 'post',
's' => $query,
'meta_query' => array(
array(
'key' => 'speel',
'value' => $query,
'compare' => 'LIKE'
)
)
);
$search = new WP_Query( $args )
...
Zwraca posty, które pasują zarówno do wyszukiwanego hasła, jak i do meta zapytania, ale chciałbym również, aby zwracało posty, w których po prostu pasuje do jednego z nich.
Jakieś pomysły?
Odpowiedzi:
Godzinami szukałem rozwiązania tego problemu. Scalanie tablic nie jest dobrym rozwiązaniem, szczególnie gdy zapytania są złożone i musisz mieć możliwość dodawania do meta-zapytań w przyszłości. Rozwiązanie, które jest Upraszczając piękny jest zmiana „s” do jednego, który umożliwia zarówno tytuły wyszukiwania i pól meta.
Stosowanie:
źródło
Dużo kodu można zmniejszyć, używając zmodyfikowanej wersji tej odpowiedzi .
źródło
$result->post_count = count( $result->posts );
ponieważ w przeciwnym razie otrzymywałem tylko 1 wynik.Zoptymalizowałem trochę odpowiedź na @Stabir Kira
Teraz możesz wyszukiwać według (tytułu, treści, ekskretu) lub (pola meta) lub (obu).
źródło
Zgodnie z sugestią Nicka Perkinsa musiałem połączyć dwa takie zapytania:
źródło
Cóż, to rodzaj włamania, ale działa. Musisz dodać filtr posts_clauses. Ta funkcja filtrowania dla dowolnego słowa zapytania istnieje w niestandardowym polu „speel”, a pozostałe zapytanie pozostaje nienaruszone.
źródło
miałem ten sam problem, do mojej nowej witryny właśnie dodałem nowy meta „tytuł”:
functions.php
A potem… po prostu dodaj coś takiego:
Co sądzisz o tym obejściu?
źródło
Wszystkie powyższe rozwiązania zwracają wyniki tylko wtedy, gdy istnieje dopasowanie w meta-kluczu speel. Jeśli masz wyniki gdzie indziej, ale nie w tym polu, nic nie dostaniesz. Nikt tego nie chce.
Potrzebne jest lewe łączenie. Utworzą go następujące.
źródło
To świetne rozwiązanie, ale musisz naprawić jedną rzecz. Kiedy dzwonisz „post__in”, musisz ustawić tablicę identyfikatorów, a $ unique to tablica postów.
przykład:
źródło
@ satbir-kira odpowiedź działa świetnie, ale przeszukuje tylko meta i tytuł postu. Jeśli chcesz przeszukiwać meta, tytuł i treść, oto zmodyfikowana wersja.
A oto jego użycie:
Zamień na
$get['search']
swoją wartość wyszukiwaniaźródło