Jak wyświetlić kolumnę z dowolnym polem w poście i posortować według niej
Artykuł z gwiazdką, dla tych, którzy już pracują nad „Jak wyświetlić kolumnę z dowolnym polem w rekordzie i posortować według niej”
Często tworzymy niestandardowe pola i niestandardowe typy, które są potrzebne do programowania, ale czasami trzeba zadowolić klienta i skonfigurować wyświetlanie tego pola w osobnej kolumnie panelu administracyjnego, a nawet lepiej, jeśli klient może posortować tę kolumnę według wyświetleń i przeprowadzić własną analizę ruchu, bez przechodzenia do Google Analytics lub metryk.
Jak zrobić dodatkową kolumnę na liście postów WordPress i ustawić sortowanie według niej.
Aby rozpocząć, będziesz potrzebować filtru manage_{$ekran->ID}_sortable_column zamiast $screen->id będziesz musiał podać nazwę typu danych, poniżej zobaczysz przykład tego.
Filtr przekazuje tablicę z nazwami kolumn, które mają zostać posortowane jako klucze, i dane wyjściowe jako wartość. Parametr „orderby” określa, które kolumny zostaną posortowane. Możesz także wyłączyć sortowanie dla niektórych „niesortowalnych” kolumn.
Łatwiej będzie rozważyć wszystko na przykładzie tworzenia kolumny
1 2 3 4 5 6 7 8 9 10 11 12 |
// Add it to a column in WP-Admin add_filter('manage_posts_columns', 'posts_column_views'); add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2); function posts_column_views($defaults){ $defaults['post_views'] = __('Views'); return $defaults; } function posts_custom_column_views($column_name, $id){ if($column_name === 'post_views'){ echo getPostViews(get_the_ID()); } } |
Akcja zarządzaj_postami_niestandardowymi_kolumnami wywołuje funkcję posts_custom_column_views() który odpowiada za wypełnienie nowej kolumny danymi. W nazwie akcji możemy też zobaczyć określony typ danych manage_{typ_postu}_niestandardowa_kolumna. Widzimy, że w funkcji fill wywoływana jest inna funkcja, która przekazuje do niej dane getPostViews.().
Rozważ funkcję getPostViews()
1 2 3 4 5 6 7 8 9 10 11 |
// function to display number of posts. function getPostViews($postID){ $count_key = 'post_views_count'; $count = get_post_meta($postID, $count_key, true); if($count==''){ delete_post_meta($postID, $count_key); add_post_meta($postID, $count_key, '0'); return "0 View"; } return $count.' Views'; } |
Jeśli otrzymaliśmy pustą wartość w zmiennej $count, albo najprawdopodobniej po prostu nie istnieje. Jeśli zmienna jest pusta, następnie tworzymy niestandardowe pole dla bieżącego posta i umieszczamy w nim wartość pustą „0 View”..
Funkcja, która zwiększa współczynnik wyświetleń o 1 podczas przeglądania strony
Ponadto, aby dodać nowe wartości, dobrze byłoby umieścić kod szablonu, do pliku single.php, ponieważ to on jest odpowiedzialny za wywołanie funkcji w postach typu Post.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// function to count views. function setPostViews($postID) { $count_key = 'post_views_count'; $count = get_post_meta($postID, $count_key, true); if($count==''){ $count = 0; delete_post_meta($postID, $count_key); add_post_meta($postID, $count_key, '0'); }else{ $count++; update_post_meta($postID, $count_key, $count); } } |
Na początku funkcji deklarujemy zmienne, mówiono o wcześniej, więc co jest w nich przechowywane czytaj powyżej.
Ponadto, jeśli licznik nie zostanie utworzony, funkcja tworzy go i umieszcza pierwszą wartość w dowolnym polu licznika. Jeśli zmienna $count nie jest pusta, następnie bierzemy jego wartość i zwiększamy ją o 1.
Jeśli zrobisz to wszystko, będziesz mógł zobaczyć nową kolumnę w sekcji postów, w panelu administracyjnym z liczbą wyświetleń, zostanie wypełniony, jeśli post miał wyświetlenia.
Dodanie sortowania do kolumny w WordPress
Następnie przyjrzymy się przykładowi kodu dla tego przypadku., ale jeśli czytasz i rozumiesz, możesz dodać sortowanie dla dowolnej kolumny.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
add_filter( 'manage_edit-post_sortable_columns', 'my_sortable_post_column' ); function my_sortable_post_column( $columns ) { $columns['post_views'] = 'post_views'; //To make a column 'un-sortable' remove it from the array //unset($columns['date']); return $columns; } add_action( 'pre_get_posts', 'my_view_orderby' ); function my_view_orderby( $query ) { if( ! is_admin() ) return; $orderby = $query->get( 'orderby'); if( 'post_views' == $orderby ) { $query->set('meta_key','post_views_count'); $query->set('orderby','meta_value_num'); //$query->set('order', ASC); } } |
Filtr management_edit-post_sortable_columns wskazuje, że naszą kolumnę można posortować. Poniżej dodałem skomentowaną linię kodu., za pomocą którego możesz wręcz wyłączyć sortowanie żądanej linii.
w akcji pre_get_posts Wywołuję funkcję my_view_orderby(). Spójrzmy na to linijka po linijce.
- Najpierw sprawdzamy, czy użytkownik jest zalogowany.
- Jeśli użytkownik jest zalogowany, Podaję żądanie parametru „orderby”.
- Jeśli parametr „orderby” zwrócił nazwę naszej kolumny „post_views”, następnie wskazujemy, według którego dowolnego pola sortować i w którym momencie, że sortowanie powinno odbywać się według danych numerycznych.
Spróbuj i napisz o osiągnięciach w komentarzach, byłoby interesujące poznać twoją opinię na temat lekcji. Tak mi się to przydarzyło.
/*
- Podstawowy kurs projektowania stron internetowych;
- Układ stron;
- Ogólny kurs CMS WordPress oraz kontynuacja kursu dotyczącego tworzenia szablonów;
- Tworzenie stron internetowych w PHP.