I temi e plugin di WordPress in molti casi lavorano separatamente ad eccezione di quando si tratta di implementare le funzioni, ad esempio quando si tratta di attivare widget in modo tale che possa rilasciare il widget del plugin in un punto esatto del tema o collocando frammenti di codice PHP del plugin nel tema.
In molti casi attivano funzionalità attraverso gli hook di WordPress. Quando entra in gioco il file functions.php può succedere che si verificano conflitti con i plugin. L’obiettivo di questo articolo è proprio quello di spiegare quando utilizzare un plugin e quando il file functions.php. Poniamo queste 3 domande:
- il plugin che stiamo per installare è fondamentale?
- il plugin aggiunge delle funzionalità troppo complesse che non possono essere gestite internamente nel tema?
- il plugin deve operare all’esterno del nostro tema?
Se tutte e 3 queste domande hanno come risposta: Si, allora bisogna scegliere il plugin al posto del functions.php. Andiamo più nel dettaglio.
Plugin: estendere funzionalità di WordPress
Il linea generare possiamo dire che tutto ciò che estende le funzionalità di WordPress deve essere contenuto all’interno di un plugin, vuol dire che se abbiamo la necessità di aggiungere al nostro sito qualche funzionalità che non sapremmo come fare altrimenti, dobbiamo farlo con un plugin. Esempio tipico potrebbe essere l’integrazione con applicazioni di terzi.
N.B. => Aggiungere un loop personalizzato oppure un widget da posizionare dopo il contenuto di un articolo, non vuol dire estendere le funzionaltà di WordPress. Quindi possiamo farlo direttamente da codice nel file functions.php o nel template di pagina senza aggiungere un plugin.
I campi personalizzati (custom field) anche se possono essere creati direttamente nel functions.php del nostro tema potrebbero essere aggiunti tramite plugin nel caso in cui abbiamo bisogno di un’interfaccia di configurazione più elaborata. Un plugin che mi sento di consigliare è Advanced Custom Fields.
I Plugin potrebbero rallentare il sito web
Nè ai motori di ricerca nè agli utenti piace un sito web lento, la velocità di caricamento dipende dal tipo di contenuto e da come questo viene servito al browser e quindi all’utente. Spesso capita di avere siti web con decine e decine di plugin attivati. Quando si attiva un plugin si sta aggiungendo codice in pagina (almeno un funzione PHP) e si avviano chiamate al database affinchè quest’ultimo fornisce un contenuto. Se immaginiamo, in una pagina, 20 plugin ognuno dei quali avvia un loop, il server viene sottoposto ad un carico di lavoro enorme, rendendolo più lento e nei casi peggiori restituisce un errore 500 (status code 500). Se vuoi approfondire gli status code ti consiglio questa guida: https://www.evemilano.com/status-code/
Se, comunque, abbiamo necessità di utilizzare molti plugin è bene avere un ottimo sistema di caching, come ad esempio W3 Total Cache o WP Super Cache.
=> Visto che la configurazione di W3 Total Cache può risultare complicata vi lascio il link ad un buona guida: Guida Completa a W3 Total Cache
Quindi quando si utilizza functions.php?
Una best practise potrebbere essere: utilizzare il file functions.php per aggiungere una funzionalità unica per il tema.
Il functions.php è legato ad un tema specifico, quindi se cambiamo tema le funzionalità aggiunte nel functions.php non saranno disponibili e dovremmo ricrearle da zero, i contenuti non verrano e restituiti e c’è il rischio che si generano degli errori.
Quando si cambia tema si potrebbero spostare le funzionalità aggiunte nel nuovo functions.php ma non sempre possono essere valide, perché ad esempio sono connesse a quel layout specifico o alle pagine delle opzioni che cambierebbero in base al modo in cui un elemento viene aggiunto o visualizzato nel tema. Dato che collocare questa funzionalità in un plugin lo renderebbe obsoleto, la scelta del functions.php è preferibile.
=> Recap: I plugin sono utili per estendere le funzionalità di WordPress mentre il functions.php è utile per funzionalità uniche del tema.
Una valida soluzione può essere l’utilizzo dei temi child.