Perché non dovresti Code URL in WordPress o temi Plugin

Quando sviluppi un tema o un plugin, troverai spesso che devi includere un URL nel tuo codice. Ad esempio, in un plug-in potrebbe essere necessario un collegamento a un foglio di stile in bundle con il plug-in, mentre in un tema probabilmente si desidera codificare l'URL del sito nell'intestazione.

Potrebbe essere tentato di codificare semplicemente l'URL nello stesso modo in cui lo si potrebbe trovare in un sito statico, ma è una cattiva idea. In questo tutorial spiegherò perché non dovresti farlo e mostrarti le funzioni che puoi utilizzare per creare gli URL in modo dinamico.

Perché non dovresti codificare gli URL nei tuoi temi e plug-in

Iniziamo con i temi. Se stai sviluppando un tema da utilizzare su un sito specifico, potrebbe non sembrare troppo dannoso aggiungere da qualche parte il dominio del sito nei file del tema, ma ci sono alcuni rischi e svantaggi:

  • Se decidessi di cambiare il nome di dominio del sito, dovrai modificare tutti gli URL che hai hard-coded.
  • Se stai lavorando su un sito di sviluppo che trasferirai su un server live all'avvio, dovrai modificare tutti gli URL che hai hard-coded.
  • Se decidi di utilizzare il tema su un altro sito, dovrai modificare tutti quegli URL.
  • Se decidi di rilasciare il tema al pubblico o lasciare che altri sviluppatori lo usino, si romperà.
  • Se utilizzi il tema come base per un altro tema sviluppato per un altro sito, dovrai modificare tutti gli URL.
  • Se il tuo sito si trova in una sottodirectory della directory principale del tuo dominio ma hai detto a WordPress di usare la directory root per l'URL, gli URL hard-coded potrebbero puntare al posto sbagliato.
  • Se ti dimentichi di fare quanto sopra, il tuo sito riceverà 404 errori e i link a risorse come immagini e fogli di stile non funzioneranno.

Quindi non farlo!

Ma per quanto riguarda i plugin? Bene, questo è ancora più rischioso. Non è raro sviluppare un tema solo per un sito, ma la maggior parte dei plugin verrà utilizzata su più siti. È improbabile che tu possa mai codificare un URL completo in un plug-in, ma potresti essere tentato di utilizzare una funzione per recuperare l'URL del sito e quindi codificare il percorso della directory del plug-in. Di nuovo, questo è rischioso:

  • Se il tuo plugin viene spostato in una directory diversa (come la directory use must), tutti i link si interromperanno.
  • Se il tuo plug-in è installato in una rete multisito con una versione precedente di WordPress, i tuoi collegamenti potrebbero interrompersi.
  • Se il tuo plug-in è installato in un sito utilizzando una struttura di directory diversa da quella che hai usato per i tuoi URL, di nuovo i collegamenti si interromperanno.

Ciò potrebbe comportare il tuo plugin semplicemente non funziona affatto.

Quindi, cosa fai per evitare gli URL hard-coding in WordPress?

Funzioni da utilizzare al posto degli URL codificati

Ci sono una varietà di funzioni che usi per evitare gli URL hard-coding in WordPress. Li dividerò in cinque categorie:

  • funzioni per recuperare la home page del sito
  • funzioni per recuperare altri collegamenti front-end (inclusi post, pagine, allegati e archivi)
  • funzioni per recuperare gli URL per le schermate di amministrazione
  • funzioni per recuperare gli URL per i file nel tuo plugin e nelle directory del tema
  • funzioni per recuperare fogli di stile e script

Iniziamo con le funzioni per recuperare e generare un collegamento alla home page.

Recupero dell'URL della pagina iniziale

