WordPress

Codice ridondante in WordPress: perché è un rischio (e come evitarlo)

Aggiungere funzioni personalizzate al file functions.php sembra la soluzione più rapida. Ma quando quella funzionalità esiste già nel plugin, si scrive codice ridondante che prima o poi si ritorce contro.

Codice ridondante in WordPress: perché è un rischio (e come evitarlo)
I punti chiave

Qualche settimana fa stavo lavorando su un sito WordPress che utilizza Contact Form 7 per la gestione dei moduli di contatto. Aprendo il file functions.php ho trovato alcune funzioni personalizzate aggiunte nel corso del tempo da chi aveva lavorato sul progetto prima di me. Niente di clamoroso in apparenza: una funzione recuperava l'URL della pagina corrente, un'altra l'indirizzo IP dell'utente al momento dell'invio del modulo. Tutto funzionava. Il problema è che quel codice non avrebbe mai dovuto essere scritto.

Contact Form 7 include già questi dati attraverso i propri tag speciali, senza bisogno di una riga aggiuntiva nel tema. Il codice presente nel functions.php era, in tutti i sensi, superfluo.

Questo episodio è un buon punto di partenza per parlare di un problema che si incontra spesso nei progetti WordPress: il codice ridondante. Codice che non è sbagliato in senso assoluto, ma che esiste dove non dovrebbe, duplica funzionalità già presenti o risolve problemi che non esistono più. Codice che, nel tempo, diventa un rischio.

Cosa si intende per codice ridondante

In uno sviluppo front-end o in un progetto WordPress, il codice ridondante è tutto ciò che svolge una funzione già assolta da un'altra parte: dal core di WordPress, da un plugin attivo, da una libreria già inclusa nel tema.

Le origini sono quasi sempre le stesse. Lo sviluppatore originale non conosceva a fondo le funzionalità native del CMS o del plugin. Oppure le conosceva, ma ha preferito una soluzione rapida e familiare. A volte il codice era necessario in una versione precedente del progetto e non è stato rimosso quando il contesto è cambiato. In altri casi, la soluzione è stata copiata da una guida online senza verificare se il plugin in uso offrisse già qualcosa di equivalente.

Il risultato è un file functions.php che cresce nel tempo, non per aggiungere valore, ma per accumulare soluzioni parziali a problemi già risolti altrove.

Il caso Contact Form 7: i tag speciali che nessuno usa

Contact Form 7 è uno dei plugin WordPress più diffusi. La maggior parte di chi lo usa conosce i tag standard, quelli che mappano i campi del modulo: [your-name], [your-email], [your-message] e così via. Molto meno nota è la categoria dei tag speciali (special mail-tags), che permettono di inserire nel corpo dell'email informazioni contestuali senza aggiungere alcun campo al modulo e senza scrivere codice PHP.

Ecco quelli disponibili, suddivisi per categoria.

Dati relativi all'invio

  • [_remote_ip] — l'indirizzo IP dell'utente al momento dell'invio
  • [_user_agent] — le informazioni sul browser utilizzato
  • [_url] — l'URL della pagina in cui è inserito il modulo
  • [_date] — la data dell'invio (nel formato impostato in WordPress)
  • [_time] — l'ora dell'invio
  • [_invalid_fields] — il numero di campi compilati in modo non valido
  • [_serial_number] — un numero progressivo per ogni invio (richiede il plugin Flamingo)

Dati relativi al post

Questi tag funzionano quando il modulo è inserito nel contenuto di un post o di una pagina. Non funzionano se il modulo è in un widget o in un template del tema.

  • [_post_id] — l'ID del post
  • [_post_name] — lo slug del post
  • [_post_title] — il titolo del post
  • [_post_url] — il permalink del post
  • [_post_author] — il nome dell'autore
  • [_post_author_email] — l'email dell'autore

Dati relativi al sito

Utili soprattutto quando si riutilizza lo stesso template di modulo su più siti.

  • [_site_title] — il nome del sito
  • [_site_description] — la descrizione (tagline) del sito
  • [_site_url] — l'URL principale del sito
  • [_site_admin_email] — l'email dell'amministratore principale

Dati relativi all'utente loggato

Questi tag funzionano solo se l'utente ha un account sul sito ed è autenticato. Se si vuole usarli senza la modalità subscribers-only, è necessario attivare l'impostazione nonce nel modulo, altrimenti i dati potrebbero non essere disponibili correttamente a causa della REST API di WordPress.

  • [_user_login] — il nome utente
  • [_user_email] — l'email dell'utente
  • [_user_url] — il sito web dell'utente
  • [_user_first_name] — il nome
  • [_user_last_name] — il cognome
  • [_user_nickname] — il nickname
  • [_user_display_name] — il nome visualizzato

La documentazione ufficiale di questi tag è disponibile sul sito di Contact Form 7, ma non è immediatamente visibile dall'interfaccia del plugin. Nell'editor del modello email è presente un link verso le istruzioni generali; solo in fondo a quell'articolo compare un rimando ai tag speciali. Una collocazione che non aiuta la scoperta.

Perché il codice ridondante è un problema reale

La funzionalità immediata non è in discussione: il codice che ho trovato nel functions.php funzionava. Ma "funziona" non è sufficiente per valutare la qualità di un progetto WordPress nel lungo periodo.

