Po dłuższym czasie pracy z WordPressem prawdopodobnie w pewnym stopniu pracowałeś z metadanymi posta. Być może po prostu czytałeś metadane z bazy danych, a może zarówno zapisywałeś, jak i czytałeś z tabeli bazy danych.
Może to być naprawdę potężny interfejs API, gdy potrzebujesz powiązać określone informacje z twoimi postami (lub, jeśli jesteś jeszcze bardziej abstrakcyjny, z twoimi modelami).
To powiedziawszy, co się dzieje, gdy chcesz uwzględnić informacje z tabeli metadanych, ale nie masz wygody wtyczek, takich jak SearchWP lub Relevanssi?
Ponadto załóżmy, że przypadek użycia dotyczy tylko administratorów i dotyczy tylko obszaru administracyjnego WordPress. Oznacza to, że chcesz przeszukiwać swoje posty z poziomu ekranu Wszystkie posty, ale chcesz również uwzględnić metadane postów w kryteriach wyszukiwania.
Co wtedy?
Wyszukaj metadane posta
Po wyjęciu z pudełka, za każdym razem, gdy szukasz postów w obszarze administracyjnym WordPress, wyszuka on frazę w tytule posta, fragmencie posta i treści posta, a następnie zwróci te wyniki.
Aby więc rozszerzyć wyszukiwanie o metadane wpisu, musimy zaktualizować uruchomione zapytanie tak, aby zawierało tabele metadanych wpisu. Ale jest w tym coś więcej. W szczególności, aby uzyskać największą elastyczność i najlepsze wrażenia użytkownika, będziesz chciał:
- wstawiaj fragmenty frazy, aby nie szukało czegoś dosłownie w artykule,
- i oczywiście prawidłowo obsłużyć przypadek, w którym nie wprowadzono żadnego hasła wyszukiwania, aby ekran Wszystkie posty nadal mógł być wyświetlany w standardowym formacie.
Oznacza to, że nie tylko musimy zmodyfikować zapytanie wyszukiwania, aby zawierało klucz meta i wartość meta, ale także musimy odpowiednio zmienić znaczenie całych fraz, aby móc użyć LIKE
operacji zamiast IN
operacji lub =
operacji.
Niektóre z rzeczy, które warto wiedzieć przed przeczytaniem reszty tego artykułu, to:
- WP_Query
- The posts_where haczyk
- Hak pre_get_posts _
- Wyrażenia regularne z preg_replace
- Funkcje pomocnicze WordPress, a mianowicie esc_sql.
Ostatecznie będziemy potrzebować dwóch hooków z dwoma niestandardowymi funkcjami. A ponieważ nie mogę podać pełnego przykładu tego, jak to może wyglądać w twoim przypadku użycia, kod musi być nieco uogólniony.
Podłączanie do wyszukiwania
W poniższym skrócie zobaczysz trzy rzeczy:
- Weryfikacja, że użytkownik znajduje się w obszarze administracyjnym i znajduje się na stronie edycji.
- Użytkownik wprowadził wyszukiwanie.
- Wyszukiwana fraza została przekonwertowana na tablicę, zmieniona i dodana do właściwości meta zapytania wystąpienia WP_Query.
Zakładając, że wszystkie powyższe są prawdziwe, spowoduje to zaktualizowanie zapytania uruchomionego w bazie danych WordPress przed wyrenderowaniem następnej strony, tak aby wyniki zawierały informacje o metadanych.
Aktualizacja klauzuli WHERE
Zanim jednak skończymy, musimy również upewnić się, że zaktualizowaliśmy uruchomione zapytanie.
Domyślnie zapytanie jest budowane przy użyciu AND
operacji, co uniemożliwia nam poprawne przeglądanie tytułów postów, fragmentów, treści i metadanych; jednak zapytanie musi zostać zaktualizowane, aby używało OR
operacji.
Dosłownie oznacza to, że będzie wyglądać w tytule, treści, fragmencie lub metadanych.
Zdecydowałem się użyć wyrażenia regularnego w mojej implementacji, ale Twoja implementacja może działać z zastępowaniem podciągów. W związku z tym jest trochę skomentowane, aby zapewnić największą elastyczność.
To aktualizuje WHERE
klauzulę, która jest uruchamiana w celu zakończenia pracy ustawionej w początkowej części artykułu, w której dodajemy metadane.
Są inne sposoby
Zwróć uwagę, że istnieje kilka niezwykle elastycznych sposobów pracy z WP_Query, aby uzyskać potrzebne wyniki. Twoja implementacja będzie się różnić w zależności od tego, co robisz.
Rozważ więc ten jeden z wielu sposobów, które można wykorzystać; wiedz jednak, że jeśli masz:
- jeden klucz,
- wartość (lub wartość, którą można podzielić na tablicę),
- i chcesz wyszukiwać metadane obok tradycyjnej treści postu
Wtedy to zadziała.