Cos’è functions.php e come funziona
Il file functions.php è il cuore della personalizzazione di un tema WordPress. Agisce come un plugin integrato nel tema, eseguendo codice PHP per modificare, estendere o aggiungere funzionalità al sito. WordPress carica automaticamente questo file a ogni pagina visitata, sia nel frontend che nel backend, rendendolo il punto di ingresso ideale per qualsiasi modifica programmatica.
Ogni tema WordPress (sia gratuito che premium) ha il proprio functions.php. Le modifiche vanno sempre fatte nel tema child, mai nel tema parent. Se modifichi direttamente il tema parent, perderai tutte le personalizzazioni al primo aggiornamento del tema.
Functions.php nel tema vs child theme
Un tema child eredita tutte le funzionalità del tema parent ma permette di sovrascriverle senza modificare i file originali. Il functions.php del child theme viene caricato PRIMA di quello del parent, consentendo di: aggiungere nuove funzioni, sovrascrivere funzioni del parent (se dichiarate con if/function_exists), e mantenere le personalizzazioni dopo gli aggiornamenti del tema parent. La struttura minima di un tema child richiede: style.css (con Template: nome-tema-parent) e functions.php (con wp_enqueue_scripts per il CSS parent).
Aggiungere snippet PHP personalizzati
Enqueue di script e stili
Per caricare CSS e JavaScript nel tema, usa wp_enqueue_style() e wp_enqueue_script() all’interno della funzione wp_enqueue_scripts. Non usare link diretti nell’header.php: WordPress ha un sistema di code injection e dipendenze che evita conflitti e duplicati.
function mio_tema_risorse() {
wp_enqueue_style(‘mio-tema-style’, get_stylesheet_uri());
wp_enqueue_script(‘mio-tema-script’, get_template_directory_uri() . ‘/js/custom.js’, array(‘jquery’), null, true);
}
add_action(‘wp_enqueue_scripts’, ‘mio_tema_risorse’);
Registrare menu di navigazione
register_nav_menus() permette di definire posizioni menu personalizzate che appariranno in Aspetto > Menu. Ogni posizione può essere chiamata nel template con wp_nav_menu().
Aggiungere theme support
add_theme_support() attiva funzionalità WordPress nel tema. Le più comuni: post-thumbnails (immagine in evidenza), custom-logo (logo personalizzabile), html5 (markup HTML5), title-tag (titolo SEO dinamico), responsive-embeds e align-wide (larghezza blocco estesa in Gutenberg).
Creare shortcode personalizzati
Gli shortcode permettono di inserire contenuti dinamici in post e pagine. La funzione add_shortcode() registra un nuovo shortcode che può accettare attributi e restituire HTML processato.
function shortcode_CTA($atts) {
$atts = shortcode_atts(array(‘testo’ => ‘Scopri di più’, ‘url’ => ‘#’), $atts);
return ‘‘ . esc_html($atts[‘testo’]) . ‘‘;
}
add_shortcode(‘cta’, ‘shortcode_CTA’);
Nel contenuto: [cta testo=”Acquista ora” url=”https://esempio.com/acquista”]
Personalizzare il Customizer
$wp_customize->add_section() e $wp_customize->add_setting()/add_control() aggiungono opzioni al Personalizzatore di WordPress. Questo permette ai clienti di modificare colori, font, layout e altre impostazioni senza toccare codice.
Best practice per functions.php
Usare sempre un tema child
Qualsiasi modifica al functions.php va fatta esclusivamente nel tema child. In caso di aggiornamento del tema parent, tutte le personalizzazioni nel tema child rimangono intatte.
Verificare l’esistenza delle funzioni
Prima di dichiarare una funzione personalizzata, usa function_exists() per evitare errori fatali da ridefinizione. Questo è fondamentale quando usi snippet di plugin o temi che potrebbero già dichiarare la stessa funzione.
if (!function_exists(‘mia_funzione_personalizzata’)) {
function mia_funzione_personalizzata() {
// codice
}
}
Usare hook e filtri appropriati
WordPress offre centinaia di action hook e filter hook. Non modificare mai i file template direttamente; usa invece gli hook per aggiungere o modificare contenuti. Per esempio, per aggiungere HTML dopo il contenuto: add_action(‘the_content’, ‘mia_funzione_dopo_contenuto’). Per modificare l’excerpt length: add_filter(‘excerpt_length’, ‘mia_funzione_lunghezza_excerpt’).
Organizzare il codice in file separati
Per functions.php che superano le 200 righe, suddividi le funzionalità in file PHP separati e includili con require_once. Esempio struttura: /inc/customizer.php, /inc/shortcodes.php, /inc/widgets.php. Poi nel functions.php: require_once get_stylesheet_directory() . ‘/inc/customizer.php’;
Considerazioni sulla sicurezza
Il codice inserito in functions.php ha pieno accesso al sistema WordPress. Errori di sintassi PHP possono bloccare completamente il sito (white screen of death). Usa escaping per output (esc_html, esc_url, esc_attr), validazione per input (sanitize_text_field, intval), e non inserire mai credenziali o chiavi API in chiaro nel file. Per modifiche importanti, usa l’editor di file di WordPress (Aspetto > Editor file tema) solo se necessario; meglio un client FTP e un editor di codice per avere backup e versioning. In caso di errore fatale, accedi al server via FTP e rinomina il tema per disattivarlo, ripristinando l’accesso al backend.
Libreria di snippet essenziali
Disabilitare la admin bar nel frontend
add_filter(‘show_admin_bar’, ‘__return_false’);
Personalizzare il logo della pagina di login
function login_logo_personalizzato() {
echo ‘<style>.login h1 a { background-image: url(‘ . get_stylesheet_directory_uri() . ‘/images/logo-login.png) !important; }</style>’;
}
add_action(‘login_head’, ‘login_logo_personalizzato’);
Modificare la lunghezza dell’excerpt
function excerpt_lunghezza($length) { return 40; }
add_filter(‘excerpt_length’, ‘excerpt_lunghezza’);
Aggiungere classi al body
function mie_classi_body($classes) {
if (is_singular()) $classes[] = ‘pagina-singola’;
return $classes;
}
add_filter(‘body_class’, ‘mie_classi_body’);
Rimuovere la versione di WordPress dal codice sorgente
remove_action(‘wp_head’, ‘wp_generator’);
Disabilitare le notifiche di aggiornamento per i non amministratori
function nascondi_aggiornamenti_non_admin() {
if (!current_user_can(‘administrator’)) {
remove_action(‘admin_notices’, ‘update_nag’);
}
}
add_action(‘admin_init’, ‘nascondi_aggiornamenti_non_admin’);
Conclusione
Il file functions.php è lo strumento più potente per personalizzare WordPress, ma richiede disciplina: usa sempre un tema child, verifica l’esistenza delle funzioni con function_exists(), organizza il codice in file separati per progetti complessi, e segui le best practice di sicurezza per evitare errori fatali. Con la giusta metodologia, functions.php ti permette di trasformare qualsiasi tema WordPress in una soluzione su misura per le tue esigenze, senza bisogno di plugin aggiuntivi per funzionalità comuni.
