Tabele listy administratorów WordPress: Dodaj niestandardowe filtry

Opublikowany: 2021-02-26

Większość informacji na Twoich stronach i postach w WordPress Admin jest zorganizowana w tabele. Każdy, kto korzysta z WordPressa, będzie z nimi zaznajomiony. Działają dobrze i umożliwiają wykonanie „Szybkich edycji” określonych informacji o stronie lub poście, pokazują datę publikacji wpisu lub strony i wiele więcej. Ponadto mogłeś zauważyć, że możesz filtrować te tabele za pomocą menu rozwijanych, które pojawiają się u góry każdej tabeli.

Istnieje jednak tylko kilka filtrów. Co więc zrobić, jeśli chcesz filtrować wartość, która nie ma pola filtrowania w panelu administracyjnym? Na szczęście WordPress pozwala nam dodawać własne filtry. Zobaczymy jak.

Dlaczego warto korzystać z filtrów niestandardowych ?

Dlaczego więc miałbyś potrzebować niestandardowych filtrów do organizowania tabel administracyjnych w WordPressie? Wyobraźmy sobie, że mamy witrynę, która ma dużą liczbę autorów postów i wiele postów.

Hostuj swoją stronę internetową z Pressidium

60- DNIOWA GWARANCJA ZWROTU PIENIĘDZY

ZOBACZ NASZE PLANY

Możesz wyświetlić autora postów z tabeli Admin bez żadnych modyfikacji. Obecnie nie możesz sortować postów według autora. Oczywiście jest to znaczące ograniczenie, jeśli chcesz mieć możliwość łatwego przeglądania wszystkich postów napisanych przez konkretnego autora. Pomogłoby to, gdybyś mógł wyświetlić rozwijane menu wszystkich autorów postów, a następnie wybrać jednego z listy. To może naprawdę przyspieszyć.

Przyjrzyjmy się, jak moglibyśmy to zbudować.

Tworzenie naszego niestandardowego filtra

Aby pomóc Ci w tworzeniu własnych filtrów, WordPress udostępnia hooki restrict_manage_posts i pre_get_posts .

restrict_manage_posts jest wprowadzany w pliku wp-admin/includes/class-wp-posts-list-table.php około linii 557 i jest uruchamiany przed utworzeniem przycisku Filtruj nad listą tabeli administratorów.

Użyjemy funkcji niestandardowej i jak zwykle połączymy ją z hakiem restrict_manage_posts (zajrzyj tutaj, aby uzyskać więcej informacji na ten temat). Przejdź do głównego folderu aktywnego motywu i otwórz plik functions.php w swoim ulubionym edytorze. Na końcu zawartości pliku wstaw poniższy kod:

 function my_author_filter(){ $screen = get_current_screen(); global $post_type; if( $screen->id == 'edit-post' ){ $my_args = array( 'show_option_all' => 'All Authors', 'orderby' => 'display_name', 'order' => 'ASC', 'name' => 'authors_admin_filter', 'who' => 'authors', 'include_selected' => true ); if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); } wp_dropdown_users($my_args); } } add_action('restrict_manage_posts','my_author_filter');

Główny warunek, którego użyliśmy, to if( $screen->id == 'edit-post') . Tutaj użyliśmy funkcji WordPress get_current_screen() , która zwraca identyfikator ekranu, na którym się znajdujemy.