Conflitti con gli aggiornamenti

WordPress e i plugin vengono aggiornati regolarmente. Il core introduce nuove funzioni, i plugin modificano i propri hook e filtri. Una funzione personalizzata scritta per ovviare a una mancanza può diventare incompatibile con la versione successiva del plugin, o può entrare in conflitto con una funzione nativa introdotta in seguito. Più codice personalizzato c'è, più variabili entrano in gioco a ogni aggiornamento.

Superficie di attacco più ampia

Ogni funzione aggiuntiva in functions.php è codice eseguito lato server. Codice che, se scritto senza le dovute verifiche, può diventare un vettore di vulnerabilità. Funzioni che recuperano l'IP dell'utente o l'URL corrente, se non gestite correttamente, possono essere manipolate. I plugin come Contact Form 7 gestiscono questi dati con sanitizzazione integrata e un ciclo di sicurezza consolidato. Il codice personalizzato scritto in fretta raramente ha lo stesso livello di attenzione.

Difficoltà di manutenzione

Chi prende in carico un progetto in un secondo momento deve capire cosa fa ogni funzione personalizzata, perché è stata aggiunta e se è ancora necessaria. Senza documentazione, questa analisi richiede tempo. Il rischio è che nessuno tocchi quel codice per prudenza, lasciandolo accumulare versione dopo versione.

Dipendenza implicita dal tema

Le funzioni nel functions.php sono legate al tema attivo. Se il sito cambia tema, quelle funzioni scompaiono. Se erano davvero necessarie, il sito smette di funzionare correttamente. Se erano ridondanti, nessuno se ne accorge subito — e questo è un segnale del problema originale.

La regola di base: leggere prima di scrivere

Il principio che emerge da questo caso è semplice: prima di aggiungere una funzione personalizzata, conviene verificare se quella funzionalità esiste già. Questo vale per WordPress in generale, ma vale in modo specifico per i plugin con un'API ben documentata.

Contact Form 7 è un buon esempio proprio perché la documentazione dei tag speciali è disponibile ma poco visibile. Non è un problema del plugin in quanto tale — le funzionalità ci sono e funzionano bene — è un problema di scoperta. L'interfaccia potrebbe fare di più per renderle accessibili, per esempio con un selettore direttamente sopra il campo del corpo del messaggio che mostri i tag disponibili e li inserisca con un clic. Per ora non esiste, quindi la conoscenza di questi tag dipende da chi configura il modulo.

Cosa fare con il codice ridondante già presente

Scoprire codice ridondante in un progetto esistente è frequente. La cosa importante è non lasciarlo semplicemente lì.

Il primo passo è capire se quella funzione fa davvero qualcosa che non è già gestito altrove. Nel caso del functions.php con CF7: il tag [_remote_ip] copre il recupero dell'IP, il tag [_url] copre l'URL della pagina. La funzione personalizzata è inutile e può essere rimossa.

Il secondo passo è verificare che la rimozione non rompa nulla. Se il codice era agganciato a un hook o usato in un template, occorre tracciare tutte le sue occorrenze prima di eliminarlo.

Il terzo passo è documentare cosa è stato rimosso e perché, così che chiunque lavori in futuro sul progetto possa capire le scelte fatte.

Il costo nascosto del codice non necessario

C'è un aspetto economico in tutto questo che riguarda direttamente i proprietari di siti WordPress, non solo chi sviluppa.

Un progetto con codice ridondante accumula debito tecnico. Ogni aggiornamento di WordPress o dei plugin richiede più tempo di verifica. Ogni intervento di manutenzione richiede un'analisi più lunga. Ogni problema richiede più diagnosi. Questi tempi si traducono in costi, spesso difficili da prevedere perché si distribuiscono nel tempo e non sono immediatamente visibili.

Un audit tecnico del sito permette di identificare queste situazioni: codice personalizzato non necessario, funzioni duplicate, hook e filtri che duplicano funzionalità native, dipendenze da plugin o librerie non più necessarie. Non si tratta di trovare errori evidenti, ma di valutare la qualità complessiva del progetto rispetto alla sua manutenibilità futura.

Conclusione

Il caso di Contact Form 7 e dei suoi tag speciali è un esempio concreto di un problema più ampio: aggiungere codice è facile, sapere quando non aggiungerlo richiede conoscenza. La documentazione dei plugin va letta prima di aprire il file functions.php.

Un sito WordPress ben costruito non è necessariamente quello con più funzionalità personalizzate. È quello in cui ogni riga di codice ha una ragione di esistere, in cui le funzionalità native vengono sfruttate al massimo e in cui il codice aggiuntivo è limitato a ciò che non può essere fatto in altro modo. Questo approccio riduce i rischi, semplifica la manutenzione e abbassa i costi nel tempo.

Se hai dubbi sulla qualità del codice del tuo sito WordPress — o hai ereditato un progetto su cui non hai una visione chiara — posso analizzarlo nel dettaglio. Un audit tecnico è il punto di partenza per capire cosa c'è, cosa può essere rimosso e cosa andrebbe fatto diversamente.

Rimani aggiornato con gli articoli del mio magazine anche su LinkedIn!
I punti chiave