Dostosowywanie tabel administracyjnych WordPress: Pierwsze kroki

Opublikowany: 2021-01-25

Każdy, kto korzysta z WordPressa, będzie zaznajomiony z tabelami administracyjnymi WordPressa, które pojawiają się we wszystkich podstawowych obszarach przeglądu, takich jak strony i posty. Ten sam format jest używany dla tego typu tabel w całym WordPressie, co oznacza, że ​​szybko stajesz się biegły w ich używaniu. Ale czy wiesz, że możesz modyfikować tabele administracyjne WordPress i zmieniać wyświetlane informacje lub dodawać własne dodatkowe kolumny?

W tym artykule wyjaśnimy, jak możesz to zrobić. Zacznijmy!

Haki

Aby wyświetlić dane z tabel administracyjnych, WordPress rozszerza wbudowaną WP_List_Table . Klasa WP_List_Table jest wprowadzona jako klasa prywatna w pliku wp-admin/includes/class-wp-list-table.php . Klasy prywatne są nazywane prywatnymi, ponieważ są przeznaczone tylko do użytku przez inne podstawowe klasy i funkcje, a nie przez programistów.

WordPress oferuje możliwość zmiany tabel administracyjnych. Aby manipulować kolumnami tabel, musisz użyć jednego z zaczepów filtrów, które WordPress zapewnia w pliku wp-admin/includes/class-wp-posts-list-table.php .

W tym pliku klasa WP_Posts_List_Table rozszerza klasę WP_List_Table i redefiniuje jej właściwości i metody w celu wypełnienia tabel administracyjnych zgodnie z typem wpisu. Możesz użyć haka manage_posts_columns dla tabeli postów, manage_pages_columns dla stron i manage_{$post_type}_posts_columns , jeśli chcesz manipulować kolumnami niestandardowej tabeli typu postów.

W tym pliku opisano również kolumny, które są używane domyślnie dla danych tabeli. Wokół linii 616 wprowadzono tablicę $posts_columns i dodano następujące kolumny:

  • Kolumna pola wyboru „cb” dla działań zbiorczych
  • Kolumna „tytuł” ​​posta
  • Kolumna „autor” dla autora posta
  • Kolumna „kategorie” dla kategorii, do których należy post
  • Kolumna „tagi” posta
  • Kolumna „komentarze”
  • Opublikowana kolumna „data”

Dodawanie niestandardowej kolumny do tabel administracyjnych

Dodanie niestandardowej kolumny do tabeli to coś, co programiści często muszą zrobić. Ponadto możliwość sortowania kolumn jest również bardzo przydatna podczas porządkowania treści. Pokażemy, jak zaimplementowana jest niestandardowa kolumna dla postów, stron i niestandardowych typów postów oraz jak możemy sprawić, by te niestandardowe kolumny można było sortować.

Tabele z listą postów

Jako przykład zobaczmy, jak możemy dodać kolumnę opisującą, kiedy post był ostatnio modyfikowany. Może to być naprawdę przydatna funkcja, zwłaszcza jeśli prowadzisz bloga z dużą ilością postów i chcesz mieć możliwość sprawdzenia, kiedy każdy z nich został ostatnio zaktualizowany. Zobaczmy, jak można to zrealizować.

Na początek musimy dodać nazwę nowej kolumny do tablicy nazw nagłówków kolumn. Przyjrzyjmy się bliżej wierszowi 663 pliku class-wp-posts-list-table.php .

 if ( 'page' === $post_type ) { $posts_columns = apply_filters( 'manage_pages_columns', $posts_columns ); } else { $posts_columns = apply_filters( 'manage_posts_columns', $posts_columns, $post_type ); }

W tej części kodu jest jasne, że powinniśmy użyć filtra manage_posts_columns (więcej informacji na ten temat znajdziesz tutaj), ponieważ chcemy dokonać zmian w tabeli z listą postów. Aby dodać nazwę kolumny do tablicy nagłówków kolumn, edytujemy plik functions.php naszego aktywnego motywu i wstawiamy ten fragment kodu:

 add_filter('manage_posts_columns','add_custom_columns'); function add_custom_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

Teraz, jeśli odświeżymy stronę z listą postów administracyjnych, zobaczymy dodatkową kolumnę. Na tym etapie w tej kolumnie nie będzie żadnych danych.

Wordpress admin tabele podstawowe dostosowywanie

