W artykule:
- Tabele Administratora WordPress-Tło
- Anatomia klasy WP_List_Table
- Wtyczka niestandardowej tabeli List dla operacji Meta użytkownika
- Dziedziczenie klasy WP_List_Table
- Renderowanie tabeli listy
- Metody nadrzędne klasy WP_List_Table
- WP_List_Table:: get_columns()
- WP_List_Table::prepare_items()
- WP_List_Table:: column_default()
- WP_List_Table::column_cb()
- Sortowanie za pomocą WP_List_Table:: get_sortable_columns()
- Obsługa paginacji za pomocą WP_List_Table::set_pagination_args()
- WP_List_Table:: search_box()
- WP_List_Table::get_bulk_actions()
- Dodawanie łączy akcji wiersza do tabeli listy
- Wrapping Up
Tabele administracyjne WordPress lub tabele listowe są szeroko stosowane w obszarach administracyjnych do wyświetlania postów, Stron, Użytkowników itp.
Jeśli kiedykolwiek chciałeś dodać takie tabele listy z własnymi danymi do swojej wtyczki, WordPress zapewnia sprytny sposób, aby to zrobić za pomocą klasy WP_List_Table.
W tym artykule pokażę Ci, jak korzystać z interfejsu API WordPress, aby dodać podobne do WordPressa tabele administracyjne lub tabele list do ekranu administratora wtyczki.
Tabele listy WordPress są używane prawie wszędzie na pulpicie nawigacyjnym. Znajdziesz je używane do wyświetlania postów, Stron, Użytkowników, komentarzy itp. jak również w wielu popularnych wtyczkach. Z biegiem lat stały się de facto standardem wyświetlania informacji tabelarycznych w WordPress.
Uwaga: Ten artykuł jest przeznaczony dla średnio-zaawansowanych programistów WordPress. Będziesz potrzebował praktycznej wiedzy na temat WordPress, PHP i WordPress Plugin API przed przejściem do przodu. Jeśli nie jesteś pewien lub chcesz odświeżyć, polecam zapoznanie się z poniższymi:
- Rozwój WordPress dla początkujących: pierwsze kroki
- Rozwój WordPress dla początkujących: widżety i menu
- Rozwój WordPress dla początkujących: budowanie wtyczek
- Zaawansowany rozwój WordPress: Wprowadzenie do programowania obiektowego
W tym artykule zbudowałem niestandardową tabelę Administratora za pomocą wtyczki, która wykorzystuje konstrukcje obiektowe. Wtyczkę można pobrać STĄD, aby śledzić wraz z artykułem. Ale zanim przejdziemy do tego, zrozumiemy, co naprawdę robią tabele administracyjne.
Będę też używał terminów Tabele Admina
oraz Tabele Listy
zamiennie do reszty artykułu.
Tabele Administratora WordPress-Tło
Masz już interakcję z tabelą administratora podczas uzyskiwania dostępu do stron takich jak posty i Użytkownicy na pulpicie nawigacyjnym. Tabela administracyjna WordPress jest zaimplementowana przy użyciu WP_List_Table
Klasa zlokalizowana na / wp-admin / includes / class-wp-list-table.php
. Zapewnia niezbędną strukturę do wyświetlania informacji w sposób tabelaryczny, a także intuicyjnego manipulowania danymi. Oto przegląd tego, co wiąże się z typową tabelą administratora WordPress:

Zauważysz znane akcje zbiorcze, akcje wierszy z linkami najazdu, paginację i opcje ekranu, z których wszystkie są integralną częścią WordPress od tego czasu.
Podczas Opcje Ekranu
nie są bezpośrednio częścią WP_List_Table
, ściśle z nim współpracują. Pozwalają one kontrolować widoczność kolumn, a także stronicowanie poprzez ograniczenie informacji wyświetlanych na stronie.
Kiedy korzystać z tabeli Admin WordPress
Tylko dlatego, że API WordPress zapewnia sposób na budowanie natywnych tabel List nie oznacza, że trzeba go używać. Moim zdaniem dużym czynnikiem decydującym o korzystaniu z tabel administratora WordPress powinno być doświadczenie użytkownika. Z WP_List_Table
Klasa, WordPress dba o stylizację interfejsu tabeli dla ciebie. Znajomość pracy z tabelami Administratora (w całym WordPress) i natywny wygląd to elementy, które z pewnością pomogą użytkownikom w bezproblemowej interakcji z danymi tabel.
Anatomia klasy WP_List_Table
Od momentu powstania w wersji 3.1.0 WordPressa Klasa WP_List_Table zyskuje coraz większą popularność wśród programistów. WordPress Codex class reference dla WP_List_Table dostarcza wyczerpujących informacji na temat jego metod, właściwości i użycia.
Poniższa infografika przedstawia elementy składowe tabeli Administratora z odniesień do klasy.

