
⌨️ Jak dodać rozwijaną listę autorów na ekranie «Wszystkie wpisy» w WordPress
Standardowy filtr „Moje" na ekranie „Wszystkie wiadomości" w WordPress pokazuje wpisy tylko bieżącego użytkownika. Działa to, dopóki jest Pan/Pani jedynym autorem. Gdy jednak nad witryną pracuje trzech redaktorów, pięciu autorów i para zaproszonych ekspertów, znalezienie, kto co napisał, zamienia się w przewijanie nieskończonej tabeli.
Domyślny interfejs WordPress nie udostępnia listy rozwijanej autorów obok filtrów daty i kategorii. Deweloperzy świadomie ograniczyli ten ekran: zakłada się, że administratorowi wystarczy filtr „Moje". W praktyce jest to katastrofalnie mało.
Listę rozwijaną autorów można dodać bez wtyczki, jednym czystym fragmentem kodu w PHP. Kod podpina się pod natywne hooki panelu administracyjnego i nie koliduje z innymi filtrami, a lista rozwijana autora działa w połączeniu z domyślnym przyciskiem „Filtruj".
💡 Szybki przegląd:
- Rejestrujemy hook
admin_init: kod działa tylko w panelu administracyjnym i nie dotyka frontendu - Wyświetlamy
wp_dropdown_users()przezrestrict_manage_posts: selektor pojawia się w pasku filtrów obok daty i kategorii - Ograniczamy zakres przez
get_current_screen(): tylko wpisy i strony, CPT nie są objęte - Wybrany autor jest zapamiętywany przez
get_query_var('author')i działa łącznie z pozostałymi filtrami
Jak to działa pod maską
WordPress renderuje filtry na ekranach list przez hook restrict_manage_posts. Uruchamia się on tuż przed przyciskiem „Filtruj" w tabeli wpisów i stron. Wszystko, co zostanie wyprowadzone wewnątrz tego hooka, staje się częścią paska filtrowania, podobnie jak systemowe listy rozwijane dat i kategorii.
Funkcja wp_dropdown_users() to standardowe API WordPress do generowania selektora HTML z użytkownikami. Przyjmuje tablicę argumentów: listę użytkowników, wartość domyślną, klasę CSS i zwraca gotowy element <select>. Żadnego ręcznego kodowania układu ani bezpośrednich zapytań do bazy danych.
Połączenie tych dwóch narzędzi daje natywny interfejs, który niczym nie różni się od wbudowanych filtrów WordPress.
Kod: dodajemy listę rozwijaną autorów
Proszę wstawić fragment kodu do pliku functions.php aktywnego motywu lub przez wtyczkę do fragmentów kodu (na przykład Code Snippets). Kod rejestruje hook na zdarzenie admin_init i wyświetla selektor autorów na ekranach wpisów i stron.
1 add_action('admin_init', 'tsd_author_dropdown_init'); 2 function tsd_author_dropdown_init() { 3 add_action('restrict_manage_posts', 'tsd_author_dropdown'); 4 } 5 function tsd_author_dropdown() { 6 if ($GLOBALS['pagenow'] !== 'edit.php') { 7 return; 8 } 9 $screen = get_current_screen(); 10 if (empty($screen) 11 || ($screen->id !== 'edit-page' && $screen->id !== 'edit-post') 12 ) { 13 return; 14 } 15 wp_dropdown_users(array( 16 'show_option_all' => 'All Authors', 17 'selected' => get_query_var('author', 0), 18 'name' => 'author' 19 )); 20 }
Co robi każda część:
admin_init uruchamia rejestrację tylko w panelu administracyjnym. Frontend nie jest dotknięty, nie ma zbędnego obciążenia.
restrict_manage_posts wyświetla selektor w pasku filtrów, dokładnie tam, gdzie znajdują się filtry daty i kategorii. Lista rozwijana pojawia się na ekranach zarówno wpisów, jak i stron.
$GLOBALS['pagenow'] sprawdza, czy jesteśmy na stronie listy wpisów (edit.php). Jeśli użytkownik wszedł w ustawienia lub edycję konkretnego wpisu, kod po cichu kończy działanie.
get_current_screen() precyzuje typ treści. Fragment kodu działa tylko dla standardowych post i page, pomijając niestandardowe typy wpisów (cpt). To świadome ograniczenie: większość CPT z zewnętrznych wtyczek nie używa autorów do rozgraniczania treści.
wp_dropdown_users() generuje selektor HTML. Argument 'show_option_all' ustawia tekst opcji „pokaż wszystkich autorów", 'selected' przez get_query_var('author') zapamiętuje wybranego użytkownika po filtrowaniu, a 'name' => 'author' gwarantuje, że WordPress rozpozna parametr jako filtr autora i przetworzy go standardowym zapytaniem.

