Skip to content

Alt om WordPress, webutvikling — og mer til

⌨️ Slik legger du til en forfatternedtrekksmeny på Alle innlegg-skjermen i WordPress

⌨️ Slik legger du til en forfatternedtrekksmeny på Alle innlegg-skjermen i WordPress

Standardfilteret «Mine» på skjermbildet «Alle innlegg» i WordPress viser bare den aktuelle brukerens innlegg. Dette fungerer så lenge du er eneste forfatter. Men når tre redaktører, fem bidragsytere og et par gjesteeksperter jobber på nettstedet, blir det å finne ut hvem som skrev hva til å bla gjennom en endeløs tabell.

WordPress sitt opprinnelige grensesnitt har ingen forfatter-rullegardinmeny ved siden av dato- og kategorifiltrene. Utviklerne begrenset skjermbildet bevisst, ut fra en antakelse om at «Mine»-filteret er nok for administratorer. I praksis er dette katastrofalt utilstrekkelig.

Du kan legge til en forfatter-rullegardinmeny uten en utvidelse, ved hjelp av en enkel PHP-snutt. Koden kobler seg på opprinnelige admin-hooks og kommer ikke i konflikt med andre filtre. Forfatter-rullegardinmenyen fungerer sammen med den opprinnelige «Filtrer»-knappen.

💡 Rask oversikt:

  • Vi registrerer admin_init-hooken slik at koden bare fungerer i administrasjonspanelet og ikke påvirker frontend
  • Vi sender ut wp_dropdown_users() via restrict_manage_posts slik at valgmenyen vises i filterraden ved siden av dato og kategori
  • Vi begrenser omfanget via get_current_screen() til kun innlegg og sider, og lar egendefinerte innholdstyper være urørt
  • Den valgte forfatteren huskes via get_query_var('author') og fungerer sammen med andre filtre

Slik fungerer det under panseret

WordPress gjengir filtre på listeskjermer gjennom restrict_manage_posts-hooken. Den utløses rett før «Filtrer»-knappen i tabellen for innlegg og sider. Alt som sendes ut i denne hooken blir en del av filterraden, akkurat som systemets dato- og kategorirullegardinmenyer.

Funksjonen wp_dropdown_users() er WordPress sitt opprinnelige API for å generere en HTML-valgmeny med brukere. Den tar imot en rekke argumenter: brukerliste, standardverdi, CSS-klasse, og returnerer en ferdig <select>. Ingen manuell oppmerking eller direkte databasespørringer.

Ved å kombinere disse to verktøyene får du et opprinnelig grensesnitt som ikke kan skilles fra innebygde WordPress-filtre.

Kode: legge til forfatter-rullegardinmenyen

Sett inn snutten i det aktive temaets functions.php eller via en kodesnutt-utvidelse (for eksempel Code Snippets). Koden registrerer en hook på admin_init-hendelsen og sender ut forfatter-valgmenyen på skjermbildene for innlegg og sider.

