Functions.php – Aggiungere caratteristiche e funzionalità a WordPress

Il file functions.php, a differenza degli altri file che costituiscono un tema, non si occupa di definire l’aspetto e il layout del sito ma di aggiungere e modificare caratteristiche e funzionalità a WordPress. In pratica si comporta come un plugin e può essere usato per richiamare funzioni del core di WordPress o per definirne di nuove.

Ogni tema ha nella sua directory principale un file functions.php, ma sarà eseguito solo quello del tema attivo. Questo vuol dire che funzioneranno le funzionalità aggiuntive solo del tema corrente.

Ovviamente questo è un dettaglio da non trascurare poiché se hai intenzione di aggiungere funzionalità al tuo sito non dipendenti dal tema, piuttosto che implementarle all’interno del file functions.php, valuta l’opportunità di realizzare un plugin. Infatti, un plugin non è dipendente dal tema e resta attivo anche se si cambia l’aspetto del sito.

Un’altra particolarità del file functions.php è quella che se presente in un tema Child non sovrascriverà quello presente nel tema genitore, ma si limiterà di riscrivere solo le funzioni che hanno lo stesso nome. In pratica,  WordPress li esegue entrambi, ma prima esegue  il file functions.php del tema Child e poi quello del tema genitore.

Un altro dettaglio al quale devi stare attento quando scrivi delle funzioni in questo file è che queste saranno eseguite dopo i plugin. Quindi, se crei una funzione con lo stesso nome di una funzione presente in un plugin, si creerà un conflitto e verrà generato un errore.

Dopo questa introduzione, vediamo in pratica come implementare caratteristiche e funzionalità in un tema Worpress.

Introduzione a gli Hooks

Prima di proseguire e vedere come implementare il file functions.php, dobbiamo introdurre brevemente gli Hooks.

Gli Hooks (il cui significato è gancio) sono delle funzioni WordPress che ti permettono di aggiungere funzionalità o di modificare il comportamento del core in fase di esecuzione.

Il loro funzionamento è abbastanza semplice e si basa su un meccanismo che consiste nell’attivare una particolare funzione al verificarsi di uno specifico evento.

In pratica si scrive la funzione che aggiunge o modifica qualcosa e attraverso gli hooks si dice a WordPress in che momento dev’essere eseguita.

WordPress mette a disposizione degli sviluppatori essenzialmente due tipi di hooks che sono azioni o filtri.

Le azioni, dette anche Action Hooks sono richiamate attraverso la funzione add_action() e si occupano di modificare il comportamento di WordPress in fase di esecuzione o di aggiungere dati. Le actions possono generare un output da mostrare all’utente o inserire qualcosa all’interno del database. In ogni caso non restituiscono nulla alla funzione chiamante.

I filtri, detti anche Filter Hooks sono richiamate dalla funzione add_filter() e il loro compito è quello di modificare i dati durante l’esecuzione di WordPress. Le funzioni richiamate dai filtri, devono accettare almeno una variabile che dovranno elaborare o modificare e restituiranno un valore, ovvero la variabile in ingresso modificata. La variabile restituita sarà utilizzata dalle altre funzioni in fase di esecuzione.

Probabilmente il loro funzionamento in questo momento non è molto chiaro, ma vedrei che con qualche esempio e con un po’ di pratica sarà tutto più chiaro.

Come aggiungere caratteristiche e funzionalità ad un tema WordPress grazie a functions.php

Arrivati a questo punto possiamo creare un file functions.php e implementare al suo interno una funzione che inizializza il tema che stiamo creando. Chiameremo questa funzione miotema_setup() dove naturalmente la parola miotema sarà sostituita con il nome del tema che stiamo creando.

Iniziamo con lo scrivere il seguente codice:

if ( ! function_exists( 'miotema_setup' ) ) :
/**
* Inizializza e registra alcune funzionalità di WordPress
*
* 
* @since MioTema 1.0
*/
function miotema_setup() {
 } 

WordPress permette di creare menu personalizzati che possono essere modificati facilmente attraverso il pannello di amministrazione. Per creare uno o più menu, puoi usare la funzione register_nav_menus() all’interno del file functions.php. Successivamente, puoi inserire ognuno di questi menu all’interno del tema usando la funzione wp_nav_menu ().

La funzione register_nav_menus() accetta come parametro un array associativo. Quindi, se per esempio volessimo aggiungere due menu personalizzati da usare all’interno del tema potremmo scrive:

register_nav_menus( array(
   'primary_menu' => __( 'Primary Menu', 'miotema' ),
   'footer_menu' => __( 'Footer Menu', 'miotema' ),
) );

Mentre, per inserire uno dei due menu all’interno del tema devi passare alla funzione wp_nav_menu () una stringa con il nome del menu, per esempio 'primary_menu'

Il supporto per le immagini in evidenza e le miniature non è attivo di default in WordPress. Tuttavia lo puoi attivare per il tema che stai realizzando, richiamando semplicemente la funzione add_theme_support( ), passando come argomento la stringa ‘post-thumbnails’ in questo modo:

add_theme_support( 'post-thumbnails' );

Se poi vuoi mostrare nell’head i links ai feed RSS, puoi farlo in questo modo:

add_theme_support( 'automatic-feed-links' );

Ora però vediamo come devono essere usate le funzioni appena viste, necessarie per aggiungere le funzionalità da aggiungere al tema che stiamo realizzando all’interno.

Per prima cosa le scriviamo all’interno della funzione miotema_setup() che serve appunto per inizializzare il tema. Poi dobbiamo dire a WordPress quando eseguire questa funzione, e per farlo usiamo un hook, in particolare:

add_action( 'after_setup_theme', 'miotema_setup' );

Quindi il codice completo della nostra funzione che scriveremo all’interno di functions.php, completa di Action Hook per che indica quando eseguirla sara:

if ( ! function_exists( 'miotema_setup' ) ) :
/**
* Inizializza e registra alcune funzionalità di WordPress
*
* 
* @since MioTema 1.0
*/
function miotema_setup() {

    /* Aggiungiamo due menu personalizzati */
    register_nav_menus( array( 
        'primary_menu' => __( 'Primary Menu', 'miotema' ), 
        'footer_menu' => __( 'Footer Menu', 'miotema' ), ) 
    );

    /* Aggiungiamo il supporto all'immagine in evidenza e alle miniature */
    add_theme_support( 'post-thumbnails' );

    /* Aggiungiamo il supporto ai links feed RSS nell'head*/
    add_theme_support( 'automatic-feed-links' );
} 
endif;

/* Action hook che richiama la funzione miotema_setup() */
add_action( 'after_setup_theme', 'miotema_setup' );

Conclusioni

Anche se non è obbligatorio, functions.php è un file fondamentale all’interno di un tema WordPress. Infatti, oltre ad attivare le funzionalità necessarie per inizializzare il tema, ti permette di modificare, grazie a gli Hooks, l’esecuzione e il comportamento del core di WordPress, permettendoti di avere il pieno controllo del sito.

Per ora ci fermiamo qui. Nel prossimo articolo vedremo come aggiungere fogli di stile e script al sito senza scrivere codice html nell’head, ma usando alcune funzioni, messe a disposizione da WordPress, all’interno di functions.php.

Se hai bisogno di aiuto, se vuoi farmi una domanda o semplicemente sei alla ricerca di un consiglio, puoi contattarmi sulla nostra pagina Facebook o via email. Cercherò di risponderti quanto prima.


Prossimo articolo -> Come aggiungere javascript e css in WordPress

Come funziona il Loop di WordPress <- Articolo precedente


Indice argomenti della guida

  1. Introduzione: Come creare un tema per WordPress
  2. Cos’è un tema WordPress
  3. I template files di WordPress
  4. Cosa sono i Post Type di WordPress
  5. Struttura e organizzazione dei file in un tema WordPress
  6. A cosa serve style.css e come installare un tema in WordPress
  7. I template tags di WordPress
  8. Come funziona il Loop di WordPress
  9. Functions.php – Aggiungere caratteristiche e funzionalità a WordPress
  10. Come aggiungere javascript e css in WordPress
  11. Categorie, Tags e Tassonomie
  12. Template files per Articoli
  13. Creare un template diverso per ogni pagina WordPress
  14. Attachment Template Files
  15. Creare Template Files per Custom Post Type WordPress

Articoli correlati


Rocco Vincy

Analista/Programmatore, web developer e blogger, mi occupo di sicurezza informatica e delle comunicazioni. Co-fondatore del sito/blog "BlogAmico" Telegram: @RoccoVincy

Rocco Vincy ha 225 articoli e più. Guarda tutti gli articoli di Rocco Vincy

Rocco Vincy