Po wstawieniu kodu lista rozwijana pojawia się na ekranach „Wszystkie wpisy" i „Wszystkie strony" obok standardowych filtrów. Przycisk „Filtruj" działa jak zwykle, można jednocześnie filtrować według autora, daty i kategorii, a WordPress poprawnie przetnie warunki.
Dostrajanie: co można zmienić
Fragment kodu jest celowo minimalny, ale wp_dropdown_users() obsługuje dziesiątki parametrów, pod Pana/Pani scenariusz można dostosować prawie wszystko.
Zmiana tekstu „All Authors". Proszę zastąpić 'show_option_all' własnym wariantem, na przykład 'Все авторы' lub 'Любой автор'.
Wykluczenie konkretnych użytkowników. Parametr 'exclude' przyjmuje tablicę ID. Przydatne, jeśli wśród użytkowników są konta systemowe, które nie powinny pojawiać się na liście:
1 'exclude' => array(1, 15, 23),
Pokazanie tylko określonych ról. Parametr 'role__in' filtruje użytkowników według ról. Na przykład tylko autorzy i redaktorzy:
1 'role__in' => array('author', 'editor'),
Sortowanie niealfabetyczne. Domyślnie 'orderby' => 'display_name'. Można zastąpić przez 'ID', 'user_login' lub 'post_count', ostatnia opcja pokaże najaktywniejszych autorów na górze.
Dodanie do innych typów wpisów. Proszę usunąć sprawdzenie $screen->id, a lista rozwijana pojawi się na wszystkich ekranach edit.php, w tym niestandardowych typów. Lub dodać konkretne CPT do warunku:
1 $allowed = array('edit-post', 'edit-page', 'edit-product'); 2 if (!in_array($screen->id, $allowed, true)) { 3 return; 4 }
⁉️🤔 Często zadawane pytania
Czy fragment kodu działa z Gutenberg i Classic Editor jednocześnie?
Tak. Kod nie dotyka edytora, modyfikuje tylko listy administracyjne, które nie zależą od wybranego edytora. Fragment działa tak samo na Gutenbergu, Classic Editorze i każdym page builderze. Sprawdzono na WordPress 6.4-6.7 z aktywnym Gutenbergiem i bez niego. Hook
restrict_manage_postsistnieje od wersji 2.1 i nie zmieniał się pod względem kompatybilności, kod będzie działał na każdej nowoczesnej wersji WordPress.
Czy trzeba czyścić pamięć podręczną po wstawieniu kodu?
Nie. Hooki WordPress są rejestrowane w locie przy każdym żądaniu do panelu administracyjnego. Wystarczy odświeżyć stronę z listą wpisów. Jeśli korzysta Pan/Pani z pamięci podręcznej serwera (Redis, Varnish), nie wpływa ona na panel administracyjny, który domyślnie jest wykluczony z buforowania.
Czy można dodać listę rozwijaną autorów bez dostępu do functions.php?
Tak, przez wtyczkę do fragmentów kodu. Odpowiedni będzie darmowy Code Snippets, WPCode lub FluentSnippets. Proszę wstawić kod jako fragment PHP z autostartem, a zadziała tak samo, jak w
functions.php. Zaletą menedżera fragmentów jest to, że błąd w kodzie nie wyłączy witryny, wtyczka przechwyci błąd krytyczny i wyłączy fragment.
Dlaczego lista rozwijana nie pojawia się na ekranie niestandardowego typu wpisów?
Fragment jest celowo ograniczony do ekranów
edit-postiedit-page. Aby dodać CPT, proszę rozszerzyć warunek w sprawdzeniu$screen->id(patrz sekcja „Dostrajanie"). Proszę zwrócić uwagę: dla CPT zarejestrowanych bez obsługi autorów ('supports' => array('author')), filtrowanie według autora nie będzie działać nawet przy obecności listy rozwijanej.
Czy fragment kodu koliduje z wtyczkami typu Admin Columns lub Adminimize?
Nie. Te wtyczki działają na innych hookach i modyfikują kolumny tabeli, a nie pasek filtrów.
restrict_manage_postsdodaje selektor do przycisku „Filtruj", w strefie, której wtyczki kolumn nie dotykają. Przez trzy lata użytkowania na witrynach z wieloma autorami nie odnotowano konfliktów.
Czy warto dodać listę rozwijaną autorów na Pana/Pani witrynę
Jeśli na witrynie publikuje więcej niż dwie osoby, zdecydowanie tak. Filtr „Moje" pokazuje wpisy bieżącego użytkownika, ale nie pozwala przełączyć się na artykuły kolegi. Lista rozwijana autorów zamyka tę lukę bez wtyczek i bez obciążenia bazy danych, wp_dropdown_users() wykonuje jedno zapytanie przez get_users(), które WordPress buforuje.
Dla solowego bloga filtr nie ma sensu, jest Pan/Pani i tak jedynym autorem. Ale gdy tylko pojawi się drugi, oszczędność czasu dzięki natychmiastowemu filtrowaniu zwraca trzy minuty poświęcone na wstawienie kodu.
Proszę skopiować fragment do functions.php lub przez Code Snippets, odświeżyć stronę listy wpisów i sprawdzić filtrowanie według autora w połączeniu z filtrem daty. Jeśli trzeba dostosować do własnej struktury ról i typów wpisów, parametry role__in, exclude i orderby dają pełną kontrolę nad zawartością listy bez dodatkowych wtyczek.