I seguenti tag di modello recuperano o restituiscono l'URL della home page per il tuo sito:

  • bloginfo ('url'): visualizza l'home URL come specificato nelle impostazioni di lettura nell'amministratore.
  • get_bloginfo ('url'): recupera l'URL del sito senza visualizzarlo.
  • HOME_URL (): recupera l'URL della home page senza visualizzarlo: use echo esc_url (home_url ('/')); per visualizzare l'URL principale con una barra finale. Questo richiede due parametri opzionali: $ path se si desidera aggiungere un percorso a una pagina specifica o aggiungere una barra finale, e schema di $ per specificare lo schema per l'URL, ad esempio http, https e parente.
  • get_home_url () recupera l'URL per la pagina iniziale e supporta Multisite: è possibile includere l'ID del blog come parametro.
  • indirizzo del sito(): l'URL in cui è stato salvato WordPress, quindi se l'installazione di WordPress si trova nella sottodirectory wordpress, questo recupererà l'URL http://mysite.com/wordpress
  • get_site_url (): Recupera l'URL del sito senza emetterlo. Può anche essere utilizzato con parametri per generare l'URL di un sito in una rete multisito, aggiungere un percorso e utilizzare uno schema specifico.
  • network_home_url (): l'home URL per il sito principale in una rete Multisito, utile se si desidera includere un collegamento al sito principale nel footer di ciascun sito sulla rete, ad esempio.
  • network_site_url (): l'URL del sito per il sito principale in una rete multisito.

Come puoi vedere, ci sono alcuni tag diversi che puoi usare per visualizzare l'URL. Che usi dipenderà da un numero di attori:

  • Vuoi semplicemente recuperare l'URL o visualizzarlo?
  • Vuoi aggiungere un percorso dopo l'home URL? (Puoi evitarlo in alcuni casi usando le funzioni nella prossima sezione.)
  • Vuoi specificare lo schema?
  • Vuoi recuperare l'URL della home page o l'URL del sito, se questi sono diversi?
  • Vuoi recuperare l'URL per un sito in una rete Multisite?

Si dovrebbe usare uno di questi nei file del modello del tema in cui si desidera inserire un collegamento alla home page, ad esempio se un logo nella testa del sito collega alla home page. Potrebbero esserci anche casi in cui un plugin dovrà recuperare o visualizzare l'URL della home page.

Recupero di altri URL front-end

Oltre all'URL della pagina iniziale, potrebbero esserci delle volte in cui desideri codificare i collegamenti ad altre pagine del tuo sito. Ciò includerà pagine, post, allegati e tipi di post personalizzati. Ecco le funzioni che dovresti usare:

  • post_permalink () genera un collegamento a un post, con l'ID del post come parametro.
  • get_page_link () recupera (ma non emette) il collegamento a una pagina, con l'ID della pagina come parametro.
  • get_permalink () recupera (ma non emette) il permalink per un post o una pagina, con l'ID del post o della pagina come parametro.
  • get_category_link () recupera il collegamento a un archivio di categorie, con l'ID della categoria come parametro.
  • get_tag_link () recupera il link alla pagina di archivio di un tag, con l'ID del tag come parametro.
  • get_post_type_archive_link () recupera il collegamento all'archivio di un tipo di post, con il tipo di post come parametro.
  • get_term_link () recupera il collegamento a un termine di tassonomia, con il termine e la tassonomia come parametri.
  • the_attachment_link () genera il collegamento a un allegato, con l'ID allegato come primo parametro. Usa altri parametri per definire la dimensione dell'immagine e se il link porterà al file stesso o alla sua pagina di allegato.
  • get_attachment_link () recupera il collegamento per un allegato, con l'ID allegato come parametro.
  • wp_get_attachment_link () inoltre recupera il collegamento a un allegato, ma in aggiunta consente di visualizzare l'immagine se l'allegato è un'immagine, in base alla dimensione specificata.
  • get_search_link () recupera il link alla pagina di ricerca. È possibile definire una query come parametro o lasciarla vuota, nel qual caso utilizzerà la query corrente.

Recupero degli URL di amministrazione

Se stai creando un plugin o un tema con le schermate delle impostazioni nell'amministratore di WordPress, o stai personalizzando le schermate di amministrazione, potresti voler aggiungere dei link alle schermate di amministrazione. Anche in questo caso, non è necessario codificare a fondo gli URL, ma utilizzare uno di questi tag:

  • ADMIN_URL () recupera (ma non emette) un URL nell'admin. È necessario includere il percorso dell'URL come parametro e, se necessario, includere lo schema. Quindi, ad esempio, per generare l'URL per lo schermo per creare un nuovo post, useresti echo admin_url ('post-new.php');.
  • get_admin_url () è simile a ADMIN_URL () ma supporta reti multisito: è possibile includere l'ID del blog come parametro.
  • edit_post_link () visualizza un collegamento alla pagina di modifica per un post. Può essere usato nel loop o fuori dal ciclo con l'ID del post come parametro.
  • get_edit_post_link () recupera il collegamento alla schermata di modifica di un post, con l'ID del post come parametro.

Recupero di file nel tuo plug-in e cartelle tematiche

Proprio come quando stai codificando gli URL nelle schermate front-end o di amministrazione, dovresti anche codificare correttamente URL e percorsi quando fai riferimento ai file nel tuo plugin o nelle cartelle dei temi. 

Innanzitutto, ecco le funzioni che dovresti usare nei file del tema:

  • get_stylesheet_directory () recupera il percorso completo del server (non l'URL) per la directory del tema attualmente attivato. Usalo per chiamare i file include piuttosto che per i link di output.
  • get_stylesheet_directory_uri () recupera l'URL per il tema attualmente attivato, senza una barra finale. Usalo nei file di modello per recuperare le risorse memorizzate nella cartella del tema: ad esempio, per visualizzare un'immagine memorizzata nella cartella delle immagini del tema, usa .
  • get_bloginfo ('stylesheet_directory') recupera l'URL per il tema attualmente attivato: utilizzando get_stylesheet_directory_uri () è più ordinato.
  • get_template_directory_uri () è simile a get_stylesheet_directory_uri () ma se stai usando un tema figlio, recupera l'URL per il tema principale. allo stesso modo, get_template_directory () funziona allo stesso modo di get_stylesheet_directory () ma per il tema genitore.

Ci sono anche funzioni per l'uso nei file plugin:

  • plugins_url () recupera l'URL assoluto della directory dei plug-in (senza una barra finale). Sono necessari due parametri opzionali: il percorso da aggiungere dopo l'URL e il plug-in al quale si desidera che l'URL sia relativo.
  • plugin_dir_url () recupera l'URL per la directory in cui si trova un file (con una barra finale), con quel file come parametro. Normalmente lo useresti __FILE__ come parametro per indicare il file corrente.

Ecco un esempio di ciascuno di questi. In primo luogo, per recuperare l'URL di un file nella directory include del plugin corrente:

plugins_url ('includes / myfile.php', __FILE__);

E per recuperare lo stesso URL usando plugin_dir_url ():

plugin_dir_url (__FILE__). 'include / myfile.php';

Nota che con il secondo esempio devi echo il percorso dopo la funzione: preferisco il primo in quanto è più ordinato. Non dimenticare che il secondo restituisce una barra finale e la prima no.

Recupero di fogli di stile e script

Non devi mai codificare i collegamenti a fogli di stile e script nei tuoi file modello o plug-in: usa invece una funzione e collegala al gancio corretto. Questo evita problemi con i file che vengono spostati, garantisce che stai usando gli script corretti senza duplicazione ed è anche più efficiente.

Per chiamare un foglio di stile, utilizzare wp_register_style ()wp_enqueue_style () in una funzione e agganciarlo al wp_enqueue_scripts gancio. La funzione seguente farebbe questo in un plugin:

Nota che ho usato __FILE__ sopra, che indica a WordPress che il percorso del foglio di stile è relativo al file corrente.

Chiamare uno script è simile, ma usa wp_register_script () e wp_enqueue_script () nella tua funzione, e li attacca al wp_enqueue_scripts gancio. L'esempio seguente registra un nuovo script e lo chiama:

function register_my_scripts () wp_register_script ('my_script', plugins_url ('/js/script.js', __FILE__)); wp_enqueue_script ('my_script');  add_action ('wp_enqueue_scripts', 'register_my_scripts');

Se il tuo script usa uno script in bundle con WordPress, come jQuery, non è necessario registrarlo; basta accodarlo come segue:

function register_my_scripts () wp_enqueue_script ('my_script', plugins_url ('/js/script.js', __FILE__), 'jquery',, 'true');  add_action ('wp_enqueue_scripts', 'register_my_scripts');

Maggiori informazioni su wp_enqueue_scripts aggancio in questo tutorial sull'inclusione di JavaScript e CSS nei temi e nei plugin.

Sommario

Spero di averti convinto che gli URL hard-coding in WordPress sono una cattiva idea: possono portare a tutti i tipi di problemi in futuro, ed è meno efficiente. A seconda di dove è necessario collegarsi, WordPress fornisce una funzione per sostituire qualsiasi URL hard-coded, nei temi o nei plugin. Puoi utilizzare le funzioni e i tag dei modelli per collegarti alle pagine nel front-end del tuo sito, inclusa la home page, alle schermate sull'amministratore di WordPress e ai file nei tuoi modelli o plug-in.