W następnym kroku musimy powiedzieć WordPressowi, jaka treść będzie wyświetlana w kolumnie. W tym celu użyjemy akcji manage_posts_columns , która jest częścią funkcji publicznej column_default , która odpowiada za dane wyjściowe kolumn. Ta akcja odnosi się tylko do typów postów, które nie są hierarchiczne, takich jak posty, i można to zauważyć wokół wiersza 1258.

To, co faktycznie zrobimy tutaj, aby wypełnić zawartość, to uruchomienie instrukcji switch dla wszystkich niestandardowych kolumn, a ponieważ nazwa nagłówka to „last_modified” (tak jak zarejestrowaliśmy to w naszym początkowym kroku powyżej), powtórzymy naszą zawartość. Aby wyświetlić echo treści, użyjemy wbudowanej w WordPress funkcji get_post_field i zwrócimy żądane pole, którym może być dowolna kolumna z tabeli wp_posts w bazie danych. W przypadku niepowodzenia zwróci pusty ciąg.

Tak więc w pliku functions.php dodamy poniższy kod:

 add_action( 'manage_posts_custom_column','custom_columns_content', 10, 2 ); function custom_columns_content ( $column_id, $post_id ) { switch( $column_id ) { case 'last_modified': echo get_post_field('post_modified', $post_id); break; } }

Możesz potwierdzić, że to działa zgodnie z oczekiwaniami, ponownie odświeżając stronę.

Zwróć uwagę, że wartość „Ostatnia modyfikacja” dla drugiego posta, który nigdy nie był modyfikowany po jego pierwszej publikacji, jest taka sama jak data publikacji.

Tabela z listą stron

Aby zrobić to samo w tabeli z listą stron, dodajemy nazwę kolumny w ten sam sposób do tablicy nazw nagłówków kolumn. Tym razem różnica polega na tym, że użyjemy haka manage_pages_columns , jak pokazano poniżej:

 add_filter('manage_pages_columns','add_custom_page_columns'); function add_custom_page_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

Następnie dodamy zawartość za pomocą haka manage_pages_custom_column zamiast używanego wcześniej manage_posts_custom_column .

 add_action( 'manage_pages_custom_column','custom_columns_content', 10, 2 ); function custom_columns_content ( $column_id, $post_id ) { switch( $column_id ) { case 'last_modified': echo get_post_field('post_modified', $post_id); break; } }

Po wstawieniu powyższego kodu do naszego pliku functions.php możemy potwierdzić, że wszystko działa zgodnie z oczekiwaniami, odwiedzając tabelę Pages Admin w naszym obszarze administracyjnym, gdzie powinniśmy teraz zobaczyć kolumnę „Ostatnia modyfikacja”.

Niestandardowa tabela typów postów

Najpierw utworzymy niestandardowy typ posta, wstawiając poniższy kod do naszego pliku functions.php :

 function my_custom_post_type() { register_post_type( 'mycpt', array( 'labels' => array( 'name' => __( 'Custom Post Types' ), 'singular_name' => __( 'Custom Post Type' ) ), 'public' => true, 'has_archive' => true, 'rewrite' => array('slug' => 'mycpt'), 'show_in_rest' => true, ) ); } add_action( 'init', 'my_custom_post_type' );

W naszym menu administratora zauważymy, że został dodany nowy element o nazwie „Niestandardowy typ postu”.

Jeśli nie wiesz, jak tworzone są niestandardowe typy postów i chcesz dowiedzieć się więcej, możesz zapoznać się z naszym powiązanym artykułem na temat tworzenia niestandardowych typów postów.

Teraz mamy naszą konfigurację niestandardowego typu postu, która rozpocznie dodawanie nowego nagłówka kolumny z jej zawartością. Jak wspomniano wcześniej, w przypadku CPT (Custom Post Type) musimy użyć manage_{$post_type}_posts_columns , aby dodać naszą niestandardową kolumnę.

{$post_type} musi być identyczny z pierwszym argumentem funkcji register_post_type() , którym w tym przypadku jest 'mycpt'.

Tak więc fragment kodu, którego użyjemy w pliku functions.php do dodania nagłówka naszej kolumny, będzie wyglądał następująco:

 add_filter( 'manage_mycpt_posts_columns','add_mycpt_custom_columns'); function add_mycpt_custom_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

I do wypełnienia treści kolumny:

 add_action( 'manage_mycpt_posts_custom_column','fill_mycpt_posts_custom_column'); function fill_mycpt_posts_custom_column( $column_id, $post_id ) { switch( $column_id ) { case 'last_modified': echo get_post_field('post_modified', $post_id); break; } }

