WordPress Oxygen PHP CSS HTML JS

laforismapizzeria.it

Claudio Fusco 15/03/2026 Visita Sito Live

Il Progetto

Il cliente

L'Aforisma – Atypical Gourmet è una pizzeria gourmet di Torino fondata nel 2018 da Claudio Fusco, pizzaiolo pugliese che ha portato nel capoluogo piemontese una visione personale e contemporanea dell'arte bianca. Nel 2025 il locale ha ottenuto il riconoscimento dei 2 Spicchi Gambero Rosso, è stato inserito tra le Top 100 pizzerie d'Italia dalla guida The Great Pizza con menzione speciale tra le prime 5 per i topping, ed è presente nelle guide Identità Golose e La Pecora Nera.

Il brand si posiziona su un registro raffinato, esclusivo e sensoriale — lontano dalla comunicazione standardizzata delle pizzerie tradizionali, vicino all'estetica della ristorazione di ricerca.


La sfida

Il cliente aveva bisogno di un sito che all'altezza del brand: non un template, non un sito "da pizzeria", ma un'esperienza digitale coerente con la qualità del prodotto fisico. Le sfide principali erano tre.

Identità visiva forte senza perdere usabilità. Il settore del lusso e della ristorazione gourmet rischia spesso di sacrificare la chiarezza in favore dell'estetica. Il sito doveva essere visivamente d'impatto ma anche immediatamente navigabile, con CTA chiare verso la prenotazione.

Codice custom su Oxygen Builder. Nessun template disponibile sul mercato rifletteva l'identità del brand. Ogni componente è stato progettato e sviluppato da zero in PHP, CSS e JavaScript vanilla all'interno di Oxygen Builder 4.9.5 — il page builder che il cliente utilizzava già e che non poteva essere sostituito.

Menu dinamico senza plugin aggiuntivi. Il cliente necessitava di poter aggiornare piatti, prezzi e descrizioni dalla dashboard WordPress in autonomia, senza toccare codice. La soluzione doveva funzionare senza ACF, WooCommerce o altri plugin pesanti — solo WordPress nativo.


Design System

Prima di scrivere una riga di codice ho definito un design system completo, documentato e riutilizzabile su tutti i componenti tramite CSS custom properties.

Palette

La palette nasce da una riflessione sul brand: lusso accessibile, non ostentato. L'oro non è giallo brillante ma un oro antico (#C9A84C) che si stempera su un nero profondo (#0A0A0A) e un bianco caldo (#F5F0E8). Nessun bianco puro, nessun nero assoluto — tutto ha una temperatura che rimanda ai materiali fisici: carta patinata, legno bruciato, metallo lavorato.

--gold:       #C9A84C;   /* Oro primario */
--gold-light: #E8C97A;   /* Hover, highlight */
--gold-dim:   rgba(201, 168, 76, 0.20);  /* Bordi soft */
--black:      #0A0A0A;   /* Background */
--white:      #F5F0E8;   /* Testo primario */
--grey:       rgba(245, 240, 232, 0.45); /* Testo secondario */

Il contrasto oro su nero raggiunge un rapporto di 7.2:1 — abbondantemente sopra la soglia WCAG AA (4.5:1).

Tipografia

Due font con ruoli precisi e mai intercambiabili:

  • Cormorant Garamond (300, 400, 600) per titoli, headline e citazioni — porta eleganza editoriale e un richiamo alla tradizione tipografica italiana
  • Montserrat (300, 400, 500) per body, label, bottoni e navigazione — garantisce leggibilità e modernità

Effetti visivi

  • Glassmorphism sistematico su header, banner cookie e overlay: backdrop-filter: blur(12px) con bordo gold-dim e sfondo semi-trasparente
  • Shadow system a tre livelli calibrati per profondità percepita: sm per card standard, md per elementi in evidenza, gold-glow per hover su CTA
  • Spacing fluido con clamp() su ogni valore — nessun breakpoint fisso dove non necessario

Architettura tecnica

Stack

LayerTecnologiaVersione
CMSWordPressLatest
Page BuilderOxygen Builder4.9.5
Snippet PHPCode SnippetsLatest
AnimazioniGSAP + ScrollTrigger3.12.5
JSVanilla ES6
CSSCustom Properties + Flex/Grid
FontGoogle Fonts (Cormorant + Montserrat)

Isolamento CSS

Ogni componente è scoped sotto il selettore #%%ELEMENT_ID%% generato da Oxygen — impossibile generare conflitti tra componenti, anche se coesistono sulla stessa pagina. Le custom properties locali usano il prefisso --_ per distinguerle dalle variabili globali.

#%%ELEMENT_ID%% {
    --_gold:   #C9A84C;
    --_pad:    clamp(1.5rem, 3vw, 3rem);
}
#%%ELEMENT_ID%% .componente { padding: var(--_pad); }

Pattern PHP

Ogni query WordPress usa WP_Query con prefisso aforisma_, wp_reset_postdata() sistematico e sanitizzazione completa su ogni output.

$aforisma_query = new WP_Query([...]);
if ( $aforisma_query->have_posts() ) :
    while ( $aforisma_query->have_posts() ) : $aforisma_query->the_post();
        echo esc_html( get_the_title() );
    endwhile;
    wp_reset_postdata();
endif;

Pattern JS

Ogni script è racchiuso in una IIFE con 'use strict', safety check sul root element come prima operazione, e gestione del DOMContentLoaded per sicurezza.

