Skip to content

Allt om WordPress, webbutveckling — och mer därtill

⌨️ Så lägger du till en författarrullgardin på skärmen Alla inlägg i WordPress

⌨️ Så lägger du till en författarrullgardin på skärmen Alla inlägg i WordPress

Standardfiltret "Mina" på skärmen "Alla inlägg" i WordPress visar bara den aktuella användarens inlägg. Det fungerar så länge du är den enda författaren. Men när tre redaktörer, fem skribenter och ett par gästexperter jobbar på sajten blir det till att scrolla genom en oändlig tabell för att hitta vem som skrev vad.

WordPress ursprungliga gränssnitt har ingen rullgardinsmeny för författare bredvid datum- och kategorifiltren. Utvecklarna begränsade medvetet skärmen och antog att "Mina"-filtret räcker för administratörer. I praktiken är detta katastrofalt otillräckligt.

Du kan lägga till en författarrullgardin utan ett tillägg, med hjälp av ett rent PHP-kodstycke. Koden hakar i ursprungliga admin-hooks och krockar inte med andra filter. Författarrullgardinen fungerar tillsammans med den inbyggda "Filtrera"-knappen.

💡 Snabb översikt:

  • Vi registrerar hooken admin_init så att koden bara fungerar i adminpanelen och inte påverkar frontend
  • Vi matar ut wp_dropdown_users() via restrict_manage_posts så att select-rutan visas i filterraden bredvid datum och kategori
  • Vi begränsar omfattningen via get_current_screen() till enbart inlägg och sidor, och lämnar anpassade inläggstyper orörda
  • Den valda författaren sparas via get_query_var('author') och fungerar tillsammans med andra filter

Hur det fungerar under huven

WordPress renderar filter på listskärmar genom hooken restrict_manage_posts. Den körs precis före "Filtrera"-knappen i tabellen för inlägg och sidor. Allt som matas ut inuti denna hook blir en del av filterraden, precis som systemets datum- och kategorirullgardiner.

Funktionen wp_dropdown_users() är WordPress ursprungliga API för att generera en HTML-select med användare. Den tar en array med argument: användarlista, standardvärde, CSS-klass, och returnerar en färdig <select>. Ingen manuell markup eller direkta databasfrågor.

Genom att kombinera dessa två verktyg får du ett ursprungligt gränssnitt som inte går att skilja från inbyggda WordPress-filter.

Kod: lägga till författarrullgardinen

Infoga kodstycket i det aktiva temats functions.php eller via ett tillägg för kodsnuttar (till exempel Code Snippets). Koden registrerar en hook på admin_init-händelsen och matar ut författar-selecten på skärmarna för inlägg och sidor.

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}

Vad varje del gör:

admin_init utlöser registrering endast i adminpanelen. Frontend påverkas inte, ingen extra belastning.

restrict_manage_posts matar ut select-rutan i filterraden, precis där datum- och kategorifiltren finns. Rullgardinen visas på både inläggs- och sidskärmarna.

$GLOBALS['pagenow'] kontrollerar att vi är på inläggslistans sida (edit.php). Om användaren går till inställningar eller redigerar ett specifikt inlägg avslutas koden tyst.

get_current_screen() klargör innehållstypen. Kodsnutten fungerar bara för standard post och page, och hoppar över anpassade inläggstyper (cpt). Detta är en avsiktlig begränsning: de flesta CPT:er från tredjepartstillägg använder inte författare för innehållsuppdelning.

wp_dropdown_users() genererar HTML-selecten. Argumentet 'show_option_all' sätter texten för alternativet "visa alla författare", 'selected' via get_query_var('author') kommer ihåg den valda användaren efter filtrering, och 'name' => 'author' säkerställer att WordPress känner igen parametern som ett författarfilter och bearbetar den med en standardfråga.

Rullgardinsmeny för författare på skärmen Alla inlägg i WordPress

Efter att koden infogats visas rullgardinen på skärmarna "Alla inlägg" och "Alla sidor" bredvid de inbyggda filtren. "Filtrera"-knappen fungerar som vanligt. Du kan samtidigt filtrera på författare, datum och kategori, och WordPress kommer korrekt att kombinera villkoren.

