Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 17 di 33
  • livello avanzato
Indice lezioni

Il file functions.php: introduzione e inizializzazione

Scopriamo il ruolo del file functions.php nei temi di WordPress, impariamo ad utilizzarlo per integrare nuove funzionalità e ad impiegare i filtri e le azioni (Hook) per l'invocazione delle funzioni.
Scopriamo il ruolo del file functions.php nei temi di WordPress, impariamo ad utilizzarlo per integrare nuove funzionalità e ad impiegare i filtri e le azioni (Hook) per l'invocazione delle funzioni.
Link copiato negli appunti

Uno dei file più importanti di un tema è il file functions.php. Questo file permette di aggiungere al tema ogni tipo di funzionalità, a partire dalle più semplici, come l'attivazione del supporto per le immagini di anteprima, fino alle funzionalità più complesse, come l'ampliamento dell'architettura dati predefinita. Il file functions.php svolge, quindi, la stessa funzione del file principale di un plugin.

Da questo file è possibile invocare funzioni PHP e del framework di WordPress. È possibile dichiarare funzioni personalizzate e modificare i task o l'output delle funzioni che fanno parte del Core. Si vedrà, da qui in avanti, quanto sia utile per la chiarezza del codice, ed importante per la sicurezza del sito, ricorrere alle funzioni del framework ogni volta che sia possibile.

Tra le varie differenze che esistono tra un plugin e il file functions.php, qui è utile sottolinearne una: al contrario di un plugin, il file functions.php rende dipendenti dal tema le funzioni implementate, ciò può costituire un vincolo perché, una volta disattivato il tema, le sue funzionalità non saranno più disponibili. Ma può costituire anche un'opportunità di business, nel caso si decidesse di distribuire il tema con licenza commerciale.

WordPress hooks: filtri ed azioni

Qualunque sia il tipo di funzione PHP, built-in o custom, WordPress prevede un meccanismo che permette di invocare una funzione in un preciso momento di esecuzione del Core. Nel gergo si parla di “aggancio” o Hook. Il framework dispone di due diversi tipi di Hook, Filter Hook e Action Hook.

Un'azione (Action Hook) è una funzione che viene eseguita al verificarsi di un determinato evento durante l'esecuzione del Core di WordPress. Esistono azioni che vengono eseguite all'avvio di WordPress, al caricamento delle pagine, alla pubblicazione di un post.

Un filtro (Filter Hook) è, invece, una funzione attraverso la quale possono essere modificati i dati recuperati dal database prima che questi vengano mostrati. Grazie ai filtri, è possibile modificare dinamicamente il contenuto di un post, gli elementi di un menu, la struttura di un widget e quasi altro elemento delle pagine di WordPress.

Lasciando ai capitoli successivi l'esame approfondito di azioni e filtri, qui vedremo come utilizzarli nel file functions.php di un tema (o di un child theme).

Come agganciare le funzioni al core di WordPress

Una volta dichiarata una funzione, questa va "agganciata" ad un particolare evento tramite la funzione add_action.

add_action( 'action-hook-name', 'my-custom-function', $priority, $vars );

Il primo argomento è il nome dell'hook, il secondo è il nome della funzione di callback, $priority è un indice che stabilisce l'ordine di priorità quando più funzioni sono agganciate allo stesso Hook (valore predefinito "10"), $var stabilisce il numero di argomenti che la funzione my-custom-function può accettare (valore predefinito "1"). I filtri vengono utilizzati nello stesso modo, con la sola differenza che la funzione che esegue l'operazione di aggancio è add_filter:

add_filter( 'filter-hook-name', 'my-custom-function', $priority, $vars );

La stringa del primo argomento, ovviamente, sarà il nome di un filtro e non di un'azione. Esempi di action hook sono init, eseguito all'avvio di WordPress, admin_init, eseguito all'avvio del pannello si amministrazione, publish_post, eseguito al momento della pubblicazione di un post. Esempi di filter hook sono the_content, the_title, the_excerpt, che permettono di far passare attraverso una funzione personalizzata il contenuto, il titolo o l'estratto di un post, prima che venga generato il corrispondente codice HTML.