Bardziej złożona tabela administracyjna zawierałaby również dodatkowe filtry rozwijane i łącza akcji nad tabelą, takie jak te używane do wyświetlania „opublikowanych postów” i „projektów”.
Teraz, gdy mamy uczciwe zrozumienie tabeli admina i WP_List_Table
klaso, wykorzystajmy tę wiedzę za pomocą niestandardowej wtyczki.
Wtyczka niestandardowej tabeli List dla operacji Meta użytkownika
Zanim przejdę do szczegółów implementacji tabel listowych, chcę krótko dotknąć niestandardowej wtyczki, którą przygotowałem do tego artykułu. Możesz go pobrać STĄD, aby śledzić. Polecam otworzyć go w odpowiednim edytorze i zainstalować na lokalny rozwój tylko konfiguracja WordPress.
Wtyczka jest oparta na moim własnym szablonie wtyczki, który jest forkiem oryginalnego projektu WordPress Plugin Boilerplate. Jest podobny do oryginalnego projektu pod wieloma względami, ale ma również wsparcie dla przestrzeni nazw i automatycznego ładowania. W ten sposób nie muszę mieć unikalnych prefiksów dla każdej klasy lub funkcji i nie kończę z wieloma include
oraz wymagaj
Oświadczenia. Jednak minimalna wymagana wersja PHP dla mojej wtyczki to 5.6.0.
Będziemy głównie pracować z plikami w następujących katalogach wtyczki:
inc / core/*
– dla podstawowej funkcjonalności wtyczkiinc / admin/*
– do wyświetlenia tabeli listy w obszarze administratorainc / biblioteki/*
– biblioteki dla wtyczki
Możesz ustawić wtyczkę w oparciu o własne preferencje dotyczące kodowania i układu. Wolę używać punktów początkowych Boilerplate, ponieważ są one jednymi z wielu najlepszych praktyk wymienionych w podręczniku wtyczek WordPress.
Cel
Wtyczka niestandardowa wyświetla wszystkich zarejestrowanych użytkowników WordPress we własnej tabeli administracyjnej z kontrolą nad opcjami ekranu, paginacją i linkami akcji wiersza w celu wykonywania operacji na metadanych użytkownika. Każda akcja wiersza prowadzi do strony wtyczki, aby wykonać te operacje.
Ten przypadek użycia z pewnością nie jest idealny, ponieważ mogłem po prostu dodać funkcjonalność do domyślnej strony użytkowników WordPress user_row_actions
; służy jednak do implementacji tabeli List od podstaw. Więc zaczynajmy.
Dziedziczenie klasy WP_List_Table
Aby utworzyć tabelę admina, musisz zdefiniować klasę potomną we wtyczce, która rozszerza rdzeń WP_List_Table
Klasa dostarczona przez WordPress. Tak więc, wśród pierwszych rzeczy, które powinieneś zrobić, jest skopiowanie pliku class-wp-list-table.php
pod / wp-admin / zawiera/
do Twojej wtyczki. Zdecydowanie polecam to, ponieważ klasa podstawowa została oznaczona jako prywatna, a więc wszelkie potencjalne zmiany w klasie lub jej metodach przez WordPress nie zepsują Twojej wtyczki.
W moim pluginie skopiowałem plik do inc / biblioteki
i dodał a Przestrzeń nazw
dyrektywa. Jeśli nie używasz przestrzeni nazw, musisz poprzedzić wszystko.

Następnie zdefiniowałem własną klasę potomną PHP User_List_Table
na inc / admin / class-user-list-table.php
która poszerzyła bazę WP_List_Table
klasa pod folderem inc / biblioteki
mojego pluginu.
Powyższy fragment jest implementacją barebone z dwiema metodami, które muszą zostać nadpisane. Oczywiście jest wiele do zrobienia w klasie potomnej, ale chciałem zacząć od renderowania pustej tabeli listy jako pierwszej.
Renderowanie tabeli listy
Na tym etapie możesz dodać konstruktor i inne metody do klasy potomnej; jednak wolę najpierw renderować pustą tabelę listy. Uważam, że to odgórne podejście jest dość skuteczne, ponieważ widzę wyniki tabeli listy na każdym etapie, dzięki czemu łatwiej jest usunąć wszelkie błędy, które mogą się wkradać.
Renderowanie tabeli List zazwyczaj wymaga trzech kroków:
- Tworzenie instancji klasy tabeli listy potomnej
- Zadzwoń
prepare_items()
– który obsługuje przygotowanie danych przed renderowaniem tabeli - Zadzwoń
display()
– czyli rzeczywiste odwzorowanie tabeli
Te dwie metody wprawiają koła w ruch. Spójrzmy więc, gdzie i jak te metody są wywoływane w wtyczce.
Dodawanie strony menu Wtyczki
Wtyczka ma podmenu strony w sekcji Użytkownicy, gdzie jest wyświetlana tabela niestandardowej listy użytkowników.

Aby zobaczyć, jak dodałem stronę podmenu użytkownika, spójrz na define_admin_hooks()
metoda w inc / core / class-init.php
oraz add_plugin_admin_menu()
metoda w inc / admin / class-admin.php
wtyczki.
Zwróć uwagę na wywołanie zwrotne load_user_list_table()
na add_users_page()
w istocie. Tutaj metody prepare_items()
oraz display()
są wywoływane.
Jednak uruchamiam podklasę w load_user_list_table_screen_options ()
zamiast tego, który jest wywołaniem zwrotnym dla Hooka strony. Wykonuje się tuż przed załadowaniem strony wtyczki, a utworzenie instancji my child class tutaj pozwoli WordPress automatycznie dodać kolumny tabeli listy w panelu Opcje ekranu. Na opcje ekranu
aby kontrolować paginację w tabeli listy są dodawane tutaj również.
Należy również pamiętać, że display()
musi być opakowany w formularz HTML, jeśli chcesz skorzystać z funkcji, takich jak akcje zbiorcze. Wolę nie mieszać HTML, dlatego użyłem include_once
dyrektywa do załadowania partials-wp-list-table-demo-display.php
gdzie metoda zostanie ostatecznie wywołana.
Weryfikacja konfiguracji tabeli list Barebone
Kiedy otworzyłem stronę wtyczki w menu użytkowników, WordPress zauważył, że żądana jest tabela listy, a ponieważ nie dostarczono do niej danych, renderowano ją z Komunikatem „nie znaleziono elementów”.

Zauważ, jak WordPress wypełnił HTML formularz
elementów oraz tabelę list w widoku inspekcja. To również automatycznie dodał Klasa
atrybuty kontrolujące stylizację w celu dostosowania do standardów interfejsu użytkownika WordPress. Przy prawidłowym renderowaniu tabeli spójrzmy na inne metody, aby uzupełnić tabelę listy użytkowników.
Uwaga: na tym etapie WordPress wygeneruje wiele ostrzeżeń w dzienniku debugowania z powodu niepełnej implementacji podklasy. Użyj wtyczki takiej jak programista
aby obserwować dziennik WordPress.
Metody nadrzędne klasy WP_List_Table
Kontynuując moje odgórne podejście, poszedłem do przodu i dodałem kolumny tabeli. Aby to zrobić, musisz nadpisać get_columns()
w podklasie.
WP_List_Table:: get_columns()
Metoda oczekuje tablicy zawierającej klucz-wartość
pary, gdzie kluczem jest kolumna ślimak
, a wartość to tekst tytułu kolumny w tabeli listy.
Zwróć uwagę na kolumnę cb
, która jest specjalną kolumną, która renderuje pola wyboru do użycia z akcjami zbiorczymi. Zmodyfikowałem również komunikat „nie znaleziono pozycji”, nadpisując no_items ()
metoda. Oto moja tabela po dodaniu szczegółów kolumny.

Przy dobrze ułożonej tabeli dodałem niezbędny kod do prepare_items()
aby wypełnić dane z bazy danych do tabeli listy.
WP_List_Table::prepare_items()
Musisz zapewnić własną realizację prepare_items()
do obsługi danych tabeli. Metoda powinna być jawnie wywołana tuż przed renderowaniem tabeli. Tak więc wszystkie operacje związane z danymi, takie jak pobieranie, sortowanie, paginacja, filtrowanie itp. należy postępować tutaj przed wyświetlaniem tabeli.
Aby załadować dane tabeli, zapytałem bazę danych WordPress w fetch_table_data()
i zapisał wynik w tablicy przed przypisaniem go do przedmioty
zmienna klasy nadrzędnej.
Nie będzie to jednak wystarczające do wyświetlenia danych w tabeli. Aby zakończyć wyświetlanie, musisz również dostarczyć implementacje specyficzne dla kolumn za pomocą column_*()
metody.
WP_List_Table:: column_default()
W metodzie get_columns()
powyżej podałem ślimaki kolumnowe dla każdej kolumny. Te ślimaki mogą być używane do identyfikacji poszczególnych metod kolumn. Chociaż dobrą praktyką jest dostarczanie metod specyficznych dla każdej kolumny, możesz również po prostu użyć column_default()
zamiast tego metoda. Na WP_List_Table
Klasa domyślnie do column_default()
gdy nie może znaleźć metody specyficznej dla kolumny.
To wyrenderowało kolumny i mogłem zobaczyć dane w mojej tabeli listy.

WP_List_Table::column_cb()
Jeśli chcesz użyć akcji zbiorczych do przetwarzania wierszy, musisz również dostarczyć implementację dla column_cb()
, co jest szczególnym przypadkiem metody specyficznej dla kolumny.
To wyrenderowało pola wyboru dla wszystkich wierszy w tabeli Moja lista. Wartość pola wyboru powinna być unikalna, taka jak user_login lub id, aby można było wyraźnie zidentyfikować rekord.
Następnie dodałem wsparcie dla sortowania i paginacji w tabeli listy.
Sortowanie za pomocą WP_List_Table:: get_sortable_columns()
Nadpisywanie get_sortable_columns()
spowoduje sortowanie podanych kolumn w tabeli List. Jednak kod do faktycznego sortowania danych musi być zapisany w prepare_items()
. W moim przykładzie wykonałem sortowanie w samym SQL podczas pobierania danych w fetch_table_data()
jak pokazano powyżej.
Gdy sortowanie jest wykonywane na kolumnie, jego odniesienie jest dostępne za pośrednictwem supergloabli $_GET ['orderby']
oraz $_GET ['zamówienie']
.

Obsługa paginacji za pomocą WP_List_Table::set_pagination_args()
Opcje ekranu, które dodałem wcześniej, miały już elementy sterujące ograniczające dane w tabeli. Aby połączyć je ze stołem, użyłem get_items_per_page()
oraz set_pagination_args()
aby ustawić argumenty paginacji w prepare_items()
.
Do renderowania podzbioru danych dla poszczególnych stron tabeli użyłem array_slice()
na mojej tablicy wyników przed jej renderowaniem.

Następnie dodałem pole wyszukiwania, akcje zbiorcze i akcje wiersza do mojej tabeli listy.
WP_List_Table:: search_box()
Aby dodać pole wyszukiwania, musisz zawinąć je w Formularz wraz z ukrytym polem, aby upewnić się, że zostanie przesłane na stronę wtyczki. Dodałem je w partials-wp-list-table-demo-display.php
tuż przed wyświetlaniem(). Obsługa danych do wyszukiwania odbywa się w prepare_items()
.

Po wykonaniu wyszukiwania klucz wyszukiwania będzie dostępny przez superglobal $_REQUEST ['s']
. W moim przykładzie manipulowałem tablicą wyników za pomocą array_filter
i klucz wyszukiwania.
WP_List_Table::get_bulk_actions()
Akcje zbiorcze są dodawane przez nadpisanie get_bulk_actions()
i musisz określić akcję w tablicy asocjacyjnej. Faktyczną obsługę działań należy przeprowadzić w prepare_items()
.
Po złożeniu akcji zbiorczej, dwie zmienne działanie
oraz działania2
będzie gotowe. Wartość będzie zależeć od której akcja masowa
złożyłeś wniosek, ten powyżej lub poniżej tabeli.

In My plugin, the handle_table_actions()
wywołanie metody w prepare_items()
dba o przetwarzanie działań użytkownika.
Po sprawdzeniu nonce załadowałem partials-wp-list-table-demo-bulk-download.php
pod inc / admin/views/
do obsługi akcji masowych.
Na koniec dodałem linki akcji wiersza tabeli.
Dodawanie łączy akcji wiersza do tabeli listy
Aby dodać łącza akcji wiersza, musisz podać implementację specyficzną dla kolumny tabeli, która powinna wyświetlać łącza akcji. W moim pluginie dodałem dwa linki akcji – Dodaj Meta
oraz Zobacz Meta
do kolumny user_login.
W moim przykładzie, gdy akcja wiersza jest wykonywana, identyfikator użytkownika, niestandardowe nonce i akcja są dostarczane jako część parametrów URL./ użytkownicyphp?page=NDS-wp-list-table-demo&action = view_usermeta&user_id = 11&_wpnonce=9c38dd6c2c
Służą one do obsługi akcji użytkownika w prepare_items()
. Obsługiwałem akcje wiersza w ten sam sposób handle_table_actions()
jak w przypadku akcji masowych.
Możesz zidentyfikować działanie, które jest realizowane za pomocą current_action()
i skierować użytkownika odpowiednio. Zobacz też partials-wp-list-table-demo-view-usermeta.php
pod inc / admin/views
aby zobaczyć, jak przetworzyłem żądanie dla akcji Meta View.
To jest to! Oto wypełniona lista.

Wrapping Up
Mam nadzieję, że ten artykuł okazał się przydatny. Oto kilka przykładów klasy WP_List_Table używanej w popularnych wtyczkach:
- WooCommerce
- Kalendarz Imprez
- Łatwe Pobieranie Cyfrowe
Tagi: