Riscrivere gli URL in WordPress Tips e Plugin
I più recenti aggiornamenti di WordPress hanno permesso agli sviluppatori di personalizzare il loro sito personale molto rapidamente. È semplice aggiornare le aree del tema, sostituire i widget nella barra laterale e persino scrivere le tue funzioni di codice PHP personalizzate. La distesa è enorme - e un'area di popolarità sta riscrivendo i permalink dell'URL.
Esistono alcuni metodi che è possibile utilizzare per aggiornare il sistema di riscrittura WordPress predefinito. In questo tutorial condividerò alcuni esempi e dimostrerò quanto possa essere semplice il processo. Avrai bisogno di una certa comprensione di PHP per seguire cosa sta succedendo nel codice, ma è così facile da copiare e incollare nel tuo modello, praticamente non c'è lavoro.
Informazioni su WP_Rewrite
Se si ha familiarità con mod_rewrite su server Apache, si ascolterà la sintassi di riscrittura di WordPress. Il loro sistema è ancora costruito in cima a un .htaccess file, ma tutte le regole sono codificate in PHP. Ciò rende il processo un po 'più semplice poiché abbiamo più controllo sulla scrittura dei nostri URL.
Vi consiglio di sfogliare la pagina di $ wp_rewrite perché ha un'infinità di informazioni sull'argomento. Ci sono anche piccoli esempi a cui possiamo fare riferimento per rendere tutto più facile da capire. La maggior parte del codice può essere scritta direttamente nel tuo tema functions.php file. Iniziamo guardando le riscritture predefinite già incluse in WordPress.
Contenuto di $ wp_rewrite-> regole
Dichiarando il $ wp_rewrite
classe come globale abbiamo accesso a tutti i dati interni. Quando vai ad aggiungere le tue regole queste vengono aggiunte in un array con il nome $ Wp_rewrite-> regole
. È importante ricordare questa variabile poiché è probabile che tu debba fare riferimento ai dati molte volte durante lo sviluppo.
regole); ?>
Ho aggiunto questo blocco di codice al mio tema page.php file. Produrrà una vasta gamma di dati che sembra un gran casino. Ma se tu Vedi la fonte sulla tua pagina è in realtà facile vedere quali regole di riscrittura sono abbinate al nome del file. Ad esempio, esaminiamo le regole per le riscritture di categorie:
[categoria /(.+?)/?$] => index.php? category_name = $ corrisponde a [1]
Il bit sul lato sinistro tra parentesi è la nostra Apache RewriteRule da cercare. A partire dalla sezione /categoria/ seguito da qualsiasi stringa di caratteri. Se questo corrisponde, il server sa come fare riferimento index.php? CATEGORY_NAME =
mentre si sostituisce la variabile alla fine.
Impostazione di permalink personalizzati
C'è così tanto contenuto da passare nella classe $ wp_rewrite da solo. Molte altre proprietà possono essere referenziate, come ad esempio $ Wp_rewrite-> category_base
o $ Wp_rewrite-> author_base
per estrarre le strutture URL predefinite per queste pagine. Ma oltre a tirare le impostazioni di default di WP possiamo anche costruire le nostre regole.
Ricostruzione della Base dell'autore
Quando si accede alla pagina delle impostazioni Permalinks, è possibile ripristinare le categorie e le basi dei tag. Tuttavia, la possibilità di ripristinare la base dell'autore è stranamente mancante.
Ma possiamo usare il add_rewrite_rule ()
dal codice di WordPress per integrare alcune nuove impostazioni. In questo caso l'ho sostituito /autore/ con /scrittore/ ma puoi usare qualsiasi base tu voglia. Inoltre ho copiato alcuni degli altri reindirizzamenti per pagine di autori e feed RSS. Puoi aggiungere questo blocco di codice nel file functions.php del tuo tema.
add_action ('init', 'add_author_rules'); function add_author_rules () add_rewrite_rule ("writer / ([^ /] +) /?", "index.php? author_name = $ corrisponde a [1]", "top"); add_rewrite_rule ("writer / ([^ /] +) / page /? ([0-9] 1,) /?", "index.php? author_name = $ corrisponde a [1] & paged = $ corrisponde a [2] ", "superiore"); add_rewrite_rule ("writer / ([^ /] +) / (feed | rdf | rss | rss2 | atom) /?", "index.php? author_name = $ corrisponde a [1] & feed = $ corrisponde a [2]", " superiore"); add_rewrite_rule ("writer / ([^ /] +) / feed / (feed | rdf | rss | rss2 | atom) /?", "index.php? author_name = $ corrisponde a [1] & feed = $ corrisponde a [2]" , "superiore");
È possibile accedere a questa funzione anche senza utilizzare la variabile $ wp_rewrite. Alcuni sviluppatori preferiscono questo metodo perché è più semplice rispetto all'hard coding con proprietà di classe. Tuttavia ho notato che questo metodo non è sempre affidabile per alcune installazioni di WordPress. C'è in realtà una seconda opzione per aggiungere queste regole al gancio dopo aver svuotato il tuo .htaccess (vedi sotto).
Base dell'autore che utilizza generate_rewrite_rules
Scrivendo per questo metodo avremo di nuovo bisogno della classe globale $ wp_rewrite. Ho quindi impostato una nuova variabile denominata $ new_rules
che contiene un array associativo di dati. Il mio codice di esempio qui sotto riscrive semplicemente per la sezione della pagina autore di base.
function generate_author_rewrite_rules () global $ wp_rewrite; $ new_rules = array ("writer / ([^ /] +) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> rules;
Ma se vogliamo includere più pagine e feed RSS, possiamo rinforzare l'array. Hai la possibilità di creare una funzione PHP per spingere dati di array associativi che potrebbero essere un po 'troppo complessi. Potremmo anche dividere i blocchi di dati tramite virgole, comportandoci come entità separate nella matrice. Controlla nuovamente il mio codice aggiornato scritto nel file theme functions.php.
function generate_author_rewrite_rules () global $ wp_rewrite; $ new_rules = array ("writer / ([^ /] +) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1), "writer / ([^ /] +) / page /? ([0-9] 1,) /? "=>" Index.php? Author_name = ". $ Wp_rewrite-> preg_index (1)." & Paged = ". $ Wp_rewrite-> preg_index (2), "writer / ([^ /] +) / (feed | rdf | rss | rss2 | atom) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1). "& feed =". $ wp_rewrite-> preg_index (2), "writer / ([^ /] +) / feed / (feed | rdf | rss | rss2 | atom) /?" => "index.php? author_name =". $ wp_rewrite- > preg_index (1). "& feed =". $ wp_rewrite-> preg_index (2)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> rules;
Ricorda che nessuno di questi metodi funzionerà fino a quando non avrai svuotato le regole di riscrittura originale. Dovrai farlo ogni volta che apporti delle modifiche a queste funzioni, ma in seguito le tue nuove regole rimarranno valide per sempre.
Flushing the Rewrite Rules
Ogni volta che si aggiorna il codice di riscrittura dell'URL, le modifiche non vengono applicate immediatamente. Devi svuotare le regole di riscrittura .htaccess in modo che il tuo nuovo codice verrà aggiunto. Tuttavia, eseguendo questo su ogni pagina, init è estremamente dispendioso poiché scrive sul database e aggiorna il file .htaccess.
Un metodo migliore è quello di accedere alla pagina dei permalink nel pannello di amministrazione e di salvare nuovamente le modifiche. Questo richiama sempre un flush_rewrite_rules così non dovrai mai preoccuparti degli utenti sul frontend che hanno problemi di caricamento. E ci vuole solo una volta per ri-salvare la pagina e aggiornare tutte le regole del tuo sistema. Ma se questo non funziona, puoi provare a chiamare $ Wp_rewrite-> flush_rules ();
Utilizzo di regole non WP
Dentro il $ wp_rewrite
classe abbiamo accesso a decine di proprietà. Una delle opzioni più significative è $ Wp_rewrite-> non_wp_rules
che raccoglie una serie di reindirizzamenti che non colpiscono il file index.php.
Questo è in realtà usato più spesso nello sviluppo di plugin per WordPress. Puoi inviare un tipo di URL personalizzato specifico (ad esempio / Calendar / Giugno-2012 /
) nel backend del tuo sito web (/wp-content/plugins/calendarplug/myscript.php
). Ma naturalmente ci sono ulteriori usi per questo array associativo di regole di riscrittura personalizzate diverse dai plugin. Ho fornito un esempio eccellente nel contesto sottostante.
Mascherare i file del tema
Questo è un suggerimento comune che vedo spesso nei forum di discussione di WordPress. Idealmente vorremmo fare riferimento ad alcuni file all'interno di / Wp-content / themes / MyTheme /
cartella con un URL più elegante. Si noti che questo richiederà un diverso set di riscritture di WordPress per cambiare la struttura della directory.
Il sistema di riscrittura interno di WordPress spinge sempre il contenuto verso un singolo file di routing. Nel caso predefinito, usiamo index.php insieme a qualsiasi ulteriore stringa di dati di query. Ma per nascondere la nostra directory template standard (/ Wp-content / themes / MyTheme / *
) avremo bisogno di visualizzare molti file diversi.
add_action ('generate_rewrite_rules', 'themes_dir_add_rewrites'); function themes_dir_add_rewrites () $ theme_name = next (esplode ('/ themes /', get_stylesheet_directory ())); globale $ wp_rewrite; $ new_non_wp_rules = array ('css /(.*)' => 'wp-content / themes /'. $ theme_name. '/ css / $ 1', 'js /(.*)' => 'wp-content / themes / '. $ theme_name.' / js / $ 1 ',' images / wordpress-urls-rewrite /(.*) '=>' wp-content / themes / '. $ theme_name.' / images / wordpress-urls-rewrite / $ 1 ',); $ wp_rewrite-> non_wp_rules + = $ new_non_wp_rules;
Ho scritto una nuova funzione themes_dir_add_rewrites ()
per estrarre tutti i contenuti principali da questi URL più lunghi e reindirizzarli nel back-end. Si noti che stiamo usando questa altra proprietà misteriosa della classe $ wp_rewrite chiamata non_wp_rules
. Secondo i documenti, queste sono regole che non indirizzano al file index.php di WP e saranno gestite sul server.
La cosa eccezionale di queste regole non WP è che puoi ancora gestire il vecchio metodo URL abbastanza facilmente. Non c'è niente che ti impedisce di collegarti a:
/wp-content/themes/mytheme/images/wordpress-urls-rewrite/logo.jpg
.
Ma sembra molto più bello se puoi fare riferimento:
/images/wordpress-urls-rewrite/logo.jpg
anziché.
Strumenti utili e plugin
Ci sono solo alcuni strumenti che puoi utilizzare se sei bloccato con la codifica dei tuoi bei URL. Il processo è molto difficile da comprendere, quindi non scoraggiarti se stai lottando per un paio di settimane. Sento che il contenuto diventerà più facile mentre passi più tempo a esercitarti.
Ma per iniziare controlla alcuni di questi pratici strumenti e plug-in di riscrittura. Probabilmente non ti serviranno tutti, ma è fantastico trovare una base di sviluppatori così ampia che lavori attorno alle riscritture di WP.
Monkeyman Rewrite Analyzer
Quando si salta per la prima volta alle regole di riscrittura, questo plugin è un must. In realtà non cambia nessuna delle regole per il tuo sito web: ti consente semplicemente di testare il codice e vedere quali reindirizzamenti vanno a quali pagine. Funzionerà anche per testare variabili di query personalizzate per qualsiasi tipo di messaggio personalizzato.
AskApache RewriteRules Viewer
Questo è simile al plugin sopra, tranne che non ti permette di testare le tue regole. Invece questo plugin mostrerà tutte le regole WP predefinite del tuo sito web e dove reindirizzare a. Questo includerà tutte le principali proprietà di $ wp_rewrite
come le impostazioni di permalink e le basi di pagina / categoria / tag.
Controllo htaccess di WP
Qui hai un diverso set di regole per creare nuovi reindirizzamenti di pagine. Il plugin ha il suo pannello di amministrazione in cui puoi modificare variabili come la base dell'autore, le basi delle pagine e persino aggiungere le tue regole .htaccess personalizzate..
Questo metodo è diverso rispetto alla creazione del proprio usando wp_rewrite. Tuttavia potrebbe essere più facile per i tecnici che conoscono veramente i server Web e sentirsi più a proprio agio scrivendo direttamente in .htaccess.
Riscrivi il tester di regole
Questo in realtà non è un plugin per WordPress, ma è sicuramente uno strumento utile da tenere in archivio. Puoi copiare le regole di riscrittura e testarle per il tuo sito web senza dover modificare il tuo file .htaccess. Questo è il metodo perfetto per rimuovere bug dalla sintassi prima di avviarli dal vivo sul Web.
DW ReWrite
DW Rewrite è un plugin molto semplice che crea 3 URL graziosi unici immediatamente dopo l'installazione. Per impostazione predefinita, cambierà i collegamenti di amministrazione, accesso e registrazione a / admin
, /accesso
, e /Registrare
rispettivamente.
Questo può essere utile se hai bisogno di una soluzione rapida per un blog con più autori. Nasconderà in modo specifico il link di registrazione WordPress in modo imbarazzante (/wp-login.php?action=register
).
Conclusione
Spero che questo tutorial possa fornire alcuni esempi per farti pensare alle riscritture di WordPress. Il CMS è molto popolare e gli sviluppatori continuano a produrre nuove funzionalità ogni giorno. La personalizzazione dei tuoi URL è una parte enorme della funzionalità basata sull'utente. Offre al tuo sito Web una presenza e un marchio unici rispetto alle opzioni predefinite.
Se hai problemi con le regole di riscrittura, non dovrebbe mai essere difficile annullare il danno. Semplicemente eliminando il codice funzione e svuotando le regole .htaccess sembrerebbe che nulla sia cambiato. Assicurati di dare un'occhiata ad altri articoli simili che puoi trovare sull'argomento. E se hai domande o commenti, puoi condividerli con noi nell'area di discussione post.