(function () {
    'use strict';
    var root = document.querySelector('#%%ELEMENT_ID%%');
    if (!root) return;
    // logica
})();

Sfide tecniche risolte

1. Menu dinamico senza ACF

Il menu della pizzeria ha una struttura narrativa complessa (Prologo, Atti, Atto Finale) con categorie, sottocategorie e un sistema di beverage separato. La soluzione è stata un Custom Post Type nativo WordPress con custom fields nativi, senza nessun plugin aggiuntivo. Il template PHP legge i piatti, li raggruppa per categoria e li renderizza nella struttura teatrale — tutto aggiornabile dalla dashboard in autonomia dal cliente.

2. FOUC di Oxygen Builder

Oxygen Builder causa un Flash of Unstyled Content (FOUC) visibile al caricamento della pagina — il body appare per un frame senza stili. La soluzione è uno snippet PHP che inietta opacity: 0 sul body prima del rendering tramite wp_head (priorità 1) e lo rivela con una transizione di 0.18s solo dopo window.load tramite wp_footer (priorità 99). Un fallback a 1.2 secondi garantisce la visibilità anche su connessioni lente.

3. Cookie Banner GDPR senza plugin

Invece di affidarsi a plugin di terze parti (Cookiebot, Complianz), ho sviluppato un cookie banner completamente custom, conforme al Regolamento (UE) 2016/679 e alle Linee Guida del Garante Privacy italiano (2021). Zero dipendenze esterne, zero KB aggiuntivi. Le funzionalità chiave:

  • 4 categorie di consenso separate con toggle individuali
  • "Rifiuta tutto" visivamente equivalente ad "Accetta tutto" — nessun dark pattern
  • Caricamento di GA4 e Meta Pixel dinamicamente solo dopo consenso esplicito
  • Consenso salvato in localStorage con data ISO e sistema di versioning (incrementando CONSENT_VERSION si forza il re-consenso su tutti gli utenti)
  • Pulsante riapertura sempre visibile, chiusura con ESC come rifiuto conservativo

4. Header con Walker PHP personalizzato

La navigazione desktop e mobile usa due Walker custom (Aforisma_Header_Walker e Aforisma_Mobile_Walker) che applicano le classi BEM e gestiscono aria-current="page" in automatico in base alla pagina corrente — senza JavaScript, solo PHP.

5. Responsive completamente fluido

Nessun breakpoint fisso dove non necessario. Ogni valore di font-size, padding, gap e margin usa clamp():

font-size: clamp(1.8rem, 4vw, 3.6rem);
padding:   clamp(1.5rem, 5vw, 6rem);
gap:       clamp(1rem, 2vw, 2rem);

Il risultato è un layout che scala perfettamente da 320px a 2560px senza salti visivi.


Componenti sviluppati

ComponenteTecnologieNote
HeaderPHP Walker, GSAP, GlassmorphismScroll effect, hamburger animato, ESC
FooterPHP, CSS GridAnno dinamico, social, dati legali
Hero HomepageGSAP Parallax, ScrollTriggerfetchpriority="high", LCP ottimizzato
Homepage (9 sezioni)GSAP ScrollTrigger, CSS Grid/FlexRitmo chiaro/scuro/immagine
Menu (template dinamico)WP_Query CPT, PHPStruttura teatrale, aggiornabile da dashboard
Pagina Claudio FuscoGSAP, CSS GridE-E-A-T, biografia strutturata
Pagina EccellenzaGSAP, CSS GridFocus ingredienti e produttori
Pagina ContattiCSS GridOrari, mappa, CTA
Pagina Rassegna StampaGSAP, CSS Grid4 guide + 8 testate nazionali
Cookie Banner GDPRVanilla JS, localStorageZero plugin, conforme Garante IT
Anti-FOUCPHP wp_head/wp_footerTransizione 0.18s, fallback 1.2s

Qualità del codice — highlights

Performance

  • loading="lazy" + decoding="async" su tutte le immagini below the fold
  • loading="eager" + fetchpriority="high" sulle immagini LCP
  • width e height espliciti su ogni <img> — CLS eliminato
  • GSAP caricato con defer tramite wp_enqueue_script — zero render-blocking
  • Script di terze parti caricati solo dopo consenso cookie

Accessibilità

  • Contrasto oro/nero: 7.2:1
  • :focus-visible su tutti gli elementi interattivi
  • aria-label, aria-expanded, aria-controls, aria-current sistemici
  • Heading gerarchici su ogni pagina
  • prefers-reduced-motion: tutte le animazioni GSAP disabilitate automaticamente

SEO

  • HTML semantico con tag nativi <header>, <main>, <section>, <article>, <footer>
  • H1 unico per pagina, gerarchia heading rispettata
  • Alt text descrittivi con keyword naturali su ogni immagine
  • Contenuti People-First conformi alle linee guida Google ufficiali
  • E-E-A-T costruito su ogni pagina
  • Schema.org Restaurant implementato
  • Meta tag ottimizzati via Rank Math su tutte le pagine
  • Google Analytics 4 e Google Search Console configurati

Risultato

Un sito completamente custom, zero template, che riflette fedelmente l'identità di un brand premiato a livello nazionale. Ogni componente è documentato, isolato, performante e accessibile — pronto per essere mantenuto ed esteso nel tempo senza toccare ciò che funziona già.