En av de trevligaste sakerna om moderna webbapplikationsutvecklingsramar är att de ger ett sätt att generera riktigt rena rutter eller URL-ordningar - den kartan till den konceptuella modellen för hur applikationen är strukturerad.
Till exempel, med tanke på någon typ av data-säg, an Enskild-du kan eventuellt utföra följande åtgärder:
Och så vidare.
Beroende på karaktären av din ansökan kan du kanske göra mer (till exempel, lägga till en make), men i det här inlägget är de grundläggande CRUD-operationerna tillräckliga för att visa punkten.
För er som följer med har vi tittat på en mängd olika funktioner som WordPress erbjuder som grund för applikationsutveckling. När du fortsätter denna diskussion är det viktigt att vi tittar på API: erna som är tillgängliga för oss för att anpassa WordPress 'omskrivningsregler.
Den genomsnittliga användaren är troligen bekant med hur man ändrar webbadressschemat i WordPress-instrumentpanelen, som vi kortfattat diskuterar för att se till att vi är alla på samma sida. Det finns dock många fler möjligheter till dem som förstår URL-omskrivning i WordPress.
Faktum är att vi har möjlighet att konstruera URL-omskrivningsregler för att matcha och utföra precis som de moderna MVC-baserade ramarna.
För att se till att vi är alla på samma sida kan omskrivningsregler betraktas som hur ett visst mönster matchas mot webbservern för att hämta data från databasen.
Till exempel i standard WordPress-installationen är standard permalinkstrukturen så här:
http://domain.com/?p=123
Den här webbadressen innehåller en frågesträngsparameter, nämligen nyckelvärdesparet av p = 123
som, i samband med WordPress, säger "hämta inlägget med ID på 123".
Om du tittar djupare på alternativen på Permalink Inställningar skärm, ser du också en mängd olika alternativ:
Ett annat exempel på omskrivningsreglerna som du sannolikt kommer att se är vad som kallas "ganska permalink" eller, som det heter i WordPress instrumentpanel, "Postnamn".
I det här formatet ser webbadressen ut så här:
http://domain.com/post-title/
Härifrån kommer den begärda webbadressen in i webbservern och bestämmer sedan på grundval av en uppsättning regler, ID för posten som har den titeln och returnerar den till den begärande klienten (vilket skulle vara webbläsaren).
Mellan dessa två exempel finns det en grundläggande princip i spel som visar exakt vilka omskrivningsregler som är.
Kortfattat definierar omskrivningsregler en uppsättning regler där det inkommande URL-översättet översätts till ett format som hämtar information från databasen för klienten.
Det här förstås naturligtvis två frågor:
Anledningen till att omskrivningsregler kan fungera som en utmaning för utvecklare är att de är baserade på reguljära uttryck. Och det finns ett gammalt citat om reguljära uttryck av Jamie Zawinski:
Vissa människor, när de konfronteras med ett problem, tror "Jag vet, jag använder vanliga uttryck." Nu har de två problem.
Roligt, men sant. Och det är varför hantera anpassade omskrivningsregler i WordPress kan vara en sådan utmaning för många utvecklare.
Tyvärr kan vi inte visa varje variant eller typ av webbadressschema som kan skapas eller stödjas av omskrivningsregler, men vi kan ta en titt på några praktiska exempel som visar hur du kommer igång och skapa en grund eller en guide för vad vi skulle behöva göra i framtida arbete med våra applikationer.
En sak som är viktigt att notera är att när du definierar dina omskrivningsregler, kommer de inte att omedelbart träda i kraft - de har spolas. Det betyder att du måste radera de gamla reglerna, för att ersätta dem med den nya uppsättningen regler.
Det finns två sätt att du kan gå på att göra detta:
functions.php
filen kommer att användas.$ Wp_rewrite-> flush_rules ();
och programmässigt ta hand om problemet.Oavsett vilken rutt du väljer är det viktigt att komma ihåg det här steget, eftersom varje gång du definierar en ny omskrivningsregel måste du spola de gamla reglerna.
När det gäller att skriva egna regler för omskrivning, är det viktigt att förstå hur omskrivnings API fungerar.
Det kan destilleras till en fyra stegs process:
index.php
som matchar webbadressens mönster.Om du är intresserad av att se definitionen av omskrivningsregler baserat på konfigurationen du har i Permalink instrumentpanelen, kolla in plugin för omskrivningsregler inspektör.
Denna plugin kommer att göra en lista över alla regler som för närvarande är på plats för att matcha angivna webbadressscheman, komplett med de reguljära uttrycken och de matchade variablerna mot index.php
.
Vettigt? Om inte, låt oss ta en titt på några enkla, praktiska exempel.
Med tanke på att vi vet att mönster kommer att matchas och passeras till index.php
, vi kan dra nytta av add_rewrite_rule
funktion för att definiera hur våra anpassade webbadresser ska fungera.
Låt oss säga att vi tittar på det första inlägget i systemet, det vill säga vi tittar på inlägget med ID 1.
I de flesta vanilj-WordPress-installationer är det här Hej världen och webbadressen är vanligtvis http://domain.com/hello-world
eller http://domain.com/?p=1
beroende på dina permalinkinställningar (det vill säga din nuvarande uppsättning omskrivningsregler).
Men låt oss definiera en sådan regel som http://domain.com/first
kommer också att ladda det första inlägget i databasen:
funktion example_add_rewrite_rules () add_rewrite_rule ('first', 'index.php? p = 1', 'top'); flush_rewrite_rules (); add_action ('init', 'example_add_rewrite_rules');
Låt oss lägga till ytterligare en regel som kommer att följa efter och tillåta oss att ladda det andra inlägget i databasen. Nämligen, http://domain.com/?p=2
.
funktion example_add_rewrite_rules () add_rewrite_rule ('first', 'index.php? p = 1', 'top'); add_rewrite_rule ('second', 'index.php? p = 2', 'top'); flush_rewrite_rules (); add_action ('init', 'example_add_rewrite_rules');
Förutsatt att du har läst dokumentationen för add_rewrite regel
, det här är lätt att förstå, rätt?
Kort sagt tar det tre argument:
Nu är dessa exempel grundläggande. Det här räcker inte för att verkligen visa oss hur du konfigurerar anpassade vägar som de som vi skisserade tidigare i den här artikeln. För att göra det behöver vi ta en titt på några mer komplexa uttryck.
Men innan vi går på att göra det är det viktigt att notera den ringen flush_rewrite_rules ()
som vi gör ovan är faktiskt en dålig övning. Det fungerar i exemplet ovan, men det kan faktiskt sakta ner en webbplatsens laddningstid.
Faktum är att det bara behöver kallas när omskrivningsreglerna ändras. Det kan inträffa när ett plugin är aktiverat, eller det kan ändras när ett tema aktiveras.
Oavsett vilket fall, se till att du kopplar dina funktioner ordentligt så att omskrivningsreglerna inte spolas på varje enskild sidlastning - bara när omskrivningsreglerna själva har ändrats.
För att införa en mer komplicerad uppsättning omskrivningsregler som de som vi detaljerat tidigare i detta inlägg från CRUD-operationer är det viktigt att förstå följande två funktioner:
add_rewrite_tag
kommer att låta WordPress känna till anpassade frågesträngvariabler. Detta används också i samband med nästa funktion.add_rewrite_rule,
som nämnts, kommer att tillåta oss att lägga till ytterligare omskrivningsregler till WordPress (samt sätta prioritet).Låt oss nu säga att vi har en anpassad posttyp som heter Enskild som representerar en person i ansökan. Låt oss då säga att Enskild har även följande metoder och motsvarande webbadresser tillgängliga:
Allt
: http://domain.com/individuals/
uppdatering
: http://domain.com/individual/update/1
som används för att uppdatera den första personenradera
: http://domain.com/individual/delete/1
som används för att radera den första personenSå schemat är enkelt nog, men hur går vi med att implementera det?
Först måste vi definiera omskrivningsreglerna:
funktion example_add_rewrite_rules () // Definiera koden för det enskilda ID add_rewrite_tag ('% individual_id%', '([0-9] *)'); // Definiera reglerna för varje enskild individ add_rewrite_rule ('^ individual / update / ([0-9] *)', 'index.php? Individual = update & individual_id = $ matchningar [1]', 'top'); add_rewrite_rule ('^ individual / delete / ([0-9] *)', 'index.php? individual = delete & individual_id = $ matchningar [1]', 'top'); add_action ('init', 'example_add_rewrite_rules');
Därefter måste vi definiera dessa anpassade funktioner för varje enskild person, så att de uppdaterar den korrekta posten i databasen när den heter.
I det här fallet definierar vi två funktioner, en för uppdatering av Enskild och en för att radera Enskild. Följande kod förutsätter också att lite information kommer att finnas i formuläret som lämnas in från webbläsaren.
Specifikt förutsätter det att Individuellt ID, förnamn, efternamn och annan information kommer att skickas för att uppdatera den enskilda personen.
funktion example_process_individual ($ input) om (example_updating_user ()) example_update_individual ($ input); annars om ('true' == $ input ['delete_individual']) example_delete_individual ($ input ['individual_id']); om (! is_admin ()) add_action ('init', 'example_process_individual'); funktion example_update_individual ($ input) / * Den inkommande $ insamlingssamlingen från en antagen form * som ska användas för att uppdatera användaren. * * Det kan innehålla information som ID, förnamn, * efternamn, och så vidare. * * Efter framgång, användwp_redirect
för att gå tillbaka till hemsidan, eller ladda om * sidan för att visa ett fel. * / funktion example_delete_individual ($ individual_id) / * Använd det inkommande ID för att hitta den enskilda posten och ta bort den * från databasen. * * Efter framgång, användwp_redirect
för att gå tillbaka till hemsidan, eller ladda om * sidan för att visa ett fel. * / funktion example_updating_user () return 0 == strpos ($ _SERVER ['REQUEST_URI'], '/ individuell / uppdatering'); funktion example_deleting_user () return 0 == strpos ($ _SERVER ['REQUEST_URI'], '/ individual / delete');
Observera ovan att den första funktionen är inkopplad i i det
åtgärd och är endast avfyrade om användaren inte är inloggad som administratör. Detta kan också förbättras genom att villkorligt ställa in det för att ladda bara om det kommer från en viss sida. men för detta exempel tjänar det sitt syfte.
Läs sedan koden kommentarer för Uppdatering
och den Radera
funktioner för att se hur de ska fungera.
Slutligen notera att de två sista funktionerna är enkla hjälpmedel som är avsedda att låta oss skriva renare kod i den initiala anslutna funktionen.
Jag vet att det här är lite av ett ofullständigt exempel, men för en lång artikel och ett komplext ämne har jag tagit det för att göra det bästa jag kan för att visa WordPress Rewrite API, diskutera fördelarna med att använda den och prata om hur det kan användas för att skapa renare URL-rutter.
Sanningen är, det är fortfarande något av ett utmanande ämne och det är det som bäst förstås genom genomförandet. Ändå är det ännu en komponent i WordPress-programmet som gör det möjligt att fungera som grund för webbapplikationsutveckling.
Med allt det sagt är det dags att gå vidare till konceptet caching.
Visst finns det många cachepluggar som är tillgängliga för WordPress, men om du är en utvecklare vill du bygga på en nivå av inbyggd cachning, och du vill utnyttja WordPress API för att göra det. Om så är fallet är det viktigt att bekanta dig med vad som är tillgängligt och hur man gör det.
Så med det sagt kommer vi nästa gång vår uppmärksamhet på Transienter API så att vi kan hantera en bit av inbyggd caching på egen hand och granska hur det här kan hjälpa till att cachemekanismer från tredje part gör våra program ännu snabbare.