W tym przypadku identyfikator ekranu administratora to „edit-post”. Innymi słowy, upewniamy się, że jesteśmy na ekranie administrowania postami. Jeśli na przykład chcielibyśmy zastosować to do ekranu administratora stron, powinniśmy użyć if( $screen->id == 'edit-page' lub gdybyśmy pracowali nad niestandardowym typem posta, edit-{post_type} byłby poprawna instrukcja if.

Uwaga: aby zobaczyć, który identyfikator odpowiada każdemu ekranowi administratora, możesz sprawdzić oficjalną dokumentację dotyczącą odniesienia do ekranu administratora.

W poniższym kodzie sprawdzamy, czy autor jest już wybrany, a jeśli tak, stosujemy wybraną wartość:

 if(isset($_GET['authors_admin_filter'])){ $my_args['selected'] = (int)sanitize_text_field($_GET['authors_admin_filter']); }

Na koniec, korzystając z funkcji WordPress wp_dropdown_users , wygenerujemy rozwijaną listę autorów zgodnie z wcześniej zdefiniowanymi argumentami.

Następnie wybraliśmy tekst, który będzie wyświetlał opcję 'show-all' w argumencie show_option_all . Wybraliśmy ciąg „Wszyscy autorzy”. W argumencie „nazwa” wpisujemy żądaną nazwę listy rozwijanej. Użyjemy tej wartości później do filtrowania wyników listy postów.

W argumencie 'who' definiujemy, jakiego typu użytkowników należy zapytać, w naszym przypadku 'autorzy'. Za pomocą argumentu „include_selected” wybieramy, czy chcemy uwzględnić wybrany identyfikator użytkownika na liście rozwijanej.

W tym momencie, jeśli odświeżysz ekran postów administratora, powinieneś zobaczyć rozwijane menu autora obok innych wbudowanych menu filtrów.

Jeśli wybierzesz wartość i naciśniesz „Filtr”, wartość pozostanie wybrana po ponownym załadowaniu strony, ale wyniki pozostaną niezmienione. W następnym kroku wprowadzimy niezbędne zmiany, aby przefiltrować listę postów, aby wyświetlać tylko posty powiązane z wybranym autorem.

Filtrowanie wyników

Po raz kolejny filtr pre_get_posts wykona pracę. Zbadaliśmy ten haczyk w naszym artykule WordPress Admin Search: Extending the Results. Użyjemy tego ponownie, aby zmienić obiekt zmiennej zapytania, który jest tworzony na ekranie administracyjnym postu, przed faktycznym uruchomieniem zapytania. W pliku functions.php wstaw następujące wiersze:

 function my_author_filter_results($query){ $screen = get_current_screen(); global $post_type; if ( $screen->id == 'edit-post' ) { if(isset($_GET['authors_admin_filter'])){ $author_id = sanitize_text_field($_GET['authors_admin_filter']); if($author_id != 0){ $query->query_vars['author'] = $author_id; } } } } add_action('pre_get_posts','my_author_filter_results');

Główny warunek, jak poprzednio, jest również niezbędny, aby upewnić się, że jesteśmy na ekranie postów administratora.

$author_id = sanitize_text_field($_GET['authors_admin_filter']); przechowuje wybrany identyfikator autora w zmiennej $author_id . Następnie, jeśli identyfikator autora nie jest równy 0 (wybrano wszystkich autorów), przekazujemy wartość $author_id w parametrze autora zapytania.

I to wszystko. Teraz wyświetlane posty będą tylko tymi, które należą do wybranego autora/identyfikatora użytkownika.

Wniosek

Niestandardowe filtrowanie na ekranach administracyjnych może ułatwić wyszukiwanie treści przez użytkowników administracyjnych, co może być nieocenione, gdy masz dużo postów lub stron. Oczywiście jest to tylko jeden z możliwych sposobów użycia filtra w tabelach administracyjnych. Istnieje mnóstwo alternatywnych sposobów, w jakie może Ci się to przydać. Mamy nadzieję, że opisane tutaj techniki pomogą Ci w tworzeniu własnych filtrów.

Na przykład możesz utworzyć rozwijane menu filtrów z opcjami wyświetlania postów utworzonych w ciągu ostatnich 30 dni lub filtr, który sortuje posty według dowolnej taksonomii. Lista query_vars może pomóc w przeprowadzeniu burzy mózgów na możliwe opcje!.

Baw się dobrze dzięki tej wspaniałej funkcji!

Zobacz też

Tabele listy administratorów WordPress: Dodaj niestandardowe filtry
Pierwsze kroki z niestandardowymi polami WordPress