Potrebbe verificarsi una situazione in cui la funzione custom non debba più essere eseguita in corrispondenza dell'evento individuato dall'Hook. In questo caso, WordPress permette di rimuovere l'azione o il filtro grazie alle funzioni remove_action e remove_filter:

remove_action( 'action-hook-name', 'my-custom-function' );
remove_filter( 'filter-hook-name', 'my-custom-function' );

Le funzioni di base del file functions.php

Il codice che si descriverà in questo capitolo si basa sul file functions.php del blank theme di HTML5 Reset, in quanto questo fornisce un utile schema di riferimento per l'implementazione delle funzioni essenziali di un tema.

Il set-up delle funzionalità principali va assicurato nel momento in cui vengono caricate le pagine, subito dopo l'inizializzazione del tema. In base a quanto detto in precedenza, occorre individuare l'action hook più adatto all'aggancio di una funzione di callback personalizzata. In questo caso si utilizzerà l'Hook after_setup_theme:

add_action( 'after_setup_theme', 'seventyone_setup' );
function seventyone_setup() {
	load_theme_textdomain( 'seventyone', get_template_directory() . '/languages' );
	add_theme_support( 'automatic-feed-links' );
	add_theme_support( 'post-formats', array( 'aside', 'audio', 'chat', 'gallery', 'image', 'quote', 'status' ) );
	add_theme_support( 'post-thumbnails' );
	register_nav_menu( 'primary', __( 'Navigation Menu', 'seventyone' ) );
}

Il secondo argomento di add_action individua la funzione di callback. Questa invoca, a sua volta, una serie di funzioni utili ad inizializzare il tema.

Funzione Descrizione
load_theme_textdomain Carica il textdomain del tema, cercando le traduzioni disponibili nella directory languages.
add_theme_support Permette di aggiungere una serie di funzionalità al tema, in base al parametro passato come argomento. Al tema Seventyone vengono aggiunte le seguenti feature:

  • automatic-feed-links
  • post-formats
  • post-thumbnails

automatic-feed-links abilita i feed di post e commenti; post-formats abilita i diversi formati di post disponibili; post-thumbnails abilita le immagini di anteprima dei post.

register_nav_menu Registra un menu di navigazione personalizzato che potrà essere gestito dalla pagina Aspetto → Menu del pannello di amministrazione.

Il menu di navigazione principale

A questo punto il codice illustrato nei capitoli precedenti sarà più chiaro. Si ricorderà che nel capitolo dedicato al file header.php si è visto come inserire nel template un menu di navigazione:

<nav id="primary-navigation" class="site-navigation primary-navigation" role="navigation">
	<?php wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu' ) ); ?>
</nav>

Prima di veder apparire il menu nel pannello di amministrazione e nella pagina del front-end, sarà necessario registrarlo nel file functions.php:

add_action( 'after_setup_theme', 'seventyone_setup' );
function seventyone_setup() {
	...
	register_nav_menu( 'primary', __( 'Navigation Menu', 'seventyone' ) );
}

Ora basterà creare un qualsiasi menu custom e impostarlo come menu di navigazione, come mostrato nell'immagine.

Figura 1. Menu personalizzato impostato come menu di navigazione in amministrazione
Navigation menu settings

Tutto il resto è una questione di stile.

Conclusioni e riferimenti

Si ferma qui la prima parte dell'analisi delle funzionalità che è possibile implementare grazie al file functions.php. Nel prossimo capitolo si affronteranno funzionalità come la registrazione delle sidebar e l'inserimento nel documento di script e fogli di stile.

In questo capitolo si è fatto riferimento alle seguenti risorse:

In allegato la versione corrente del tema Seventyone.

Ti consigliamo anche