Wyniki powinny wyglądać mniej więcej tak:

Możliwość sortowania kolumn

Aby umożliwić sortowanie kolumny, musimy zdefiniować, które niestandardowe kolumny mogą być sortowane. Aby to osiągnąć, używamy manage_edit-{post-type}_sortable_columns z funkcją wywołania zwrotnego.

Tak więc w każdym przypadku typu post dodamy ten sam kod (oczywiście z unikalnymi nazwami funkcji).

W przypadku postów:

 add_filter( 'manage_edit-post_sortable_columns', 'sortable_post_columns' ); function sortable_post_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

Dla stron:

 add_filter( 'manage_edit-page_sortable_columns', 'sortable_page_columns' ); function sortable_page_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

Dla naszych niestandardowych postów typu (mycpt):

 add_filter( 'manage_edit-mycpt_sortable_columns', 'sortable_mycpt_posts_columns' ); function sortable_mycpt_posts_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; }

Teraz, jeśli odwiedzisz jedną z tabel administracyjnych, powinieneś zobaczyć, że nagłówek kolumny niestandardowej jest wyświetlany jako link. Jeśli to klikniesz, powinno to posortować według daty modyfikacji.

Wyłącz sortowanie dla kolumn

Aby usunąć funkcję sortowania dla kolumny, wystarczy usunąć ją z tablicy. Jeśli na przykład chcemy to zrobić dla kolumny 'data', dodamy dodatkowy wiersz kodu unset($columns['date']) . Wyglądałoby to tak:

W przypadku postów:

 add_filter( 'manage_edit-post_sortable_columns', 'sortable_post_columns' ); function sortable_post_columns( $columns ) { $columns['last_modified'] = 'Last modified'; unset($columns['date']); return $columns; }

Dla stron:

 add_filter( 'manage_edit-page_sortable_columns', 'sortable_page_columns' ); function sortable_page_columns( $columns ) { $columns['last_modified'] = 'Last modified'; unset($columns['date']); return $columns; }

Dla naszych niestandardowych postów typu (mycpt):

 add_filter( 'manage_edit-mycpt_sortable_columns', 'sortable_mycpt_posts_columns' ); function sortable_mycpt_posts_columns( $columns ) { $columns['last_modified'] = 'Last modified'; unset($columns['date']); return $columns; }

Teraz, jeśli odwiedzisz odpowiednią tabelę, zauważysz, że etykiety Data nie można już kliknąć (a zatem tej kolumny nie można już sortować).

W tym miejscu warto podkreślić szczegół, który często dezorientuje programistów WordPressa. Spójrz na poniższą tabelę, która pokazuje haki, których użyliśmy do postów, stron i niestandardowych postów.

Wordpress tablice administracyjne haki

Być może zauważyłeś, że haki, których używamy do sortowania kolumn, tak naprawdę nie są zgodne z wzorcem. Można oczekiwać, że będą to odpowiednio manage_posts_sortable_columns , manage_pages_sortable_columns i manage_mycpt_posts_sortable_columns . Niestety to tylko kwestia złego nazewnictwa. Niemniej jednak bardzo pomocne jest przechowywanie takiej tabeli podsumowującej jako łatwego przypomnienia.

Zmiana szerokości kolumn

Aby dostosować szerokość kolumny, użyjemy zaczepu akcji admin_head , który WordPress zapewnia i wykonuje w sekcji head dla wszystkich stron administracyjnych, które zawierają CSS lub JS.

Jako przykład spróbuj wpisać poniższy kod w pliku functions.php :

 add_action('admin_head', 'my_column_width'); function my_column_width() { echo '<style type="text/css">'; echo '.table-view-list.posts .column-title { width:120px !important; overflow:hidden }'; echo '</style>'; }

Tutaj użyliśmy klasy .column-title title kolumny tytułowej, która jest wspólna dla wszystkich tabel administracyjnych, oraz .table-view-list.posts . W połączeniu zapewniają one, że CSS zostanie zastosowany tylko w tabeli z listą postów.

Aby osiągnąć to samo dla naszych innych ekranów administracyjnych (takich jak Pages), zamiast tego użyjemy table-view-list.pages .

Wniosek

Istnieje wiele możliwości, jeśli chodzi o manipulowanie kolumnami WordPress Admin Tables. W przyszłych artykułach omówimy więcej przykładów i przedstawimy kilka przydatnych sztuczek, których możesz użyć, aby lepiej wykorzystać swoje tabele administracyjne!