Finjustering: vad du kan ändra

Kodsnutten är avsiktligt minimal, men wp_dropdown_users() stöder dussintals parametrar. Du kan anpassa nästan allt till ditt scenario.

Ändra texten "Alla författare". Ersätt 'show_option_all' med din egen variant, till exempel 'Все авторы' eller 'Любой автор'.

Exkludera specifika användare. Parametern 'exclude' tar en array med ID:n. Användbart om det finns systemkonton bland användare som inte ska visas i listan:

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

Visa endast vissa roller. Parametern 'role__in' filtrerar användare efter roller. Till exempel endast författare och redaktörer:

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

Sortering inte alfabetiskt. Som standard är 'orderby' => 'display_name'. Du kan ersätta det med 'ID', 'user_login' eller 'post_count'. Det sista alternativet visar de mest aktiva författarna överst.

Lägg till för andra inläggstyper. Ta bort kontrollen $screen->id så visas rullgardinen på alla edit.php-skärmar, inklusive anpassade inläggstyper. Eller lägg till specifika CPT:er i villkoret:

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

⁉️🤔 Vanliga frågor

Fungerar kodsnutten med Gutenberg och Classic Editor samtidigt?

Ja. Koden rör inte editorn, den modifierar bara adminlistor, som inte beror på den valda editorn. Kodsnutten fungerar identiskt på Gutenberg, Classic Editor och alla sidbyggare. Testad på WordPress 6.4-6.7 med Gutenberg aktivt och utan det. Hooken restrict_manage_posts har funnits sedan version 2.1 och har inte ändrats kompatibilitetsmässigt. Koden fungerar på alla moderna versioner av WordPress.

Behöver jag rensa cachen efter att jag infogat koden?

Nej. WordPress-hookar registreras i farten vid varje anrop till adminpanelen. Uppdatera bara inläggslistans sida. Om du använder server-side caching (Redis, Varnish) påverkar det inte adminpanelen, som är exkluderad från cachning som standard.

Kan jag lägga till författarrullgardinen utan tillgång till functions.php?

Ja, via ett tillägg för kodsnuttar. De kostnadsfria Code Snippets, WPCode eller FluentSnippets fungerar. Infoga koden som en PHP-snutt med autostart, så fungerar den likadant som i functions.php. Fördelen med en snutthanterare är att ett kodfel inte kraschar sajten. Tillägget fångar det fatala felet och inaktiverar snutten.

Varför visas inte rullgardinen på en skärm för anpassad inläggstyp?

Kodsnutten är avsiktligt begränsad till skärmarna edit-post och edit-page. För att lägga till CPT, utöka villkoret i kontrollen av $screen->id (se avsnittet "Finjustering"). Observera: för CPT:er som registrerats utan författarstöd ('supports' => array('author')) fungerar inte författarfiltrering även om rullgardinen finns där.

Krockar kodsnutten med tillägg som Admin Columns eller Adminimize?

Nej. Dessa tillägg arbetar på andra hookar och modifierar tabellkolumner, inte filterraden. restrict_manage_posts lägger till select-rutan före "Filtrera"-knappen, i en zon som kolumntillägg inte rör. Under tre års användning på sajter med flera författare har inga konflikter noterats.

Är det värt att lägga till författarrullgardinen på din sajt

Om fler än två personer publicerar på sajten, definitivt ja. "Mina"-filtret visar den aktuella användarens inlägg men låter dig inte byta till en kollegas artiklar. Författarrullgardinen täpper till denna lucka utan tillägg och utan databasbelastning. wp_dropdown_users() gör en fråga via get_users(), som WordPress cachar.

För en ensamblogg är filtret meningslöst. Du är ändå den enda författaren. Men så fort en andra person dyker upp betalar tiden du sparar på omedelbar filtrering för de tre minuter det tar att infoga koden.

Kopiera kodsnutten till functions.php eller via Code Snippets, uppdatera inläggslistans sida och kontrollera författarfiltrering tillsammans med datumfiltret. Om du behöver anpassa till din rollstruktur och dina inläggstyper ger parametrarna role__in, exclude och orderby full kontroll över listans innehåll utan ytterligare tillägg.