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:

wordpress admin table
Tabela Admina 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.

anatomy-wp-list-table-class
Bloki konstrukcyjne WP_List_Table

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 wtyczki
  • inc / admin/* – do wyświetlenia tabeli listy w obszarze administratora
  • inc / 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.

importing the wp-list-table class manually
Kopiowanie pliku klasy wp-list-table

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.

Ładowanie gist nuancedesignstudio/1a20f5773972973e11cf8d1cf7d02786

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.

user-menu for the list table
Strona Menu dla tabeli listy

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.

Ładowanie gist nuancedesignstudio/449e2abbdbc804ef22ac5a09a7c2a4b3

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ż.

Ładowanie gist nuancedesignstudio/1975a5725cb4978606f657dffba58ccf

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.

Ładowanie gist nuancedesignstudio / ff386ed565aee2039719f3353dd0e152

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”.

barebone-list-table-implementation
Tabela listy użytkowników barebone

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.

Ładowanie gist nuancedesignstudio / f92484ed8a2f1e7046b4fe350c0b87e6

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.

wp-list-table-get-columns method
Kolumny pobierane po nadpisaniu get_columns()

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.

Ładowanie gist nuancedesignstudio / baa43ea0882c5aeb6d5173053470e927

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.

Ładowanie gist nuancedesignstudio/32a33a50f39743617ae29f0aeaafbad1

To wyrenderowało kolumny i mogłem zobaczyć dane w mojej tabeli listy.

wp-list-table-display-column-data
Lista danych tabeli po dodaniu metody column_default ()

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.

Ładowanie gist nuancedesignstudio/112d1afec60fb6792753700750153852

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.

Ładowanie gist nuancedesignstudio/4a72ddc7d9b4ba34fb90f43b4e0dce53

Gdy sortowanie jest wykonywane na kolumnie, jego odniesienie jest dostępne za pośrednictwem supergloabli $_GET ['orderby'] oraz $_GET ['zamówienie'].

wp-list-table-sortable-columns
Definiowanie sortowalnych kolumn w tabeli List

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().

Ładowanie gist nuancedesignstudio/2f8b8dee424f82437d8e0ce88c6386d9

Do renderowania podzbioru danych dla poszczególnych stron tabeli użyłem array_slice() na mojej tablicy wyników przed jej renderowaniem.

wp-list-table-pagination
Dodawanie paginacji tabeli listy

Następnie dodałem pole wyszukiwania, akcje zbiorcze i akcje wiersza do mojej tabeli listy.

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().

Ładowanie gist nuancedesignstudio/095bd1c1dd8c0d64f908806d85a3f748
wp-list-table-search-data
Dodawanie pola wyszukiwania do tabeli listy

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.

Ładowanie gist nuancedesignstudio/6b77dc8ddf5d5567c9e0e65e3fd3e610

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().

Ładowanie gist nuancedesignstudio / be373a33f5b3d6078df0e8fb058b9276

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.

wp-list-table-bulk-actions
Akcje zbiorcze i akcje wierszy w tabeli listy

In My plugin, the handle_table_actions() wywołanie metody w prepare_items() dba o przetwarzanie działań użytkownika.

Ładowanie gist nuancedesignstudio / 9becb8b971b49d32744650622572507c

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.

Ładowanie gist nuancedesignstudio / d92c7b037b8a9496ed0b86beb1392e90

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.

Ładowanie gist nuancedesignstudio/5a488a8b057d63f2274a8f8aef682e2e

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.

custom-user-list-table
Niestandardowa tabela listy użytkowników zbudowana z klasy WP_List_Table

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
Czy korzystałeś z tablic listowych? Daj nam znać swoje doświadczenia w komentarzach poniżej.

Tagi:

You May Also Like

Jak naprawić nieprawidłowy błąd JSON w WordPress (Przewodnik dla początkujących)

W artykule: Co powoduje błąd „nieprawidłowa odpowiedź JSON” w WordPress?1. Sprawdź adresy…

Jak zmienić kolor linku w WordPress (poradnik dla początkujących)

W artykule: Dlaczego Linki Są Ważne?Jak dodawać linki w postach i stronach…

Jak naprawić błąd krytyczny w WordPress (krok po kroku)

W artykule: Co To jest błąd krytyczny w WordPress?Co powoduje krytyczny błąd…

Jak zainstalować WordPress lokalnie na komputerze Mac za pomocą MAMP

W artykule: Jak zainstalować MAMP na komputerze MacInstalacja WordPress na komputerze MacWypróbowanie…