Una delle cose più belle dei moderni framework di sviluppo di applicazioni web è che forniscono un modo per generare percorsi veramente puliti - o schemi URL - che si associano al modello concettuale di come l'applicazione è strutturata.
Ad esempio, dati alcuni tipi di dati, diciamo, a Individuale-potresti essere in grado di eseguire le seguenti azioni:
E così via.
A seconda della natura della tua domanda, potresti essere in grado di fare di più (ad esempio, aggiungere un coniuge), ma per gli scopi di questo post, le operazioni CRUD di base sono sufficienti per dimostrare il punto.
Per quelli di voi che hanno seguito, abbiamo dato un'occhiata a una varietà di funzionalità offerte da WordPress come base per lo sviluppo di applicazioni. Nel continuare questa discussione, è importante dare uno sguardo alle API che sono disponibili per personalizzare le regole di riscrittura di WordPress.
È probabile che l'utente medio abbia familiarità con il modo in cui modificare lo schema dell'URL nel dashboard di WordPress, che discuteremo brevemente per assicurarci che siamo tutti sulla stessa pagina, tuttavia ci sono molte più possibilità a disposizione di coloro che comprendono la riscrittura degli URL in WordPress.
In effetti, abbiamo la possibilità di costruire regole di riscrittura degli URL per abbinarle ed esibirle esattamente come quelle dei moderni framework basati su MVC.
Per essere sicuri che siamo tutti sulla stessa pagina, le regole di riscrittura possono essere pensate come il modo in cui un determinato pattern è abbinato al server web per recuperare i dati dal database.
Ad esempio, nell'installazione standard di WordPress, la struttura di permalink predefinita è la seguente:
http://domain.com/?p=123
Questo URL include un parametro stringa di query, vale a dire la coppia di valori chiave di p = 123
che, nel contesto di WordPress, sta dicendo "recupera il post con l'ID di 123".
Se date un'occhiata più approfondita alle opzioni sul Impostazioni Permalink schermo, vedrai anche una varietà di opzioni:
Un altro esempio delle regole di riscrittura che è probabile che tu possa vedere sono i cosiddetti "pretty permalink" o, come indicato nel dashboard di WordPress, "Post Name".
In questo formato, l'URL ha il seguente aspetto:
http://domain.com/post-title/
Da qui, l'URL richiesto arriva nel server web e quindi, in base a un insieme di regole, determina l'ID del post con quel titolo e lo restituisce al client richiedente (che sarebbe il browser).
Tra questi due esempi, c'è un principio di base in gioco che dimostra esattamente quali sono le regole di riscrittura.
In breve, le regole di riscrittura definiscono un insieme di regole in cui l'URL in arrivo viene tradotto in un formato che recupera le informazioni dal database per il client.
Ovviamente, questo solleva due domande:
Il motivo per cui le regole di riscrittura possono rappresentare una piccola sfida per gli sviluppatori è perché si basano su espressioni regolari. E c'è una vecchia citazione sulle espressioni regolari di Jamie Zawinski:
Alcune persone, di fronte a un problema, pensano "Lo so, userò le espressioni regolari". Ora hanno due problemi.
Divertente, ma vero. E quello è perché occuparsi di regole di riscrittura personalizzate in WordPress può essere una sfida per molti sviluppatori.
Purtroppo, non possiamo dimostrare ogni variante o tipo di schema URL che può essere creato o supportato da regole di riscrittura, ma possiamo dare un'occhiata ad un paio di esempi pratici che mostrano come iniziare e fornire una base o una guida per cosa avremmo bisogno di fare in futuro lavoro con le nostre applicazioni.
Una cosa che è importante notare è che quando si definiscono le regole di riscrittura, non avranno immediatamente effetto: sono state svuotate. Ciò significa che è necessario cancellare il vecchio set di regole, per sostituirle con il nuovo set di regole.
Ci sono due modi in cui puoi fare questo:
functions.php
il file verrà utilizzato.$ Wp_rewrite-> flush_rules ();
e programmaticamente prendersi cura del problema.Indipendentemente dal percorso che hai scelto, è importante ricordare questo passaggio perché ogni volta che definisci una nuova regola di riscrittura, devi svuotare le vecchie regole.
Quando viene effettivamente scritto le nostre regole di riscrittura, è importante capire come funziona l'API Rewrite.
Può essere distillato in un processo in quattro fasi:
index.php
che corrisponderà al modello dell'URL.Se sei interessato a vedere la definizione di regole di riscrittura in base alla configurazione che hai nel file Permalink dashboard, controlla il plug-in Inspector Rewrite Rules.
Questo plugin renderà un elenco di tutte le regole attualmente in atto per abbinare gli schemi URL specificati, completo con le espressioni regolari e le variabili abbinate rispetto index.php
.
Ha senso? Altrimenti, diamo un'occhiata a un paio di semplici esempi pratici.
Dato che sappiamo che i modelli saranno abbinati e passati a index.php
, possiamo sfruttare il add_rewrite_rule
funzione per definire come funzioneranno i nostri URL personalizzati.
Diciamo che stiamo guardando il primo post nel sistema, cioè stiamo guardando il post con l'ID di 1.
Nella maggior parte delle installazioni di WordPress vaniglia, questo è Ciao mondo e l'URL è di solito http://domain.com/hello-world
o http://domain.com/?p=1
in base alle impostazioni del permalink (ovvero, l'attuale serie di regole di riscrittura).
Ma definiamo una regola come questa http://domain.com/first
caricherà anche il primo post nel database:
function example_add_rewrite_rules () add_rewrite_rule ('first', 'index.php? p = 1', 'top'); flush_rewrite_rules (); add_action ('init', 'example_add_rewrite_rules');
Aggiungiamo un'altra regola che seguirà l'esempio e ci consentirà di caricare il secondo post nel database. cioè, http://domain.com/?p=2
.
function 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');
Supponendo di aver letto la documentazione regola add_rewrite
, questo è abbastanza facile da capire, giusto?
In breve, ci sono tre argomenti:
Ora, questi esempi sono basilari. Questo non è sufficiente per mostrarci davvero come impostare percorsi personalizzati come quelli che abbiamo delineato precedentemente in questo articolo. Per farlo dobbiamo dare un'occhiata ad alcune espressioni più complesse.
Ma prima di fare questo, è importante notare che chiamare flush_rewrite_rules ()
come stiamo facendo sopra è in realtà a cattive pratiche. Funziona nell'esempio sopra, ma può effettivamente rallentare il tempo di caricamento di un sito.
In realtà, ha solo bisogno di essere chiamato ogni volta che cambiano le regole di riscrittura. Ciò può verificarsi ogni volta che viene attivato un plug-in o può cambiare quando viene attivato un tema.
In ogni caso, assicurati di agganciare correttamente le tue funzioni in modo che le regole di riscrittura non vengano scaricate su ogni singola pagina caricata, proprio ogni volta che le regole di riscrittura stesse sono cambiate.
Al fine di introdurre un insieme più complicato di regole di riscrittura come quelle che abbiamo descritto in precedenza in questo post dalle operazioni CRUD, è importante comprendere le seguenti due funzioni:
add_rewrite_tag
lascerà a WordPress la conoscenza delle variabili di stringa di query personalizzate. Questo è anche usato in congiunzione con la prossima funzione.add_rewrite_rule,
come detto, ci permetterà di aggiungere ulteriori regole di riscrittura a WordPress (oltre a impostare la loro priorità).Ora diciamo che abbiamo un tipo di messaggio personalizzato chiamato Individuale che rappresenta una persona nell'applicazione. Quindi, diciamo che il Individuale ha anche i seguenti metodi e URL corrispondenti disponibili:
tutti
: http://domain.com/individuals/
aggiornare
: http://domain.com/individual/update/1
che viene utilizzato per aggiornare la prima personaElimina
: http://domain.com/individual/delete/1
che viene utilizzato per eliminare la prima personaQuindi lo schema è abbastanza semplice, ma come possiamo implementarlo?
Innanzitutto, dobbiamo definire le regole di riscrittura:
function example_add_rewrite_rules () // Definisci il tag per il singolo ID add_rewrite_tag ('% individual_id%', '([0-9] *)'); // Definisci le regole per ciascun individuo add_rewrite_rule ('^ individual / update / ([0-9] *)', 'index.php? Individual = update & individual_id = $ corrisponde a [1]', 'top'); add_rewrite_rule ('^ individual / delete / ([0-9] *)', 'index.php? individual = delete & individual_id = $ corrisponde a [1]', 'top'); add_action ('init', 'example_add_rewrite_rules');
Successivamente, dobbiamo definire queste funzioni personalizzate per ogni individuo in modo che aggiornino il record corretto nel database quando chiamato.
In questo caso, definiremo due funzioni, una per l'aggiornamento del Individuale e uno per cancellare il Individuale. Il codice seguente presuppone anche che un po 'di informazione sarà contenuta all'interno del modulo inviato dal browser.
In particolare, si presuppone che l'ID individuale, il nome, il cognome e altre informazioni saranno inviati al fine di aggiornare l'individuo.
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) / * La collezione di input $ in entrata da un modulo presunto * che verrà utilizzata per aggiornare l'utente. * * Può includere informazioni come l'ID, il nome, * cognome e così via. * * Al successo, usawp_redirect
per tornare alla homepage o ricaricare * la pagina per mostrare un errore. * / function example_delete_individual ($ individual_id) / * Usa l'ID in entrata per localizzare il singolo record e rimuoverlo * dal database. * * Al successo, usawp_redirect
per tornare alla homepage o ricaricare * la pagina per mostrare un errore. * / function example_updating_user () return 0 == strpos ($ _SERVER ['REQUEST_URI'], '/ individual / update'); function example_deleting_user () return 0 == strpos ($ _SERVER ['REQUEST_URI'], '/ individual / delete');
Si noti sopra che la prima funzione è agganciata al dentro
azione ed è solo attivato se l'utente non ha effettuato l'accesso come amministratore. Questo potrebbe essere ulteriormente migliorato impostandolo condizionalmente per caricare solo se proviene da una determinata pagina; tuttavia, per questo esempio, serve al suo scopo.
Quindi, leggi i commenti del codice per Aggiornare
e il Elimina
funzioni per vedere come dovrebbero funzionare.
Infine, si noti che le ultime due funzioni sono semplici helper pensati per permetterci di scrivere codice più pulito nella funzione hooked iniziale.
So che questo è un esempio un po 'incompleto, ma per un lungo articolo e un argomento complesso, ho mirato a fare il meglio che posso per mostrare l'API di WordPress Rewrite, discutere i vantaggi di usarlo e parlare di come può essere utilizzato per creare percorsi URL più puliti.
La verità è che è ancora un po 'un argomento stimolante ed è quello che è meglio afferrare attraverso l'implementazione. Tuttavia, questo è un altro componente dell'applicazione WordPress che consente di fungere da base per lo sviluppo di applicazioni Web.
Con tutto ciò detto, è ora di passare al concetto di caching.
Certo, ci sono molti plugin per la cache che sono disponibili per WordPress, ma se sei uno sviluppatore, stai cercando di creare un livello di cache nativa e stai cercando di sfruttare le API di WordPress per farlo. Se è così, è importante familiarizzare con ciò che è disponibile e come farlo.
Detto questo, rivolgeremo la nostra attenzione al API Transients in modo che possiamo gestire un po 'di cache nativa da soli e rivedere come questo possa aiutare i meccanismi di caching di terze parti a rendere le nostre applicazioni ancora più veloci.