Lightbox immagini WordPress JavaScript senza plugin
Un lightbox immagini WordPress JavaScript permette di aprire le foto in una galleria a schermo intero senza installare plugin aggiuntivi. La soluzione usa un blocco HTML personalizzato per la struttura, il CSS aggiuntivo per l’aspetto grafico e un file JavaScript per apertura, chiusura e navigazione tra le immagini. Il metodo è adatto a WordPress con tema classico o a blocchi, ma richiede l’accesso ai file del tema child oppure a una modalità sicura per caricare codice personalizzato. Il risultato resta leggero, responsive e compatibile con mouse, tastiera e dispositivi touch.
Come funziona il lightbox immagini WordPress JavaScript
Il lightbox è una finestra sovrapposta alla pagina che mostra un’immagine in formato ingrandito, lasciando il resto dello schermo oscurato. In questa implementazione, ogni immagine della galleria contiene gli attributi data-full e data-caption: il primo indica l’immagine da visualizzare, mentre il secondo contiene la descrizione mostrata sotto la foto.
La soluzione comprende questi elementi:
- Un contenitore HTML con le miniature della galleria.
- Un overlay nascosto con immagine principale, didascalia e pulsanti.
- Regole CSS responsive per lo schermo intero.
- JavaScript per apertura, chiusura, tasti freccia e tasto Esc.
- Attributi ARIA e testo alternativi per migliorare l’accessibilità.
Il codice non dipende da jQuery e non richiede librerie esterne. Per evitare problemi con gli aggiornamenti di WordPress o del tema, è preferibile utilizzare un tema child e non modificare direttamente i file del tema principale.
Creare la galleria HTML in WordPress
Nel pannello di WordPress apri l’articolo o la pagina interessata e inserisci un blocco HTML personalizzato. Incolla la struttura seguente, sostituendo gli URL delle immagini con quelli presenti nella Libreria media di WordPress.
<div class="wp-lightbox-gallery" aria-label="Galleria fotografica"> <button class="wp-lightbox-item" type="button" data-full="https://example.com/wp-content/uploads/foto-1-grande.jpg" data-caption="Descrizione della prima immagine"> <img src="https://example.com/wp-content/uploads/foto-1-miniatura.jpg" alt="Descrizione della prima immagine" loading="lazy"> </button> <button class="wp-lightbox-item" type="button" data-full="https://example.com/wp-content/uploads/foto-2-grande.jpg" data-caption="Descrizione della seconda immagine"> <img src="https://example.com/wp-content/uploads/foto-2-miniatura.jpg" alt="Descrizione della seconda immagine" loading="lazy"> </button> <button class="wp-lightbox-item" type="button" data-full="https://example.com/wp-content/uploads/foto-3-grande.jpg" data-caption="Descrizione della terza immagine"> <img src="https://example.com/wp-content/uploads/foto-3-miniatura.jpg" alt="Descrizione della terza immagine" loading="lazy"> </button> </div> <div class="wp-lightbox-overlay" role="dialog" aria-modal="true" aria-label="Immagine ingrandita" hidden> <button class="wp-lightbox-close" type="button" aria-label="Chiudi immagine"> × </button> <button class="wp-lightbox-prev" type="button" aria-label="Immagine precedente"> ‹ </button> <figure class="wp-lightbox-figure"> <img class="wp-lightbox-image" src="" alt=""> <figcaption class="wp-lightbox-caption"></figcaption> </figure> <button class="wp-lightbox-next" type="button" aria-label="Immagine successiva"> › </button> </div>
Il valore di src può puntare a una miniatura ottimizzata, mentre data-full dovrebbe contenere l’URL di una versione più grande. L’attributo alt deve descrivere il contenuto dell’immagine e non deve essere lasciato vuoto quando la foto trasmette informazioni.
Aggiungere lo stile CSS del lightbox
Il CSS può essere inserito in Aspetto > Personalizza > CSS aggiuntivo nei temi classici. Nei temi a blocchi il percorso può variare, ma l’area da cercare è l’editor degli stili globali o il campo CSS aggiuntivo previsto dal tema.
.wp-lightbox-gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 16px;
margin: 24px 0;
}
.wp-lightbox-item {
display: block;
padding: 0;
border: 0;
background: transparent;
cursor: zoom-in;
overflow: hidden;
border-radius: 8px;
}
.wp-lightbox-item img {
display: block;
width: 100%;
aspect-ratio: 4 / 3;
object-fit: cover;
transition: transform 0.25s ease;
}
.wp-lightbox-item:hover img,
.wp-lightbox-item:focus-visible img {
transform: scale(1.04);
}
.wp-lightbox-overlay {
position: fixed;
inset: 0;
z-index: 99999;
display: flex;
align-items: center;
justify-content: center;
padding: 56px 72px;
background: rgb(0 0 0 / 90%);
}
.wp-lightbox-overlay[hidden] {
display: none;
}
.wp-lightbox-figure {
display: flex;
flex-direction: column;
align-items: center;
max-width: min(1100px, 90vw);
max-height: 90vh;
margin: 0;
}
.wp-lightbox-image {
display: block;
max-width: 100%;
max-height: 78vh;
width: auto;
height: auto;
object-fit: contain;
}
.wp-lightbox-caption {
max-width: 90vw;
margin-top: 14px;
color: #fff;
font-size: 1rem;
line-height: 1.5;
text-align: center;
}
.wp-lightbox-close,
.wp-lightbox-prev,
.wp-lightbox-next {
position: absolute;
border: 0;
color: #fff;
background: rgb(0 0 0 / 45%);
cursor: pointer;
line-height: 1;
}
.wp-lightbox-close {
top: 16px;
right: 22px;
padding: 4px 12px;
font-size: 2.4rem;
}
.wp-lightbox-prev,
.wp-lightbox-next {
top: 50%;
padding: 8px 16px;
transform: translateY(-50%);
font-size: 3rem;
}
.wp-lightbox-prev {
left: 18px;
}
.wp-lightbox-next {
right: 18px;
}
.wp-lightbox-close:focus-visible,
.wp-lightbox-prev:focus-visible,
.wp-lightbox-next:focus-visible,
.wp-lightbox-item:focus-visible {
outline: 3px solid #72d6ff;
outline-offset: 3px;
}
@media (max-width: 600px) {
.wp-lightbox-overlay {
padding: 48px 18px;
}
.wp-lightbox-prev,
.wp-lightbox-next {
padding: 6px 10px;
font-size: 2.2rem;
}
.wp-lightbox-prev {
left: 4px;
}
.wp-lightbox-next {
right: 4px;
}
.wp-lightbox-image {
max-height: 72vh;
}
}
position: fixed mantiene l’overlay agganciato alla finestra del browser, mentre inset: 0 lo estende su tutti i lati. La proprietà max-height impedisce alle immagini verticali di uscire dallo schermo. Il selettore [hidden] mantiene la finestra realmente nascosta finché JavaScript non la apre.
Caricare il JavaScript senza plugin
Crea nel tema child una cartella chiamata js e al suo interno un file denominato lightbox.js. Il file può essere modificato tramite FTP, Gestione file dell’hosting o un ambiente di sviluppo locale.
Passo 1: inserire il codice JavaScript
Nel file lightbox.js incolla questo codice:
document.addEventListener('DOMContentLoaded', () => {
const overlay = document.querySelector('.wp-lightbox-overlay');
const image = document.querySelector('.wp-lightbox-image');
const caption = document.querySelector('.wp-lightbox-caption');
const closeButton = document.querySelector('.wp-lightbox-close');
const previousButton = document.querySelector('.wp-lightbox-prev');
const nextButton = document.querySelector('.wp-lightbox-next');
const items = Array.from(document.querySelectorAll('.wp-lightbox-item'));
if (!overlay || !image || !caption || !items.length) {
return;
}
let currentIndex = 0;
let lastFocusedElement = null;
function showImage(index) {
currentIndex = (index + items.length) % items.length;
const item = items[currentIndex];
const thumbnail = item.querySelector('img');
image.src = item.dataset.full || thumbnail.src;
image.alt = thumbnail.alt || '';
caption.textContent = item.dataset.caption || thumbnail.alt || '';
overlay.hidden = false;
document.body.style.overflow = 'hidden';
}
function closeLightbox() {
overlay.hidden = true;
image.src = '';
document.body.style.overflow = '';
if (lastFocusedElement) {
lastFocusedElement.focus();
}
}
items.forEach((item, index) => {
item.addEventListener('click', () => {
lastFocusedElement = item;
showImage(index);
closeButton.focus();
});
});
closeButton.addEventListener('click', closeLightbox);
previousButton.addEventListener('click', () => {
showImage(currentIndex - 1);
});
nextButton.addEventListener('click', () => {
showImage(currentIndex + 1);
});
overlay.addEventListener('click', (event) => {
if (event.target === overlay) {
closeLightbox();
}
});
document.addEventListener('keydown', (event) => {
if (overlay.hidden) {
return;
}
if (event.key === 'Escape') {
closeLightbox();
}
if (event.key === 'ArrowLeft') {
showImage(currentIndex - 1);
}
if (event.key === 'ArrowRight') {
showImage(currentIndex + 1);
}
});
});
Il codice seleziona tutte le immagini con classe .wp-lightbox-item e le tratta come una singola galleria. Il tasto Esc chiude il lightbox, le frecce sinistra e destra cambiano immagine e il clic sull’area scura chiude la finestra. Il ritorno del focus al pulsante originale evita che l’utente perda la posizione nella pagina.
Passo 2: registrare lo script nel tema child
Apri il file functions.php del tema child e aggiungi il seguente codice:
function backdigit_carica_lightbox() {
wp_enqueue_script(
'backdigit-lightbox',
get_stylesheet_directory_uri() . '/js/lightbox.js',
array(),
'1.0.0',
true
);
}
add_action('wp_enqueue_scripts', 'backdigit_carica_lightbox');
get_stylesheet_directory_uri() punta alla cartella del tema child, quindi il file deve trovarsi esattamente in js/lightbox.js. Il parametro true carica lo script nel footer della pagina, dopo il contenuto HTML, mentre wp_enqueue_script() evita di inserire JavaScript direttamente nell’articolo.
Se il file functions.php contiene già il tag PHP iniziale <?php, non aggiungerne un secondo. Un errore di sintassi nel file può rendere inutilizzabile il sito, perciò è consigliabile conservare un backup prima della modifica.
Verificare il lightbox su desktop e smartphone
Dopo aver pubblicato la pagina, verifica che il clic su ogni miniatura apra l’immagine corretta e che la didascalia corrisponda alla foto. Controlla anche il comportamento con tastiera usando Tab, Esc, Freccia sinistra e Freccia destra.
Su smartphone, prova il lightbox con immagini sia orizzontali sia verticali. Il CSS riduce automaticamente l’immagine entro l’area disponibile, ma le prestazioni dipendono dal peso dei file originali e dalla velocità del server.
Se la finestra non si apre, controlla che:
- La classe
.wp-lightbox-itemsia presente sui pulsanti HTML. - Ogni elemento abbia un URL valido nell’attributo
data-full. - Il file
lightbox.jssia nella cartellajsdel tema child. - Il percorso usato in
functions.phpcorrisponda al nome reale del file. - La console del browser non mostri errori JavaScript.
- La cache di WordPress, del tema o del servizio CDN sia stata svuotata.
Questa implementazione di lightbox immagini WordPress JavaScript è adatta a gallerie contenute e non sostituisce una gestione avanzata con caricamento progressivo, zoom o trascinamento. Per una pagina con molte foto, comprimi le immagini e usa dimensioni proporzionate al layout, mantenendo loading="lazy" sulle miniature.
Potrebbe interessarti anche:
- WordPress mostra l’errore JSON non valido? Ecco come risolverlo passo dopo passo
- WordPress 6.9: novità, funzionalità e compatibilità plugin
- Abruzzimaginarium: a L’Aquila nasce il primo parco immersivo dedicato all’identità dell’Abruzzo
- Johnny Depp è un inquietante Ebenezer Scrooge nel trailer del nuovo film di Ti West
FAQ
Il blocco HTML e il CSS aggiuntivo funzionano anche senza tema child, ma il JavaScript va caricato in modo sicuro. Il tema child resta la soluzione più stabile perché evita la perdita delle modifiche durante gli aggiornamenti.
WordPress può rimuovere o limitare i tag `
Sì, ma i pulsanti HTML usati nell’esempio offrono una gestione migliore di tastiera e accessibilità rispetto a un semplice elemento <div> cliccabile.
Sì, purché il blocco HTML sia mantenuto nella pagina e il file JavaScript venga caricato dal tema child. Il percorso dell’area CSS può cambiare in base al tema a blocchi utilizzato.
Modifica la proprietà background di .wp-lightbox-overlay nel CSS. Il valore rgb(0 0 0 / 90%) crea uno sfondo nero con trasparenza del 90%.
Altri articoli di questa serie:
- Modalità scura WordPress CSS JavaScript senza plugin
- Accordion FAQ WordPress HTML CSS JavaScript accessibile
- Pulsante copia codice WordPress con JavaScript
- CSS stampa articoli WordPress: foglio pulito
- Video YouTube WordPress: caricamento JavaScript
- Tempo lettura WordPress JavaScript: calcolo automatico
- Evidenziare la ricerca WordPress con JavaScript
- Link esterni WordPress JavaScript: sicurezza e nuova scheda
- Video HTML5 responsive WordPress: controlli e fallback
