Detta är en fyrdelad handledningsserie som täcker ämnet för WordPress-användare, roller och funktioner. Serien kommer att täcka arkitekturen och utformningen av användarroller i WordPress; markera de viktigaste funktionerna för att interagera med användare och hantera roller och funktioner; och i den sista handledningen kommer vi att bygga ett verkligt exempel som visar användbarheten av detta API.
I den här första delen kommer vi att gå igenom grunderna och de inre funktionerna i WordPress-användare, roller och kapacitetssystem. Inga funktioner eller kod kommer att omfattas av denna del. Så du kan hoppa till nästa om du bara är intresserad av att skriva kod som interagerar med det här systemet. Jag rekommenderar dock starkt att du först går igenom det här för att få en grundläggande idé om användare och roller i WordPress.
Efter version 2.0 introducerade WordPress ett nytt roller och kapacitetssystem som ersatte det äldre användarnivåsystemet. Det äldre systemet kommer inte att diskuteras. Det är nu helt avlägsnat (sedan version 3.0) och bör inte längre användas.
Det nya systemet är mer avancerat och flexibelt. Det är nu möjligt att skapa anpassade behörigheter och tilldela dem per användare. Den här uppdateringen kom till att ta itu med bristerna i den gamla modellen och göra det möjligt för utvecklare att bygga mer kraftfulla och anpassade plugins och teman.
WordPress håller användarnas data i två tabeller: wp_users
och wp_usermeta
(Jag antar under hela serien att ditt WordPress-setup använder standardvärdet wp_
prefix). Den andra tabellen är skapad för att utöka den första och möjliggör för utvecklare att bifoga ytterligare data till varje användare.
Om det bara fanns ett bord kan du antingen inte bifoga mer data till användare eller måste hålla all denna data serialiserad i en kolumnrad som inte är ganska bra för prestanda och skalbarhet. (Tänk på att det finns 50 plugins där var och en lägger till 2 eller 3 fler fält per användare.)
Nedan visas ett schema över de två tabellerna. Tabellerna är kopplade ihop med ett "ett till många" förhållande. Faktum är att du kan ha så många rader som du vill ha i wp_usermeta
med samma användar ID
(vilken är den främmande nyckeln för denna relation och representerar ID-kolumnen i wp_users
)
Om vi tittar på schemat för dessa två tabeller, kan vi avsluta det wp_users
används för att hålla en begränsad och ändlig mängd data om varje användare. Några av dem krävs och används mest av WordPress-kärnan, teman eller plugins som inloggning, lösenord, e-post och fint namn (även smeknamn). Men det är inte fallet för user_url
fält, till exempel. Detta fält kan passa in i wp_usermeta
bord eftersom det inte är nödvändigt.
Några obligatoriska fält är lagrade i wp_usermeta
som smeknamnet. Jo, faktiskt är jag bara medveten om den här. En viss viktig information som användarfunktioner, användarnivå och SSL-läge lagras emellertid i wp_usermeta
bord också. Detta gör det inte mindre viktigt än wp_users
bord (speciellt när behörigheter och säkerhet är ett stort problem).
Med detta sagt bör du vara försiktig när du arbetar med båda tabellerna. Jag rekommenderar att du håller fast med WordPress-funktionerna för att interagera med användarna och kapacitetssystemet.
Som alla andra CMS har WordPress ett användarbehörighetssystem för att ställa in och begränsa behörigheter för varje användare. I det här avsnittet kommer jag att förklara konceptet bakom roller och funktioner i WordPress. Så om du har kämpat med Codexförklaringen hoppas jag att den här gör det tydligare när jag närmar sig konceptet annorlunda.
Glöm roller. Låt oss anta några minuter att de inte existerar.
Låt oss tänka på följande scenario: Du har en WordPress-blogg som du nyligen har ställt in, och du är administratören. (Så du har all möjlig makt där ute.) Du bestämde dig för att lägga till en ny användare på din blogg för att bidra med några blogginlägg. Du trodde också att det skulle vara rättvist att låta honom kommentera och anpassa sitt visningsnamn.
Nedan följer en bild av vår användare med de funktioner du tilldelade honom.
Så det är så enkelt som det. Du tilldelar användare möjligheter. Du kan namnge dessa funktioner. Till exempel kan du namnge "write_new_post" som slug för att skriva ett nytt inlägg.
I din blogg har du en lista över funktioner där alla ger en speciell och begränsad kraft till de användare som har dem. Varje användare kan ha ett begränsat antal funktioner. En användare som har alla möjligheter är en administratör eftersom han kan göra ganska mycket allt. Tänk på det som ett tillståndssystem, och funktioner är behörigheter som du ger till användare.
Men varför är funktionerna viktiga? Tja, du är den som är ansvarig för det. Om du till exempel bygger ditt eget plugin (eller tema) kan du skapa din egen "access_control_panel
"kapacitet och tilldela det till ett antal användare.
När en användare begär din "Kontrollpanel", bör du kontrollera att användaren har "access_control_panel
"-funktionen innan du visar kontrollpanelsidan. Du kan också kontrollera om det finns kapacitet innan du kör ett visst stycke kod för att säkerställa att användaren har de behörigheter som krävs.
WordPress levereras med ett standard antal funktioner som är nödvändiga för dess funktion. Du kan också använda dessa funktioner, men var försiktig så att du inte tar bort dem. Du kan säkert göra dina egna och anpassade funktioner.
Så nu vet vi vilka möjligheter som finns. Låt oss tänka på ett annat scenario där du har en massa användare. Du vill dela dessa användare i två grupper: Kraftfulla användare och mindre kraftfulla användare. Varje grupp av användare kommer att ha speciella möjligheter.
För att göra det måste du tilldela dessa funktioner till varje användare som kan vara lite frustrerande och oproduktiv. Roller görs exakt för det, de är vad användarna är grupperade av.
Så, i stället för att tilldela funktioner till användare, tilldelar du dem till roller; och sedan tilldelar du rollerna till användarna. Det är dock möjligt att tilldela funktioner direkt till användare. En roll kan göras för en eller flera användare; och en användare kan ha ingen, en eller flera roller.
Så verkligheten är mycket mer så.
Det är viktigt att notera här att du ska söka efter användarkapacitet och inte användarroll innan du kör kod som kräver tillstånd. Antag aldrig att en roll har en särskild förmåga eftersom det kan ändras av ett annat plugin eller tema.
Det finns åtgärder som kräver flera funktioner. Om du till exempel vill redigera ett blogginlägg behöver du "redigera inlägg
"förmåga. Men vad händer om det här blogginlägget skapades av en annan användare? Du behöver då "edit_other_posts
"förmåga också. Så du måste kontrollera för båda innan du låter användaren redigera inlägget.
Det är där metafunktionerna spelar in. WordPress har a map_meta_cap ()
funktion som returnerar en uppsättning av nödvändiga funktioner för att utföra en viss förmåga.
Så låt oss återgå till föregående exempel. Låt oss anta att vi har en användare med ett ID på 3 och vi vill kontrollera om den här användaren kan redigera ett blogginlägg med ett ID på 5. Detta blogginlägg publiceras av en annan användare med ett ID på 6.
I detta fall, map_meta_cap ()
funktionen returnerar en array med följande funktioner: redigera inlägg
, edit_published_posts
, och edit_other_posts
. För att skapa den här matrisen, map_meta_cap ()
funktionen behöver göra några kontroller baserat på användaren och posten.
Standardfunktionerna som funktionen kontrollerar är "DELETE_USER
','edit_user
','remove_user
','promote_user
','delete_post
','delete_page
','redigera inlägg
','redigera sida
','read_post
'eller'read_page
'. Det är dock möjligt att öka med din egen genom att haka till "map_meta_cap
'filter.
Så det var i ett nötskal, WordPress-användarna och behörighetssystemet. Jag har försökt att hålla den så enkel och minimalistisk som möjligt. och jag undvikit att inkludera någon kod av den anledningen. I nästa del ser vi på ett brett utbud av funktioner som WordPress tillhandahåller för att interagera med det här systemet.