I del en av denna serie lärde vi oss att implementera ett grundläggande administrativ meddelande som visas överst på varje WordPress-administratörssida. I den här handledningen börjar vi bygga ett plugin för att innehålla alla våra anpassade administrativa meddelandekoder.
Vi börjar med att implementera standardadministrativa meddelanden och använda dem som bas för mer flexibla och avancerade exempel.
Först, låt oss dock skapa ett nytt plugin från början som vi ska använda för alla våra administrativa meddelanden så att vi är redo att börja skriva in kod.
Jag antar här att du redan har en lokal WP-utvecklingswebbplats upprättad. Om inte, hänvisa till länkarna i del en av denna handledningsserie.
Skapa en ny plugin-mapp som heter admin_notices
inuti / Wp-content / plugins /
, och skapa sedan en admin_notices.php
fil som kommer att vara huvud pluginfilen.
Öppna admin_notices.php
i din favoritredigerare och lägg till den grundläggande pluginstrukturen:
i det();
Vi lade till en grundläggande plugin header så WordPress känner igen vårt plugin. Detta följs av en klass som innehåller metoder för att visa våra administrativa meddelanden.
Jag heter klassen Gwyer_Admin_Notices
för att försöka göra det så unikt som möjligt. På så sätt är det mycket mindre sannolikt att det strider mot ett befintligt klassnamn.
Låt oss börja med att visa ett grundläggande administrativ meddelande, och lägg sedan till det för att göra det mer användbart. För att skapa ett administrativ meddelande, lägg till admin_notices
krok till i det()
fungera:
add_action ('admin_notices', array ($ this, 'test_notice'));
Kroken innehåller a test_notice
återuppringningsfunktion som kommer att användas för att mata ut administratörsmeddelandet.
Lägg till följande klassmetod till Gwyer_Admin_Notices
för att visa det faktiska administrativa meddelandet. För meddelandena använder vi klassiska film citat från de senaste 100 åren av filmer.
/ ** * Utför ett testadministrativt meddelande. * / public function test_notice () ?>Yoo hoo, stor sommar blåsa ut.
Aktivera plugin för att visa testmeddelandet.
Låt oss också lägga till exempel på de andra typerna av administrativ meddelande som vi kan visa inklusive den avvisbara typen genom att lägga till
är-dismissible
CSS klass. Lägg till dessa itest_notice ()
metod under det befintliga administrativa meddelandetdiv
:Toto, jag har en känsla att vi inte är i Kansas längre.
Du hade mig på "hej".
Av alla ginfogar i alla städer i hela världen går hon in i mina.
Ingen lägger barn i ett hörn.
Det här är en komplett uppsättning administrativa meddelandetyper som vi kan visa via CSS-klasserna i WordPress. Kom dock ihåg att det avvisade administrativa meddelandet kommer att visas igen på varje sida!
"Avvisningsbart" administrativ meddelande i detta sammanhang betyder endast för den aktuella sidan. Att ha vidhållna administrativa meddelanden är inte så flexibelt, så vi kommer senare att se specifikt på olika sätt att du kan avfärda dina administrativa meddelanden effektivt.
Admin-meddelandehakar
Hittills har vi bara använt
admin_notice
krok för att genomföra ett administrativ meddelande. Det finns i själva verket fyra separata meddelandehakar som du kan använda för att visa meddelanden, menadmin_notice
är den mest vanliga.De fyra krokarna är:
*Ingen officiell dokumentation finns för närvarande för dessa krokar.
Så vart skulle du brukar använda all_admin_notices
, user_admin_notices
, och network_admin_notices
? Och hur skiljer de sig från admin_notices
?
Jag sa tidigare att admin_notices
krok visar anmälningar på alla administratorsidor, men detta är inte strikt sant. Om du tittar på admin-header.php
i WordPress-kärnan ser du det admin_notices
, network_admin_notices
, och user_admin_notices
är ömsesidigt exklusiva. Det är bara ett av dessa krokar brinner på en WordPress admin sida.
En serie villkorliga uttryck utvärderar den aktuella adminsidan och bränder bara en av dem beroende på vilken typ av administratörssida du är närvarande på.
för det första, is_network_admin ()
kontrollerar om du är på en nätverksadministratörsskärm (till exempel en administratörs sida baserad på a / Wp-admin / nätverk /
URL). Om så är fallet network_admin_notices
krokbränder.
Annat, is_user_admin ()
kontrollerar om du är på en användaradministrationsskärm (till exempel en administratörs sida baserad på a / Wp-admin / user /
URL). Om så är fallet user_admin_notices
krokbränder.
Och som du kanske har gissat, om både is_network_admin ()
och is_user_admin ()
returnera falskt då admin_notices
krokbränder.
Det lämnar bara all_admin_notices
krok. Denna krok är inte en del av det villkorliga uttrycket som diskuterats ovan, så den här kroken garanteras att visas på Allt admin sidor oavsett vad, inklusive multisite nätverks admin sidor.
För att klargöra, för varje WordPress admin sida, bara all_admin_notices
krok garanteras att alltid skjuta. Av de andra tre krokarna, bara ett kommer att elda beroende på den administratörs sida du är närvarande på.
Jag skulle uppmuntra dig att ta en titt på admin-header.php
(mot slutet av filen) för att se själv hur WordPress utvärderar när man använder varje administrativ meddelande.
Vi använder bara admin_notices
genom hela denna tutorial-serie, men du kanske tycker att du behöver några av de andra krokarna i ditt eget projekt, så det är väl värt att kolla dem ut.
Låt oss nu vara uppmärksam på att visa administrativa meddelanden på specifika sidor. Först, kommentera samtalet till add_action
så våra testmeddelanden visas inte längre.
Inuti i det()
, lägg till en ny add_action ()
ring som vi ska använda för att visa ett administrativ meddelande på en viss administratörs sida.
add_action ('admin_notices', array ($ this, 'specific_admin_page'));
Definiera sedan specific_admin_page ()
metod enligt följande:
/ ** * Utför ett administrativ meddelande på en viss administrativ skärm. * / public function specific_admin_page () $ admin_page = get_current_screen (); ?>Information: Vi är för närvarande på bas; ?> admin sida.
Spara dina ändringar och visa vilken sida som helst i WordPress-administratören. Jag ska prova huvuddashboardsidan.
Som du kan se, för vilken administratörs sida du besöker, visas (bas) namn på sidan i adminmeddelandet.
De
get_current_screen ()
funktion returnerar aWP_Screen
objekt med detaljer om den aktuella adminskärmen. Den särskilda objektegenskap vi är intresserade av ärWP_Screen-> bas
, vilken utvärderar till bastypen för den aktuella skärmen. Prova att ladda olika WordPress-administratorsidor för att se vilka värden som returneras förWP_Screen-> bas
.Vi kan använda basvärdet för att läsa vår administrativa meddelande på villkorligt sätt på instrumentpanelsidan. Värdet vi behöver kontrollera är
instrumentbräda
. Låt oss också visa ett alternativt administrativt meddelande om vi inte finns på adminpanelen. Ersätt din definition avspecific_admin_page ()
med:/ ** * Utför ett administrativ meddelande på en viss administrativ skärm. * / public function specific_admin_page () $ admin_page = get_current_screen (); om ($ admin_page-> base == "instrumentpanel"):?>Vi gjorde det! Välkommen till instrumentbrädan.
Vart tog du vägen? Detta är inte instrumentbrädan!
Allt är bra när vi är på instrumentpanelsidan, men försök att navigera till någon annan administratörssida och se vad som händer.
Genom att använda detta enkla tillvägagångssätt ger vi en hel del flexibilitet när vi visar adminmeddelanden på specifika administratörssidor. Vi kan enkelt förlänga detta till vitlista på vilket antal administratorsidor vi vill visa administrativa meddelanden på.
Än en gång, ersätt
specific_admin_pages ()
funktion, den här gången med följande kod:/ ** * Utför ett administrativ meddelande på en viss administrativ skärm. * / public function specific_admin_page () $ whitelist_admin_pages = array ("instrumentbrädan", "ladda upp", "redigera-kommentarer"); $ admin_page = get_current_screen (); om (in_array ($ admin_page-> bas, $ whitelist_admin_pages)):?>Vi gjorde det! Det här är 'bas; ?> 'admin sida.
Inte på din nelly! Den här sidan finns inte på min lista.
Istället för att leta efter en enda administratörssida, kontrollerar vi nu om basnamnet för den aktuella administratörssidan finns i
$ whitelist_admin_pages
array. När vi navigerar till instrumentpanelen, mediebiblioteket eller kommentarer på administratörssidorna ser vi vår framgångsinformation.Och när vi besöker några annan admin sida (ingår inte i vår whitelist array), vi ser ett alternativt administrativ meddelande.
Vad sägs om att visa ett administrativ meddelande på en plugin-options sida? Hur skulle vi åstadkomma det? Innan vi kommer in i det här måste vi först skapa en dummyalternativssida för vårt plugin.
Skapa en ny fil som heter
plugin-options.php
inutiadmin-meddelanden
plugin-mapp som vi lagt till tidigare och lägg till följande kod:i det();Admin-meddelanden Plugin
På toppen av
admin-notices.php
(direkt ovanför klassdeklarationen), inkludera klassen Plugin Options i huvud pluginfilen med:require_once (dirname (__ FILE__). '/plugin-options.php');Jag går inte in på för mycket detaljer om hur koden i
plugin-options.php
fungerar som det kan vara en hel handledning på egen hand! Om du vill ha en uppdatering så rekommenderar jag att du tittar på WordPress Codex-sidan om du lägger till pluginalternativssidor.I grund och botten är allt vi gör lägger till en ny Adminmeddelanden undersida till inställningar meny. Plugin-alternativsidan innehåller ett enda textfält som du kan skriva in en sträng i. När Spara ändringar knappen klickas, innehållet i textfältet sparas i WordPress databasen.
Detta är bara ett blottben exempel på en plugin-inställningssida bara för demonstration. Det innehåller inte nödvändiga sanerings- eller översättningsfunktioner som rekommenderas för en produktionsplugg avsedd för generell utgåva.
Gå till Inställningar> Admin-meddelanden för att visa pluginalternativsidan.
Som förväntat visas administrationsmeddelandet som vi lagt till tidigare på vår plugin-optionssida. Felmeddelandet visas eftersom vår sida för pluginalternativ inte finns i
$ whitelist_admin_pages array
av tillåtna admin sidor. Låt oss fixa det nu.För att lägga till vår options sida i matrisen behöver vi veta basnamnet. Inuti
specific_admin_page ()
, ändra feladministrationsmeddelandet div till följande:Inte på din nelly! Detta "bas; ?> 'sidan finns inte på min lista.
Vi får fortfarande samma felmeddelande som tidigare, men den här gången innehåller den det basnamn vi behöver, vilket visar sig vara
settings_page_admin-meddelanden / plugin-alternativ
. Det är inte ett namn vi lätt kunde gissat, så det var värt att ta sig tid att skriva ut det!Lägg till basnamnet på
$ whitelist_admin_pages
array, som nu ska se ut så här:$ whitelist_admin_pages = array ('settings_page_admin-meddelanden / plugin-options', 'dashboard', 'ladda upp', 'redigera-kommentarer');Uppdatera pluginalternativssidan för att se det uppdaterade adminmeddelandet.
Nu när vi känner till namnet på pluginalternativen kan vi enkelt skapa ett administrativ meddelande som bara visas på den administrativa sidan. Ta bort
settings_page_admin-meddelanden / plugin-alternativ
från$ whitelist_admin_pages
array och kommentera den andraadd_action
funktionssamtal ini det()
. Lägg sedan till en tredje åtgärd som vi bara använder för vår plugin-options sida. Dini det()
funktionen ska nu se ut så här:/ ** * Registrera krokar. * / public function init () // add_action ('admin_notices', array ($ this, 'test_notice')); // add_action ('admin_notices', array ($ this, 'specific_admin_page')); add_action ('admin_notices', array ($ this, 'plugin_admin_notice'));Låt oss krossa
plugin_admin_notice ()
återuppringningsfunktion nu. Lägg till den här nya metoden tillGwyer_Admin_Notices
klass:/ ** * Utför ett administrativ meddelande på pluginalternativsidan. * / public function plugin_admin_notice () $ whitelist_admin_pages = array ('settings_page_admin-notices / plugin-options'); $ admin_page = get_current_screen (); om (in_array ($ admin_page-> bas, $ whitelist_admin_pages)):?>Välkommen till plugin-sidan Administrationsmeddelanden!
Detta liknar mycket
specific_admin_page ()
förutom att vi har tagit bort det villkorliga uttrycket. Vi har också lagt till en avvisbar knapp genom att lägga tillär-dismissible
CSS-klassen, så adminmeddelandet kan nu stängas också.Prova att ladda andra administratörssidor för att bekräfta att administratörsmeddelandet bara visas på pluginalternativsidan.
Slutsats
I den här handledningen lärde vi oss mer om administrativa meddelanden och de olika krokarna som var tillgängliga för att visa dem. Vi omfattade också hur man visar adminmeddelanden endast på specifika sidor i WordPress-administratören. Vi har utvecklat ett dedikerat plugin för att innehålla alla anpassade administratorkoder.
I del tre fortsätter vi ytterligare pluginprogrammet genom att visa hur man utlöser administrativa meddelanden när vissa händelser uppstår. Kom ihåg att WordPress öppen källkod gör det lätt att lära och förlänga. För det ändamålet har vi mycket att granska och studera i Envato Market om du är nyfiken.
Vi kommer då att uppmärksamma oss på hur vi kan lösa det uthålliga problemet med administrativ meddelande så att de inte återkommer när sidan uppdateras. Vi implementerar flera olika metoder i vår anpassade plugin så att vi kan göra det här.