Podczas edytowania jednego z moich niestandardowych typów postów chcę móc wyświetlić listę wszystkich wpisów według niestandardowego pola zamiast daty ich opublikowania (co w przypadku niestandardowego typu postu prawdopodobnie nie ma znaczenia). Dostałem wskazówki od komentarzy na blogu na temat niestandardowych typów postów, a autor powiedział, że jest to możliwe, a nawet to zrobił, abyś mógł kliknąć nazwy kolumn dla niestandardowego sortowania. Wspomniał o posts_orderby
funkcji, którą zauważyłem we własnych komentarzach, ale teraz mogę już znaleźć post na blogu. Jakieś sugestie? Widziałem jedno zastosowane rozwiązanie
add_action('wp', 'check_page');
I check_page
funkcja użyta add_filter
do zmiany zapytania, ale jestem prawie pewien, że zadziała tylko w plikach motywów, a nie w obszarze administracyjnym.
źródło
Odpowiedzi:
Jak zapewne można sobie wyobrazić z powodu braku odpowiedzi, rozwiązanie nie jest trywialne. To, co zrobiłem, to stworzenie dość samodzielnego przykładu, który zakłada niestandardowy typ posta „
movie
” i niestandardowy klucz pola „ Gatunek ”.Oświadczenie : działa z WP3.0, ale nie mogę być pewien, że będzie działać z wcześniejszymi wersjami.
Zasadniczo musisz zaczepić dwa (2) haki, aby działało, a kolejne dwa (2), aby uczynić je oczywistym i użytecznym.
Pierwszy haczyk to „
restrict_manage_posts
”, który pozwala emitować kod HTML<select>
w obszarze nad listą postów, w których filtry „ Akcje zbiorcze ” i „ Pokaż daty ”. Podany kod wygeneruje funkcję „ Sortuj według: ”, jak widać na tym fragmencie ekranu:(źródło: mikeschinkel.com )
Kod używa bezpośredniego SQL, ponieważ nie ma funkcji API WordPress, która zapewnia listę wszystkich meta_keys dla typów postów (brzmi jak przyszły bilet trac dla mnie ...) W każdym razie, oto kod. Pamiętaj, że pobiera typ postu
$_GET
i sprawdza, czy jest to zarówno prawidłowy typ postu,post_type_exists()
jak imovie
typ postu (te dwie kontrole są przesadzone, ale zrobiłem to, aby pokazać ci, jak jeśli nie chcesz, aby- kod typu postu.) Wreszcie używamsortby
parametru URL, ponieważ nie powoduje konfliktu z niczym innym w WordPress:Drugim wymaganym krokiem jest użycie
parse_query
haka, który jest wywoływany po tym, jak WordPress decyduje, które zapytanie powinno zostać uruchomione, ale przed uruchomieniem zapytania. Tutaj możemy ustawić wartościorderby
imeta_key
wquery_var
tablicy zapytania, które są udokumentowane w Kodeksie worderby
parametrze dlaquery_posts()
. Testujemy, aby upewnić się, że:is_admin()
),$pagenow=='edit.php'
),post_type
parametrem URL równymmovie
, isortby
parametrem URL i że nie przekazano jej wartości „ Brak ”Jeśli wszystkie te testy zakończą się pomyślnie, ustawiamy
query_vars
(zgodnie z opisem tutaj )meta_value
i nasząsortby
wartość dla „ Gatunek ”:I to wszystko, co musisz zrobić; nie są wymagane haki „
posts_order
” ani „wp
”! Oczywiście musisz zrobić więcej; musisz dodać na swojej stronie kilka kolumn, które zawierają listę postów, abyś mógł zobaczyć wartości, według których się sortuje, w przeciwnym razie użytkownicy bardzo się pomylą. Więc dodajmanage_{$post_type}_posts_columns
haczyk w tym przypadkumanage_movie_posts_columns
. Ten hak dostaje domyślną tablicę kolumn i dla uproszczenia właśnie zastąpiłem ją dwiema standardowymi kolumnami; pole wyboru (cb
) i nazwa posta (title
). (Możesz sprawdzić zaposts_columns
pomocą a,print_r()
aby zobaczyć, co jeszcze jest dostępne domyślnie.)Zdecydowałem się dodać „ Posortowane według: ”, gdy istnieje
sortby
parametr adresu URL, a gdy nie jest toNone
:Na koniec używamy
manage_pages_custom_column
haka do wyświetlania wartości, gdy jest słupek odpowiedniego typu słupka i prawdopodobnie z redundantnym testem dlais_admin()
i$pagenow=='edit.php'
. Gdy istniejesortby
parametr adresu URL, wyodrębniamy niestandardową wartość pola, która jest sortowana, wyświetlając ją na naszej liście. Oto jak to wygląda (pamiętaj, że to dane testowe, więc nie ma komentarzy z galerii orzechów w klasyfikacjach filmowych! :):(źródło: mikeschinkel.com )
A oto kod:
Zauważ, że to wybiera tylko pierwszy „ gatunek ” dla a
movie
, tj. Pierwszą meta_wartość w przypadku wielu wartości dla danego klucza. Ale z drugiej strony nie jestem pewien, jak inaczej by to działało!A dla tych, którzy nie wiedzą, gdzie umieścić ten kod, możesz umieścić go we wtyczce lub bardziej prawdopodobne dla początkującego w
functions.php
pliku w bieżącym motywie.Jak to pomaga.
źródło
'months_dropdown_results'
i'restrict_manage_posts'
. PS Upvotes są zawsze mile widziane. :)Począwszy od WordPress 3.1 (korzystam z wersji beta) kolumny można teraz sortować według ich tytułów.
Poniższy post szczegółowo opisuje ich wdrożenie.
http://scribu.net/wordpress/custom-sortable-columns.html
źródło
Oto proste rozwiązanie:
Po prostu zastąp swój TYP POCZTY i „twoje_standardowe_pole”
źródło