1add_action('admin_init', 'tsd_author_dropdown_init');
2function tsd_author_dropdown_init() {
3 add_action('restrict_manage_posts', 'tsd_author_dropdown');
4}
5function tsd_author_dropdown() {
6 if ($GLOBALS['pagenow'] !== 'edit.php') {
7 return;
8 }
9 $screen = get_current_screen();
10 if (empty($screen)
11 || ($screen-&gt;id !== 'edit-page' && $screen-&gt;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}

Hva hver del gjør:

admin_init utløser registrering kun i administrasjonspanelet. Frontend påvirkes ikke, ingen ekstra belastning.

restrict_manage_posts sender ut valgmenyen i filterraden, akkurat der dato- og kategorifiltrene er plassert. Rullegardinmenyen vises på både innleggs- og sideskjermbildene.

$GLOBALS['pagenow'] sjekker at vi er på innleggslistesiden (edit.php). Hvis brukeren går til innstillinger eller redigerer et spesifikt innlegg, avsluttes koden lydløst.

get_current_screen() presiserer innholdstypen. Snutten fungerer bare for standard post og page, og hopper over egendefinerte innholdstyper (cpt). Dette er en bevisst begrensning: de fleste egendefinerte innholdstyper fra tredjepartsutvidelser bruker ikke forfattere for innholdsdifferensiering.

wp_dropdown_users() genererer HTML-valgmenyen. Argumentet 'show_option_all' setter teksten for «vis alle forfattere»-alternativet, 'selected' via get_query_var('author') husker den valgte brukeren etter filtrering, og 'name' => 'author' sørger for at WordPress gjenkjenner parameteren som et forfatterfilter og behandler det med en standard spørring.

Forfatter-nedtrekksmeny på Alle innlegg-skjermen i WordPress

Etter at du har satt inn koden, vises rullegardinmenyen på skjermbildene «Alle innlegg» og «Alle sider» ved siden av de opprinnelige filtrene. «Filtrer»-knappen fungerer som vanlig. Du kan filtrere samtidig etter forfatter, dato og kategori, og WordPress vil krysse betingelsene korrekt.

Finjustering: hva du kan endre

Snutten er bevisst minimal, men wp_dropdown_users() støtter dusinvis av parametere. Du kan tilpasse nesten alt til ditt scenario.

Endre teksten «Alle forfattere». Bytt ut 'show_option_all' med din egen variant, for eksempel 'Все авторы' eller 'Любой автор'.

Ekskluder spesifikke brukere. Parameteren 'exclude' tar imot en rekke med ID-er. Nyttig hvis det finnes systemkontoer blant brukerne som ikke bør vises i listen:

1'exclude' => array(1, 15, 23),

Vis bare bestemte roller. Parameteren 'role__in' filtrerer brukere etter roller. For eksempel bare forfattere og redaktører:

1'role__in' => array('author', 'editor'),

Sortering ikke alfabetisk. Som standard er 'orderby' => 'display_name'. Du kan erstatte den med 'ID', 'user_login' eller 'post_count'. Det siste alternativet vil vise de mest aktive forfatterne øverst.

Legg til for andre innholdstyper. Fjern $screen->id-sjekken, så vil rullegardinmenyen vises på alle edit.php-skjermer, inkludert egendefinerte innholdstyper. Eller legg til spesifikke egendefinerte innholdstyper i betingelsen:

1$allowed = array('edit-post', 'edit-page', 'edit-product');
2if (!in_array($screen->id, $allowed, true)) {
3 return;
4}

⁉️🤔 Ofte stilte spørsmål

Fungerer snutten med Gutenberg og Classic Editor samtidig?

Ja. Koden berører ikke redigeringsprogrammet, den endrer bare admin-lister, som ikke avhenger av det valgte redigeringsprogrammet. Snutten fungerer identisk på Gutenberg, Classic Editor og ethvert sidebyggerverktøy. Testet på WordPress 6.4-6.7 med Gutenberg aktivert og uten. restrict_manage_posts-hooken har eksistert siden versjon 2.1 og har ikke endret seg når det gjelder kompatibilitet. Koden vil fungere på enhver moderne versjon av WordPress.

Må jeg tømme hurtigbufferen etter å ha satt inn koden?

Nei. WordPress-hooks registreres i sanntid ved hver forespørsel til administrasjonspanelet. Bare oppdater innleggslistesiden. Hvis du bruker hurtigbufring på tjenersiden (Redis, Varnish), påvirker det ikke administrasjonspanelet, som er ekskludert fra hurtigbufring som standard.

Kan jeg legge til forfatter-rullegardinmenyen uten tilgang til functions.php?

Ja, via en kodesnutt-utvidelse. De gratis Code Snippets, WPCode eller FluentSnippets vil fungere. Sett inn koden som en PHP-snutt med autostart, så vil den fungere på samme måte som i functions.php. Fordelen med en snuttbehandler er at en kodefeil ikke vil krasje nettstedet. Utvidelsen vil fange opp den fatale feilen og deaktivere snutten.

Hvorfor vises ikke rullegardinmenyen på en skjerm for egendefinert innholdstype?

Snutten er bevisst begrenset til edit-post- og edit-page-skjermene. For å legge til egendefinert innholdstype, utvid betingelsen i $screen->id-sjekken (se «Finjustering»-delen). Merk: for egendefinerte innholdstyper registrert uten forfatterstøtte ('supports' => array('author')), vil ikke forfatterfiltrering fungere selv om rullegardinmenyen er til stede.

Kommer snutten i konflikt med utvidelser som Admin Columns eller Adminimize?

Nei. Disse utvidelsene fungerer på andre hooks og endrer tabellkolonner, ikke filterraden. restrict_manage_posts legger til valgmenyen før «Filtrer»-knappen, i en sone som kolonneutvidelser ikke berører. I løpet av tre års bruk på nettsteder med flere forfattere er det ikke registrert noen konflikter.

Er det verdt å legge til forfatter-rullegardinmenyen på nettstedet ditt

Hvis mer enn to personer publiserer på nettstedet, definitivt ja. «Mine»-filteret viser den aktuelle brukerens innlegg, men lar deg ikke bytte til en kollegas artikler. Forfatter-rullegardinmenyen lukker dette gapet uten utvidelser og uten databasebelastning. wp_dropdown_users() gjør én spørring via get_users(), som WordPress hurtigbufrer.

For en soloblogg gir filteret ingen mening. Du er uansett eneste forfatter. Men så snart en person til dukker opp, vil tiden du sparer ved umiddelbar filtrering veie opp for de tre minuttene det tar å sette inn koden.

Kopier snutten inn i functions.php eller via Code Snippets, oppdater innleggslistesiden, og sjekk forfatterfiltrering i kombinasjon med datofilteret. Hvis du trenger å tilpasse til din rollestruktur og dine innholdstyper, gir parameterne role__in, exclude og orderby full kontroll over listeinnholdet uten ekstra utvidelser.