Använda WordPress för utveckling av webbapplikation tillgängliga funktioner, del 6 URL-omskrivning (eller rutter)

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:

  • Lägg till
  • uppdatering
  • radera

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örstå omskrivningsregler

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:

  1. Hur genereras omskrivningsregler?
  2. Och kanske viktigare, varför är de så komplicerade?

Regelverket om omskrivning

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.

Spolning omskrivningsregler

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:

  1. Du kan klicka på Spara ändringarPermalink Inställningarinstrumentbräda. Trots det faktum att ett alternativ kommer att väljas, oavsett vad du har definierat i din ansökans functions.php filen kommer att användas.
  2. Du kan ringa till $ 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.

Hur fungerar omskrivnings API: en?

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:

  1. En webbadress begärs från webbservern.
  2. Om innehållet finns på den begärda webbadressen kommer innehållet att returneras (det här kan vara en bild, ett teckensnitt eller vad som helst).
  3. Om innehållet inte existerar kommer begäran att riktas till index.php som matchar webbadressens mönster.
  4. Innehållet kommer då att returneras från WordPress till den begärande klienten.

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.

Ett exempel på omskrivningsregler

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.

En kort titel för ett post-ID

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:

  • Det första argumentet är ett regelbundet uttryck som matchar den begärda webbadressen. I vårt fall använder vi enkla ord.
  • Det andra argumentet är att webbadressen faktiskt ska hämtas. Återigen, i vårt fall, hämtar vi respektive respektive respektive inlägg.
  • Slutligen är det sista argumentet prioritet, som kan vara "topp" eller "botten". Om den är inställd som "topp", kommer denna regel att utvärderas över alla andra regler; dock om "botten", då kommer det att utvärderas sist.

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.

Importera anteckningar om spolning omskrivningsregler

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.


En mer komplicerad strategi för omskrivningsregler

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 personen
  • raderahttp://domain.com/individual/delete/1 som används för att radera den första personen

Så 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änd wp_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änd wp_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.

En bit ofullständig

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.


Strax

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.