Nie, nie można zamawiać według taksonomii, ponieważ z pewnego rodzaju punktu widzenia nie ma to większego sensu.
Taksonomie to sposoby grupowania rzeczy. Tak więc sensem posiadania taksonomii na postach byłoby naprawdę określenie w tej taksonomii warunków, które są wspólne dla postów. Gdyby taksonomia zawierała terminy, które były używane tylko na jednym poście, to uczyniłoby to taksonomię trochę bezcelową. A jeśli warunki byłyby udostępniane tak, jak powinny, to ich uporządkowanie nie przyniosłoby nic szczególnie przydatnego.
W takiej sytuacji powinieneś używać post-meta. Możesz zamówić pocztą meta i jest ona unikalna dla każdego postu.
Edycja: Powiedział, że możesz zamówić według taksonomii, tworząc niestandardowe zapytanie SQL za pomocą filtra, po prostu nie możesz tego zrobić z niezmodyfikowanego WP_Query: http://scribu.net/wordpress/sortable-taxonomy-columns.html
Jeśli jednak musisz uciekać się do takich działań, struktura projektu danych jest w pierwszej kolejności niewłaściwa. „Warunki” w taksonomii nie są rzeczywistymi „danymi”. Same terminy nie mają żadnego wewnętrznego znaczenia, są jedynie etykietami dla określonej grupy, którą opisują. Jeśli traktujesz je jako znaczące dane, masz podstawową wadę projektową.
Taksonomie grupują rzeczy, przypisując im warunki. To zgrupowanie jest sednem taksonomii, warunki są po prostu ładnymi twarzami w grupowaniu. Jeśli masz znaczące metadane do przypisania do postu, powinieneś zamiast tego użyć do tego meta postu. I można to zamówić, ponieważ post meta używa zarówno kluczy, jak i wartości do przechowywania informacji. Dzięki taksonomii tak naprawdę przechowujesz tylko klucze, a ich wartości stanowią posty pogrupowane według tego terminu.
Na dłuższą metę będzie łatwiej, jeśli zastosujesz odpowiednie podejście. Chociaż nie mówię, że nie można zrobić czegoś dziwnego z taksonomią, po prostu utrudniasz sobie życie na dłuższą metę, niewłaściwie go wykorzystując.
Przyjęta odpowiedź na to pytanie jest niedopuszczalna. Nielogiczne jest zakładanie, że zamówienie podatkowe „nie ma sensu”. Odpowiedź, której udzielił, nie ma sensu.
Zastanów się nad typem postu w menu. Następnie masz niestandardowy podatek „FoodCategories”. Podatek FoodCategories obejmuje terminy „śniadanie”, „lunch” i „kolacja”. Jeśli prześlesz zapytanie przy użyciu parametru tax_query, masz teraz zestaw wyników ze wszystkimi warunkami, jednak są one uporządkowane według daty publikacji.
Aby uzyskać z nich prawidłową kolejność względem ich warunków, a następnie odpowiednio wyświetlić w interfejsie użytkownika, dzieląc posty na różne kategorie, musisz przejrzeć zestaw wyników, a następnie wysłać zapytanie do poszczególnych postów w zestaw wyników, aby znaleźć jego warunki i porównać je z bieżącym, przefiltrować do tablicy i kontynuować przez cały czas. Następnie musisz ponownie przejść przez nową tablicę do wyświetlenia. To nie jest produktywne.
Byłoby miło, gdyby WP miał opcję „tax__in” według opcji, tak jak robi to „post__in”, ale ponieważ tak nie jest, musisz albo wykonać powyższy absurdalny proces; samodzielnie dostosuj zapytanie za pomocą filtrów „posts_orderby” i „posts_join”, aby odpowiednio dostosować metodę orderby i dodać termin do zestawu wyników; lub musisz utworzyć nowe zapytanie dla każdego filtrowanego terminu w sekcjach HTML w odniesieniu do tych terminów.
Najbardziej wydajna byłaby zmiana ciągu zapytania za pomocą filtrów. Najłatwiej byłoby wykonać trzy oddzielne zapytania. Interfejs API WP powinien obsługiwać zamawianie według podatków lub dowolnych restrykcyjnych parametrów zapytań. Jeśli ograniczasz zapytanie w oparciu o określone warunki, istnieje duże prawdopodobieństwo, że wielu będzie musiało zamówić według tych samych warunków.
źródło
Tak, ale jest to dość zaangażowane ...
Dodaj do funkcji.php w swoim motywie:
Jest to frankensteined z niektórych znalezionych rzeczy i rzeczy, które zrobiłem sam. Wyjaśnienie jest dość trudne, ale sedno jest z tym uruchomionym, możesz umieścić? Orderby = (kwerenda taksonomiczna var) i order = ASC (lub DESC), a ona od razu zacznie!
źródło
add_filter('posts_clauses', 'orderby_tax_clauses', 10, 2 );
naadd_filter('posts_clauses', 'todo_tax_clauses', 10, 2 );
Dziękuję :)Spóźniam się tutaj na tę grę, ale istnieje prostszy sposób na zrobienie tego w WordPressy.
Zbuduj zapytanie podatkowe jak zwykle.
Skonfiguruj argumenty dla query_posts lub WP_Query
Przed wykonaniem wywołania query_posts / WP_Query, podłącz do filtra sortowania i zastąp go
nie zapomnij później usunąć filtra ...
to działa b / c tax_query tworzy dla ciebie złączenia itp. Musisz tylko złożyć zamówienie przez jedno z pól ze złączenia.
źródło
Cóż, chciałbym przedstawić moje doświadczenie w sortowaniu niestandardowych typów postów według kategorii / taksonomii.
SIEĆ
WALIZKA
Na stronach z listami kategorii archiwów klient chciał posortować posty
KROKI
Najpierw wychwytuję żądanie z niezmodyfikowanej kwerendy strony archiwum, która wyglądała tak:
Po drugie , edytowałem kod SQL w Sequel Pro w bazie danych, aby spełnić moje potrzeby. Wychodzę z tym (tak, prawdopodobnie można to poprawić: moja wiedza na temat MySQL nie jest wybitna):
Po trzecie , podłączyłem zapytanie do pliku functions.php za pomocą trzech filtrów: posts_fields, posts_join i posts_orderby
Kod w functions.php:
W końcu uruchomiłem filtry z haka pre_get_post zgodnie z pewnymi warunkami
Mam nadzieję, że to może komuś pomóc
źródło
Miałem bardzo podobny problem, z którym miałem do czynienia: chcę zamówić niestandardowe archiwum typu post (artykuły w czasopismach) według niestandardowej taksonomii (numery). Nigdy nie robię bezpośrednich zapytań SQL w mojej witrynie - i zazwyczaj jeśli podobają Ci się inne odpowiedzi - musisz przemyśleć swoje podejście.
PROBLEMY:
1) Wordpress nie pozwala na zamawianie taksonomii w żaden inteligentny sposób.
2) Wordpress po prostu nie pozwala
orderby
na stosowanie taksonomii po WP_Query typu post (jak to określił Otto).ROZWIĄZANIA:
1) Sortowanie taksonomii najlepiej obecnie realizować poprzez wtyczkę NE Zamówienie taksonomii niestandardowej . Pozwala zamówić taksonomię przez WYSIWYG, w
wp-admin
której nie zrobiłbym tego, ale nie znalazłem nic lepszego.Po skonfigurowaniu wtyczki otrzymasz coś podobnego do tego, co tutaj zrobiłem. Zanotuj opcję
Auto-sort Queries of this Taxonomy
- ustaw ją naCustom Order as Defined Above
; dzięki temu otrzymasz potrzebne zamówienie. Zrzut ekranu:2) Po zastosowaniu posortowanej taksonomii możesz teraz utworzyć serię wywołań WP_Query, które przebiegają przez każdy termin, skutecznie tworząc archiwum uporządkowane według taksonomii. Użyj,
get_terms()
aby utworzyć tablicę wszystkich warunków podatkowych, a następnie przeprowadźforeach
nad każdym z nich. Spowoduje to utworzenieWP_Query
elementu dla każdego terminu, który zwróci wszystkie posty dla danego terminu, skutecznie tworząc archiwum uporządkowane według terminu systematyki. Kod, aby to się stało:Podobne artykuły na tej stronie: Wyświetl wszystkie posty w niestandardowym typie wiadomości, pogrupowane według niestandardowej systematyki
źródło
Nie jestem pewien, dlaczego wszystkie rozwiązania tutaj są w nadmiarze. OK, to jest pół dekady temu, ale aktualnie uruchamiam następujący kod i działa:
To posortuje taksonomie CPT najpierw według taksonomii w kolejności alfabetycznej oraz w obrębie tych grup taksonomii również według kolejności alfabetycznej.
źródło
Oto rozwiązanie, którego użyłem w przypadku tego konkretnego problemu. To rozwiązanie jest przeznaczone do skrajnych przypadków, w których użycie
pre_get_posts
filtru nie jest możliwe i istnieje paginacja na zapytanie (np .: WooCommerce):Użyłem tego do stworzenia menu nawigacyjnego uporządkowanego według taksonomii, terminu i liczby postów na termin.
Jeśli chcesz po prostu posty, zmień zapytanie na
SELECT p.*
iGROUP BY p.ID
źródło
To jest jak zapytanie przed zapytaniem, ale nie będzie przeszkadzało, jeśli nie będziemy pytać o zbyt wiele postów ... Chodzi o to, aby zmodyfikować główne zapytanie, abyśmy nie musieli nawet przechodzić do szablonów i generować nowych zapytań i pętle ...
źródło