Een van de leukste dingen over moderne webapplicatie-ontwikkelingsraamwerken is dat ze een manier bieden om echt schone routes - of URL-schema's - te genereren die verwijzen naar het conceptuele model van hoe de applicatie is gestructureerd.
Bijvoorbeeld, gegeven een bepaald type gegevens - zeg, een individu-mogelijk kunt u de volgende acties uitvoeren:
Enzovoorts.
Afhankelijk van de aard van uw aanvraag, kunt u mogelijk meer doen (zoals bijvoorbeeld een echtgenoot toevoegen), maar voor de doeleinden van dit bericht volstaan de basis CRUD-operaties om het punt te laten zien.
Voor degenen onder u die hebben meegewerkt, hebben we een aantal functies bekeken die WordPress biedt als basis voor de ontwikkeling van toepassingen. Bij het voortzetten van deze discussie is het belangrijk dat we de API's bekijken die voor ons beschikbaar zijn om de herschrijfregels van WordPress aan te passen.
De gemiddelde gebruiker is waarschijnlijk bekend met het wijzigen van het URL-schema in het WordPress-dashboard, dat we kort bespreken om er zeker van te zijn dat we allemaal op dezelfde pagina staan. Er zijn echter veel meer mogelijkheden beschikbaar voor degenen die URL-herschrijving begrijpen. in WordPress.
In feite hebben we de mogelijkheid om URL-herschrijfregels te construeren die overeenkomen en presteren, net als die van moderne MVC-gebaseerde frameworks.
Om ervoor te zorgen dat we allemaal op dezelfde pagina staan, kunnen herschrijfregels worden gezien als de manier waarop een bepaald patroon wordt vergeleken met de webserver om gegevens uit de database op te halen.
In de standaard WordPress-installatie is de standaard permalink-structuur bijvoorbeeld als volgt:
http://domain.com/?p=123
Deze URL bevat een queryreeksparameter, namelijk het sleutelwaardepaar van p = 123
die in de context van WordPress zegt: "haal de post op met de ID van 123".
Als je dieper ingaat op de opties op de Permalink instellingen scherm, ziet u ook een verscheidenheid aan opties:
Een ander voorbeeld van de herschrijfregels die u waarschijnlijk zult zien, is wat bekend staat als "pretty permalinks" of, zoals genoemd in het WordPress-dashboard, "Post Name".
In dit formaat ziet de URL er als volgt uit:
http://domain.com/post-title/
Vanaf hier komt de gevraagde URL bij de webserver en bepaalt vervolgens, op basis van een set regels, de ID van het bericht met die titel en stuurt het terug naar de aanvragende client (wat de browser zou zijn).
Tussen deze twee voorbeelden is er een basisprincipe in het spel dat precies laat zien wat de herschrijfregels zijn.
Samengevat, herschrijfregels definiëren een reeks regels waarin in de binnenkomende URL wordt vertaald in een indeling die informatie uit de database voor de client ophaalt.
Dit roept natuurlijk twee vragen op:
De reden dat herschrijfregels een beetje een uitdaging voor ontwikkelaars kunnen zijn, is omdat ze zijn gebaseerd op reguliere expressies. En er is een oud citaat over reguliere expressies van Jamie Zawinski:
Sommige mensen denken bij het geconfronteerd worden met een probleem: "Ik weet het, ik zal reguliere expressies gebruiken." Nu hebben ze twee problemen.
Grappig, maar waar. En dat is waarom omgaan met aangepaste herschrijfregels in WordPress kan zo'n uitdaging zijn voor veel ontwikkelaars.
Helaas kunnen we niet elke variatie of type URL-schema aantonen die kan worden gemaakt of ondersteund door herschrijfregels, maar we kunnen een paar praktische voorbeelden bekijken die laten zien hoe aan de slag te gaan en een basis of handleiding bieden voor wat we zouden moeten doen in de toekomst werken met onze applicaties.
Een ding dat belangrijk is om op te merken, is dat wanneer u uw herschrijfregels definieert, deze niet onmiddellijk van kracht worden - ze moeten worden doorgespoeld. Dit betekent dat u de oude set regels moet wissen om ze te vervangen door de nieuwe set regels.
Er zijn twee manieren om dit te doen:
functions.php
bestand zal worden gebruikt.$ Wp_rewrite-> flush_rules ();
en programmatisch zorgen voor het probleem.Ongeacht de route die u kiest, is het belangrijk om deze stap te onthouden, want elke keer dat u een nieuwe herschrijfregel definieert, moet u de oude regels doorspoelen.
Wanneer het echt onze eigen herschrijfregels schrijft, is het belangrijk om te begrijpen hoe de Rewrite API werkt.
Het kan worden gedestilleerd in een proces van vier stappen:
index.php
die overeenkomt met het patroon van de URL.Als u geïnteresseerd bent in het zien van de definitie van herschrijfregels op basis van de configuratie die u in de hebt permalink dashboard, bekijk de plug-in Rewrite Rules Inspector.
Deze plug-in zal een lijst weergeven van alle regels die momenteel aanwezig zijn om overeen te komen met URL-schema's, compleet met de reguliere expressies en de overeenkomende variabelen tegen index.php
.
Heb je zin? Zo nee, laten we een paar eenvoudige, praktische voorbeelden bekijken.
Gegeven dat we weten dat patronen zullen worden geëvenaard en doorgegeven index.php
, we kunnen profiteren van de add_rewrite_rule
functie om te definiëren hoe onze aangepaste URL's zullen werken.
Laten we zeggen dat we naar de eerste post in het systeem kijken, dat wil zeggen: we kijken naar de post met de ID van 1.
In de meeste vanilla WordPress-installaties is dit dat wel Hallo Wereld en de URL is meestal http://domain.com/hello-world
of http://domain.com/?p=1
afhankelijk van je permalink-instellingen (dat wil zeggen, je huidige set herschrijfregels).
Maar laten we een regel zo definiëren http://domain.com/first
zal ook het eerste bericht in de database laden:
function example_add_rewrite_rules () add_rewrite_rule ('first', 'index.php? p = 1', 'top'); flush_rewrite_rules (); add_action ('init', 'example_add_rewrite_rules');
Laten we nog een regel toevoegen die het voorbeeld volgt en ons in staat stelt om het tweede bericht in de database te laden. Namelijk, http://domain.com/?p=2
.
function example_add_rewrite_rules () add_rewrite_rule ('first', 'index.php? p = 1', 'top'); add_rewrite_rule ('tweede', 'index.php? p = 2', 'top'); flush_rewrite_rules (); add_action ('init', 'example_add_rewrite_rules');
Ervan uitgaande dat u de documentatie hebt gelezen voor add_rewrite rule
, dit is gemakkelijk genoeg om te begrijpen, goed?
Kortom, er zijn drie argumenten voor nodig:
Nu zijn deze voorbeelden eenvoudig. Dit is niet genoeg om ons echt te laten zien hoe we aangepaste routes kunnen instellen, zoals degene die we eerder in dit artikel hebben geschetst. Om dat te doen moeten we een aantal meer complexe uitdrukkingen bekijken.
Maar voordat we dat gaan doen, is het belangrijk om dat te noemen flush_rewrite_rules ()
zoals we hierboven doen is eigenlijk een slechte praktijk. Het werkt in het bovenstaande voorbeeld, maar het kan de laadtijd van een site aanzienlijk vertragen.
In feite hoeft het alleen maar te worden opgeroepen wanneer de herschrijfregels veranderen. Dit kan gebeuren wanneer een plug-in is geactiveerd of deze kan veranderen wanneer een thema wordt geactiveerd.
Hoe het ook zij, zorg ervoor dat u uw functies op de juiste manier koppelt, zodat de herschrijfregels niet bij elke lading van elke pagina worden doorgespoeld - alleen wanneer de herschrijfregels zelf zijn gewijzigd.
Om een meer gecompliceerde set regels voor herschrijven te introduceren, zoals die we eerder in dit bericht hebben beschreven vanuit CRUD-bewerkingen, is het belangrijk om de volgende twee functies te begrijpen:
add_rewrite_tag
laat WordPress weten van aangepaste zoekreeksvariabelen. Dit wordt ook gebruikt in combinatie met de volgende functie.add_rewrite_rule,
Zoals eerder vermeld, kunnen we extra herschrijfregels toevoegen aan WordPress (evenals hun prioriteit instellen).Laten we nu aannemen dat we een aangepast berichttype hebben genoemd individu dat staat voor een persoon in de applicatie. Laten we dan zeggen dat het individu heeft ook de volgende methoden en bijbehorende URL's beschikbaar:
allemaal
: http://domain.com/individuals/
bijwerken
: http://domain.com/individual/update/1
die wordt gebruikt om de eerste persoon bij te werkenverwijderen
: http://domain.com/individual/delete/1
die wordt gebruikt om de eerste persoon te verwijderenHet schema is dus eenvoudig genoeg, maar hoe gaan we ermee om?
Eerst moeten we de herschrijfregels definiëren:
function example_add_rewrite_rules () // Definieer de tag voor de individuele ID add_rewrite_tag ('% individual_id%', '([0-9] *)'); // Definieer de regels voor elk individu add_rewrite_rule ('^ individual / update / ([0-9] *)', 'index.php? Individual = update & individual_id = $ overeenkomsten [1]', 'bovenaan'); add_rewrite_rule ('^ individual / delete / ([0-9] *)', 'index.php? individual = delete & individual_id = $ overeenkomsten [1]', 'bovenaan'); add_action ('init', 'example_add_rewrite_rules');
Vervolgens moeten we deze aangepaste functies voor elk individu definiëren, zodat deze de juiste record in de database bijwerken wanneer deze wordt aangeroepen.
In dit geval definiëren we twee functies: één voor het bijwerken van de individu en een voor het verwijderen van de individu. De volgende code gaat er ook van uit dat er een beetje informatie zal worden ingesloten in het formulier dat vanuit de browser wordt verzonden.
Het gaat er met name van uit dat de individuele ID, voornaam, achternaam en andere informatie wordt verzonden om het individu te kunnen bijwerken.
function example_process_individual ($ input) if (example_updating_user ()) example_update_individual ($ input); else if ('true' == $ input ['delete_individual']) example_delete_individual ($ input ['individual_id']); if (! is_admin ()) add_action ('init', 'example_process_individual'); function example_update_individual ($ input) / * De inkomende $ invoerinzameling van een verondersteld formulier * dat zal worden gebruikt om de gebruiker bij te werken. * * Het kan informatie bevatten zoals de ID, de voornaam, * achternaam, enzovoort. * * Gebruik bij succesvol gebruikwp_redirect
om terug te gaan naar de startpagina of * de pagina opnieuw te laden om een foutmelding weer te geven. * / function example_delete_individual ($ individual_id) / * Gebruik de inkomende ID om de individuele record te zoeken en deze * uit de database te verwijderen. * * Gebruik bij succesvol gebruikwp_redirect
om terug te gaan naar de startpagina of * de pagina opnieuw te laden om een foutmelding weer te geven. * / function example_updating_user () return 0 == strpos ($ _SERVER ['REQUEST_URI'], '/ individu / update'); function example_deleting_user () return 0 == strpos ($ _SERVER ['REQUEST_URI'], '/ individu / delete');
Merk hierboven op dat de eerste functie is aangesloten op de in het
actie en is enkel en alleen afgevuurd als de gebruiker niet is aangemeld als beheerder. Dit kan verder worden verbeterd door het voorwaardelijk in te stellen om alleen te laden als het afkomstig is van een bepaalde pagina; In dit voorbeeld dient dit echter wel het doel ervan.
Lees vervolgens de opmerkingen over de code voor de Bijwerken
en de Verwijder
functies om te zien hoe ze moeten functioneren.
Merk tot slot op dat de laatste twee functies eenvoudige helpers zijn die bedoeld zijn om ons in staat te stellen schonere code te schrijven in de oorspronkelijke gekoppelde functie.
Ik weet het - dit is een onvolledig voorbeeld, maar voor een lang artikel en een complex onderwerp heb ik geprobeerd het beste te doen dat ik kan doen om de WordPress Rewrite API te presenteren, de voordelen van het gebruik ervan te bespreken en over te praten hoe het kan worden gebruikt om schonere URL-routes te maken.
De waarheid is dat het nog steeds een beetje een uitdagend onderwerp is en dat het het best begrepen kan worden door middel van implementatie. Niettemin is dit nog een ander onderdeel van de WordPress-applicatie waarmee het als een fundament voor de ontwikkeling van webtoepassingen kan dienen.
Met dat alles gezegd, is het tijd om verder te gaan naar het concept van caching.
Natuurlijk zijn er veel caching-plug-ins beschikbaar voor WordPress, maar als je een ontwikkelaar bent, wil je een niveau van native caching inbouwen, en je wilt WordPress-API's gebruiken om dit te doen. Als dat het geval is, is het belangrijk om bekend te raken met wat er beschikbaar is en hoe u dit moet doen.
Dat gezegd hebbende, zullen we vervolgens onze aandacht richten op de Transients API zodat we zelf een beetje native caching kunnen verwerken en bekijken hoe dit caching-mechanismen van derden kan helpen onze applicaties nog sneller te maken.