Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/dwayagency/broken-image-media-library/archive/refs/heads/main.zipPlugin WordPress professionale per scansionare la Libreria Media alla ricerca di immagini rotte (404, 410 o irraggiungibili) con funzionalità di eliminazione massiva.
Sviluppato da: DWAY Agency
Versione: 1.3.0
📋 Indice
- Caratteristiche
- Requisiti
- Installazione
- Utilizzo
- Funzionalità Tecniche
- Parametri di Configurazione
- FAQ
- Troubleshooting
- Changelog
- Licenza
✨ Caratteristiche
Funzionalità Principali
- ✅ Scansione AJAX Progressiva: Sistema non-bloccante che scansiona la libreria media in batch
- 📊 Progress Bar in Tempo Reale: Visualizzazione in tempo reale dell'avanzamento della scansione
- 🔍 Rilevamento Intelligente: Identifica immagini con status code 404, 410 o irraggiungibili
- 📅 Filtri Avanzati: Filtra le immagini per intervallo di date
- 🗑️ Eliminazione Massiva: Elimina tutte le immagini rotte con un solo clic
- 🎯 Eliminazione Singola: Possibilità di eliminare o modificare immagini individualmente
- ⚙️ Configurazione Flessibile: Parametri configurabili per batch size e limiti
- 🔒 Sicurezza Integrata: Nonce WordPress, capability checks e sanitizzazione input
- 💾 Risultati Persistenti: I risultati vengono salvati e sono consultabili anche dopo la scansione
- 🚫 Annullamento Scansione: Possibilità di interrompere la scansione in qualsiasi momento
Vantaggi
- Non-bloccante: Non rallenta il sito durante la scansione
- Scalabile: Gestisce migliaia di immagini senza problemi
- User-Friendly: Interfaccia intuitiva in italiano
- Efficiente: Richieste HTTP ottimizzate con timeout configurabili
- Affidabile: Gestione errori completa e logging dettagliato
🔧 Requisiti
Requisiti Minimi
- WordPress: 5.0 o superiore
- PHP: 7.4 o superiore
- MySQL: 5.6 o superiore
- Permessi utente:
upload_filescapability
Requisiti Consigliati
- WordPress: 6.0+
- PHP: 8.0+
- Memory Limit: 128MB minimo (256MB consigliato)
- Max Execution Time: 60 secondi minimo
- cURL o allow_url_fopen abilitato per richieste HTTP
📥 Installazione
Metodo 1: Installazione Manuale
- Scarica i file del plugin
- Crea una cartella
broken-imagesin/wp-content/plugins/ - Copia i file
broken-images.phpebroken-images.jsnella cartella - Vai su Plugin nel pannello WordPress
- Attiva Broken Images Scanner & Bulk Deleter
Metodo 2: Upload via Dashboard
- Comprimi i file del plugin in un file
broken-images.zip - Vai su Plugin > Aggiungi Nuovo
- Clicca su Carica Plugin
- Seleziona il file
.zipe clicca su Installa Ora - Attiva il plugin
Verifica Installazione
Dopo l'attivazione, dovresti vedere una nuova voce Broken Images nel menu laterale di WordPress con l'icona di un'immagine.
🚀 Utilizzo
1. Accedere al Plugin
Dal pannello di amministrazione WordPress:
- Clicca su Broken Images nel menu laterale
- Si aprirà la pagina principale del plugin
2. Configurare la Scansione
Parametri Disponibili
Data inizio (opzionale)
- Filtra le immagini caricate dopo questa data
- Formato: selettore data HTML5
- Lascia vuoto per scansionare tutte le immagini
Data fine (opzionale)
- Filtra le immagini caricate prima di questa data
- Formato: selettore data HTML5
- Lascia vuoto per scansionare tutte le immagini
Batch Size
- Numero di immagini da controllare per ogni richiesta AJAX
- Intervallo: 10 - 500
- Default: 100
- Consiglio: Usa valori più bassi (50-100) se hai problemi di timeout
Limite Massimo
- Numero massimo totale di immagini da scansionare
- Intervallo: 100 - 10.000
- Default: 2.000
- Consiglio: Per librerie molto grandi, fai scansioni multiple con filtri data
3. Avviare la Scansione
- Configura i parametri desiderati
- Clicca su Avvia Scansione
- Attendi il completamento (la progress bar si aggiornerà in tempo reale)
- Non chiudere la pagina durante la scansione
Monitoraggio Progresso
Durante la scansione vedrai:
- Progress Bar: Percentuale completamento visiva
- Controllati: Numero di immagini già verificate
- Rotti: Numero di immagini rotte trovate fino a ora
4. Visualizzare i Risultati
Al termine della scansione, la pagina si ricaricherà automaticamente e mostrerà:
- Data scansione: Timestamp dell'ultima scansione
- Immagini controllate: Totale immagini verificate
- Immagini rotte trovate: Numero di immagini con problemi
Tabella Risultati
Per ogni immagine rotta troverai:
- ID: ID WordPress dell'attachment
- Titolo: Nome/titolo dell'immagine
- URL: Link diretto al file immagine
- Status: Codice di risposta HTTP (es. 404, 410, ERROR)
- Azioni: Pulsanti per modificare o eliminare singolarmente
5. Eliminare le Immagini Rotte
Eliminazione Massiva
- Clicca su Elimina Tutte (N) sopra la tabella
- Conferma l'operazione nel popup di conferma
- Tutte le immagini rotte verranno eliminate definitivamente
⚠️ ATTENZIONE: Questa azione è irreversibile!
Eliminazione Singola
- Clicca su Elimina nella riga dell'immagine specifica
- Conferma l'operazione
- Solo quella immagine verrà eliminata
6. Annullare una Scansione
Durante una scansione in corso:
- Clicca sul pulsante Annulla
- La scansione si interromperà al completamento del batch corrente
- I risultati parziali verranno comunque salvati
🔬 Funzionalità Tecniche
Architettura
Backend (PHP)
Classe Principale: Broken_Images_Scanner
Hook WordPress:
admin_menu- Registra la pagina di amministrazioneadmin_enqueue_scripts- Carica asset JS/CSSwp_ajax_broken_images_scan_step- Gestisce scansione AJAXadmin_post_broken_images_delete- Gestisce eliminazione massiva
Metodi Principali:
ajax_scan_step()
- Esegue un batch di controlli sulle immagini
- Utilizza WP_Query con paginazione
- Salva risultati progressivi in
wp_options - Ritorna JSON con stato avanzamento
check_image_url( $url )
- Verifica accessibilità URL con
wp_remote_head() - Timeout: 10 secondi
- Redirection: max 5
- SSL verify: disabilitato (per compatibilità)
- Ritorna: codice HTTP o messaggio errore
handle_delete()
- Elimina definitivamente gli attachment con
wp_delete_attachment() - Include file allegati al media
- Reset risultati dopo eliminazione
Frontend (JavaScript)
Gestione Scansione Asincrona:
- Loop ricorsivo con
async/await - Fetch API per richieste AJAX
- Aggiornamento UI in tempo reale
- Gestione errori e timeout
Funzioni Principali:
loop() // Loop asincrono principale
setProgress(percentage) // Aggiorna progress bar
setMeta(text) // Aggiorna testo informativo
disable(boolean) // Blocca/sblocca form
Sicurezza
Verifica Permessi
current_user_can( 'upload_files' )
Nonce Validation
- AJAX:
check_ajax_referer() - Form POST:
check_admin_referer()
Sanitizzazione Input
sanitize_text_field()per dateintval()per numeriesc_url(),esc_html(),esc_attr()per output
Performance
Ottimizzazioni
- Query con
fields => 'ids'(solo ID, non oggetti completi) wp_remote_head()invece di GET (solo header, non body)- Batch processing per evitare timeout
- Transient caching per risultati
Limiti Configurabili
- Batch size: previene timeout PHP
- Limite massimo: previene sovraccarico server
- Timeout HTTP: 10 secondi per richiesta
⚙️ Parametri di Configurazione
Costanti Personalizzabili
Puoi modificare questi valori nel file broken-images.php:
// Timeout per richieste HTTP (secondi)
const HTTP_TIMEOUT = 10;
// Numero massimo di redirect da seguire
const HTTP_REDIRECTS = 5;
// Verifica SSL (true/false)
const HTTP_SSL_VERIFY = false;
Filtri WordPress
Il plugin supporta questi filtri per sviluppatori:
// Modifica argomenti query immagini
add_filter('broken_images_query_args', function($args) {
$args['posts_per_page'] = 50; // Custom batch size
return $args;
});
// Modifica timeout HTTP
add_filter('broken_images_http_timeout', function($timeout) {
return 15; // 15 secondi
});
// Modifica status codes considerati "rotti"
add_filter('broken_images_is_broken', function($is_broken, $status) {
// Considera rotto anche status 403
return in_array($status, [403, 404, 410]);
}, 10, 2);
❓ FAQ
1. Quanto tempo impiega una scansione?
Dipende dal numero di immagini:
- 100 immagini: ~1-2 minuti
- 1.000 immagini: ~10-15 minuti
- 5.000 immagini: ~40-60 minuti
2. Il plugin rallenta il mio sito?
No, la scansione è completamente asincrona e non influisce sulle performance del sito per i visitatori.
3. Posso recuperare le immagini eliminate?
No, l'eliminazione è permanente. Assicurati di avere un backup prima di procedere.
4. Cosa succede se chiudo la pagina durante la scansione?
La scansione si interromperà, ma i risultati parziali saranno salvati. Puoi riavviare la scansione in qualsiasi momento.
5. Quali status code vengono considerati "rotti"?
Tutti gli status code diversi da 200 (OK), inclusi:
- 404: Not Found
- 410: Gone
- 403: Forbidden
- 500: Server Error
- Errori di timeout/connessione
6. Il plugin funziona con CDN?
Sì, il plugin controlla l'URL finale dell'immagine, che può essere su un CDN.
7. Posso scansionare solo immagini recenti?
Sì, usa i filtri Data inizio e Data fine per limitare la scansione a intervalli specifici.
8. Il plugin elimina anche le miniature?
Sì, wp_delete_attachment($id, true) elimina l'attachment e tutte le sue dimensioni/thumbnail associate.
9. Viene fatto un backup automatico?
No, il plugin non crea backup. Si consiglia di usare un plugin di backup o fare backup manuale prima di eliminazioni massive.
10. Posso esportare i risultati?
Attualmente no, ma puoi copiare la tabella o aggiungere questa funzionalità personalizzando il plugin.
🔧 Troubleshooting
Problema: Scansione si blocca o timeout
Soluzione:
- Riduci il Batch Size a 50 o meno
- Aumenta
max_execution_timeinphp.ini:max_execution_time = 300 - Aumenta
memory_limit:memory_limit = 256M
Problema: Errore "Permessi insufficienti"
Soluzione:
- Assicurati che l'utente abbia il ruolo di Editor o superiore
- Verifica che l'utente abbia la capability
upload_files
Problema: Immagini non vengono trovate
Soluzione:
- Verifica che le immagini siano di tipo
post_type: attachment - Controlla che
post_mime_typesia un tipo immagine (image/*) - Verifica connessione internet del server
Problema: False positivi (immagini funzionanti segnalate come rotte)
Soluzione:
- Alcune immagini potrebbero avere protezioni anti-hotlinking
- Immagini su domini esterni potrebbero bloccare richieste HEAD
- Verifica manualmente prima di eliminare
Problema: Errore JavaScript in console
Soluzione:
- Pulisci cache browser
- Disattiva altri plugin che potrebbero causare conflitti
- Verifica compatibilità tema
Debug Mode
Abilita debug WordPress per vedere errori dettagliati:
// wp-config.php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
I log saranno in /wp-content/debug.log
📝 Changelog
Version 1.3.0 (Corrente)
- ✅ Implementazione completa funzionalità AJAX
- ✅ Aggiunta gestione errori migliorata
- ✅ Fix break level in loop controlli
- ✅ UI ottimizzata con progress bar
- ✅ Sanitizzazione e sicurezza completa
- ✅ Tabella risultati con azioni individuali
- ✅ Messaggi di conferma eliminazione
Version 1.2.0
- Aggiunta funzionalità filtri data
- Migliorata gestione batch size
Version 1.1.0
- Prima release pubblica
- Funzionalità base scansione
Version 1.0.0
- Release iniziale interna
🛠️ Sviluppo e Contributi
Struttura File
broken-images/
├── broken-images.php # Plugin principale (backend)
├── broken-images.js # Script frontend (AJAX)
└── README.md # Documentazione
Codice di Qualità
Il plugin segue:
- WordPress Coding Standards
- PHP PSR-12 per formattazione
- ES6+ per JavaScript
- Security best practices WordPress
Testing
Prima di ogni release:
- Test su PHP 7.4, 8.0, 8.1, 8.2
- Test su WordPress 5.0, 5.9, 6.0+
- Test con temi: Twenty Twenty-One, Twenty Twenty-Three
- Test con 100, 1.000, 5.000+ immagini
- Test con/senza CDN
- Security scan con WPScan
📄 Licenza
Questo plugin è rilasciato sotto GPL v2 o successiva.
Copyright (C) 2024 DWAY Agency
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
👥 Crediti
Sviluppato da: DWAY Agency
Versione: 1.3.0
Data Release: 2024
Tecnologie Utilizzate
- WordPress Core API
- jQuery
- Fetch API
- WP_Query
- WordPress HTTP API
📞 Supporto
Per segnalazioni bug, richieste funzionalità o domande:
- Email: support@dwayagency.com
- Website: https://dwayagency.com
⚠️ Disclaimer
L'eliminazione di file media è permanente e irreversibile.
Effettua sempre un backup completo prima di utilizzare la funzione di eliminazione massiva.
L'autore e DWAY Agency non sono responsabili per perdite di dati dovute all'uso improprio del plugin.
Grazie per aver scelto Broken Images Scanner & Bulk Deleter! 🎉
Se il plugin ti è utile, lascia una recensione e condividilo con la community WordPress italiana!