Oto mój kod
$my_wp_query = new WP_Query();
$all_wp_pages = $my_wp_query->query(array('post_type' => 'page','post_parent'=>$parid,'orderby'=>'title','order'=>'ASC' ));
Wyświetla tylko strony podrzędne pierwszego poziomu. Potrzebuję całej podstrony, podstrony podrzędnej ... i wszystkich. Szukałem rozwiązania i mogę pobrać wszystkie podstrony za pomocą get_pages i wp_list_pages.
Ale naprawdę muszę posortować zamówienie według niestandardowej wartości meta post. Więc muszę użyć niestandardowego zapytania.
proszę pomóż. Dzięki
wp-query
query-posts
query
phpuser
źródło
źródło
Odpowiedzi:
Dlaczego nie po prostu użyć
get_pages()
?na przykład
Ale jeśli naprawdę musi to być
WP_Query()
obiekt, użyj podobnej metody:źródło
WP_Query()
?Problem
Problem z chwytaniem to „Jak zrobić X?” To nie jest jednoetapowe działanie, to wieloetapowy proces i należy go rozdzielić.
Nie musisz tego robić:
Musisz to zrobić:
Ogólne rozwiązanie
Tak więc, aby zrozumieć, jak to robić w nieskończoność, dopóki nie osiągniesz końca, bez twardego kodowania, musisz zrozumieć funkcje rekurencyjne.
na przykład
Zastosowanie rekurencji do tego problemu w celu rozwiązania
Więc twój rodzic jest
$parid
, a twoja meta post ma klucz$metakey
.Przekazujemy go do funkcji, aby złapać swoje dzieci.
Następnie posortujemy tablicę $ dzieci, klucze będą identyfikatorami postów, a wartości będą meta wartościami.
i pozwala zdefiniować funkcję jako:
Daje to tablicę identyfikatorów postów i wartości, uporządkowanych od najniższej do najwyższej. Możesz użyć innych funkcji sortowania PHP, aby to zrobić od najwyższej do najniższej.
Co teraz z dziećmi dla dzieci?
W środku naszej pętli musimy wykonać połączenie rekurencyjne, przekazując dziecko, a nie identyfikator rodzica.
Więc to:
Staje się to:
Dzięki tej modyfikacji funkcja pobiera teraz dzieci, dzieci dzieci, dzieci dzieci ..... itd
Na koniec możesz przyciąć wartości z tablicy, aby uzyskać takie identyfikatory:
Korzystając z tej strategii, możesz zastąpić wartość klucza meta dowolną inną metryką lub użyć funkcji rekurencyjnych na inne sposoby.
Ponieważ pełny kod wymaga tylko kilku sekund podstawowego zrozumienia i szybkiego wklejenia, nie obrażę twojej inteligencji blokiem wklejania pełnego kodu.
Zalety
Problemy, które napotkasz
Moja rekomendacja
Polecam albo spłaszczyć hierarchię stron, albo zastosować taksonomię. Np. Jeśli oceniasz posty, zastosuj taksonomię oceny strony z terminami 1,2,3,4 i 5 itd. W ten sposób otrzymasz post z pudełka.
Możesz też użyć menu nawigacji i całkowicie ominąć ten problem
źródło
Rekurencyjnie pobierz wszystkie bieżące podstrony
Oto podejście rekurencyjne przy użyciu
get_children
. Umieść w swoimfunctions.php
:Jak tego użyć
Użyj powyższej funkcji w dowolnym miejscu, na przykład w następujący sposób:
Ta funkcja obsługuje
args
parametr (ciąg zapytania lub tablicę) ioutput
typ (patrz wyżej).Możesz więc użyć go w następujący sposób:
A ze względu na zależność
get_children
=>get_posts
=>WP_Query
możesz używać meta wartości, jak początkowo zażądał autor tego pytania.źródło
Nie jestem pewien, czy właśnie tego szukasz, ale możesz użyć funkcji wp_list_pages i parametrów „child_of” i „depth”.
Więcej informacji znajduje się na następującej stronie Kodeksu: http://codex.wordpress.org/Function_Reference/wp_list_pages
źródło
Zrobiłem funkcję rekurencyjną, która pobiera wszystkie identyfikatory potomne strony nadrzędnej. Po uzyskaniu identyfikatorów wykonujemy zapytanie o strony i możemy uporządkować wyniki według meta klucza / wartości.
Jeśli chcesz posortować dzieci według meta klucza / wartości w sposób hierarchiczny, powinieneś przekazać meta_key i wartości order_by do WP_Query w funkcji _get_children_ids (zamiast końcowej WP_Query).
Jeśli nie, prostszą metodą uzyskania całego identyfikatora potomnego jest:
źródło
ROBIĘ TEN PRACĘ, TYLKO KOPIUJ WKLEJ KOD DO SWOJEJ STRONY.
źródło
$post -> ID
?), B) nie to, o co został poproszony, C) nie wyjaśniono zbyt dobrze.