WP Manifestindependent plugin directory
manifest / content / wp-static-fuse-search

Static Fuse.js Search

Plugin WordPress per la ricerca statica multilingua con Fuse.js, traduzione batch e rilevamento automatico degli URL tramite hreflang.

by Dev · github.com/currentjot/wp-static-fuse-search · website

0stars
1release downloads
0forks

Install

The author publishes release zips, so WP-CLI can install straight from GitHub:

wp plugin install https://github.com/currentjot/wp-static-fuse-search/releases/download/v1.3.0/wp-static-fuse-search.zip

Readme

wp-static-fuse-search

Ricerca statica multilingua per WordPress con indice Fuse.js, traduzione batch tramite API compatibile LibreTranslate e rilevamento automatico degli URL tradotti via tag hreflang.

Repository: github.com/currentjot/wp-static-fuse-search


Funzionalità

  • Generazione in background — la generazione dell'indice avviene interamente sul server; puoi chiudere la pagina e riaprirla in seguito per vedere il risultato
  • Ricerca client-side — nessuna query al database, zero latenza
  • Multilingua — genera un indice JSON separato per ogni lingua
  • Traduzione batch — titoli ed excerpt vengono tradotti in blocchi di 10 tramite qualsiasi endpoint compatibile LibreTranslate
  • URL tradotti automatici — legge i tag <link rel="alternate" hreflang> direttamente dall'HTML di ogni post; funziona con qualsiasi plugin di traduzione (WPLNG, WPML, Polylang, ecc.)
  • Aggiornamento incrementale — aggiunge solo i nuovi post e rimuove quelli eliminati senza ricostruire l'indice da zero
  • Aggiornamento automatico — (preferenza attivabile, attiva di default) quando pubblichi, modifichi o elimini un articolo/pagina, l'indice viene sistemato e controllato in automatico via WP-Cron; anche l'URL viene corretto se cambi lo slug/permalink, in tutte le lingue
  • Toggle frontend — abilita o disabilita il dropdown di ricerca direttamente dall'admin, senza disattivare il plugin
  • Toggle auto-sync — attiva o disattiva l'aggiornamento automatico dell'indice al salvataggio dei contenuti
  • Elimina indici — rimuove tutti i file JSON generati in un click
  • Interfaccia admin — pannello con statistiche, barra di avanzamento e log in tempo reale
  • Dropdown ricerca — si aggancia a qualsiasi input[type="search"] o input[name="s"] già presente nel tema
  • Mobile-friendly — target di tocco generosi, nessun zoom indesiderato su iOS, footer tastiera nascosto su touch

Requisiti

Requisito Versione minima
WordPress 6.0
PHP 8.0
Fuse.js (CDN) 6.6.2

Installazione

  1. Copia wp-static-fuse-search.php nella cartella /wp-content/plugins/wp-static-fuse-search/
  2. Attiva il plugin da Plugin → Plugin installati
  3. Configura le costanti in wp-config.php (vedi sezione Configurazione)
  4. Vai in Strumenti → Indice Ricerca e clicca Ricostruzione Completa

Configurazione

Aggiungi le seguenti righe in wp-config.php prima della riga /* That's all, stop editing! */:

// Obbligatoria — URL del tuo endpoint LibreTranslate
define( 'SFS_TRANSLATE_API', 'https://translate.tuosito.com/translate' );

// Usate solo se non hai un plugin di traduzione attivo (WPLNG, WPML, Polylang)
define( 'SFS_SOURCE_LANG',  'it' );       // lingua sorgente
define( 'SFS_TARGET_LANGS', 'en,fr,de' ); // lingue target separate da virgola

Priorità di risoluzione

Valore
Lingua sorgente Plugin attivo (WPLNG) SFS_SOURCE_LANG 'it'
Lingue target Plugin attivo (WPLNG) SFS_TARGET_LANGS nessuna
API traduzione SFS_TRANSLATE_API traduzione disabilitata

⚠️ Se SFS_TRANSLATE_API non è definita, la traduzione è completamente disabilitata. Viene generato solo l'indice nella lingua sorgente e un avviso appare nella dashboard WordPress.


Come funziona

Generazione in background

Quando clicchi Ricostruzione Completa o Aggiorna, il browser riceve subito una conferma di avvio e la connessione HTTP si chiude. Il server prosegue l'esecuzione in modo autonomo tramite ignore_user_abort(true) — puoi chiudere la tab o il browser senza interrompere il processo.

Lo stato, il progresso e il log vengono scritti nelle opzioni di WordPress e letti dal browser ogni 2 secondi tramite polling. Se riapri la pagina mentre un job è in corso, il polling riprende automaticamente da dove si era fermato.

💡 Su hosting con PHP-FPM la connessione viene chiusa tramite fastcgi_finish_request(). Su Apache/Nginx classico viene usato flush() con l'header Connection: close.

Ricostruzione Completa

  1. Il plugin raccoglie tutti i post/pagine pubblicati (max 500)
  2. Per ogni post effettua una richiesta HTTP alla sua URL e legge i tag hreflang nel <head> per ottenere i permalink nelle lingue target
  3. Salva index-{lingua}.json nella cartella wp-content/uploads/static-search/
  4. Per ogni lingua target, traduce titoli ed excerpt in blocchi da 10 e salva il file JSON
  5. Genera _meta.json con l'elenco degli ID e URL indicizzati (usato dagli aggiornamenti incrementali)

Aggiornamento Incrementale

Esegue una diff tra l'indice esistente e i post pubblicati correnti:

  1. Legge _meta.json per sapere quali post sono già nell'indice
  2. Confronta con i post pubblicati → individua nuovi e rimossi
  3. Traduce e aggiunge solo i nuovi post a tutti i file lingua
  4. Rimuove dalle versioni tradotte i post che non esistono più
  5. Se non ci sono differenze, notifica che l'indice è già aggiornato

💡 Usa Aggiorna per le operazioni quotidiane. Usa Ricostruzione Completa dopo modifiche importanti al contenuto o alla struttura del sito.

Toggle Frontend

L'interruttore in Impostazioni abilita o disabilita il dropdown di ricerca su tutto il sito senza dover disattivare il plugin. La preferenza è salvata nelle opzioni di WordPress.

Ricerca frontend

Il plugin si aggancia automaticamente a tutti gli input[type="search"] e input[name="s"] della pagina. All'avvio carica index-{lang}.json corrispondente alla lingua corrente (rilevata da document.documentElement.lang), con fallback alla lingua sorgente.

Il dropdown mostra fino a 6 risultati con titolo ed excerpt, navigabile da tastiera (↑↓ per spostarsi, per aprire, Esc per chiudere).

Il submit nativo del form di ricerca di WordPress viene bloccato automaticamente quando il dropdown è attivo.


Struttura dei file generati

wp-content/uploads/static-search/
├── index-it.json
├── index-en.json
├── index-fr.json
├── _meta.json        ← usato per gli aggiornamenti incrementali
└── ...

Ogni file indice ha questa struttura:

[
  {
    "title": "Titolo del post",
    "url": "https://tuosito.com/it/titolo-del-post/",
    "excerpt": "Le prime quindici parole del contenuto del post…"
  }
]

Il file _meta.json tiene traccia degli ID e degli URL indicizzati:

{
  "entries": [
    { "id": 42, "url": "https://tuosito.com/it/titolo-del-post/" }
  ],
  "ts": 1741996800
}

Compatibilità plugin di traduzione

Il plugin rileva automaticamente WPLNG, WPML e Polylang per ottenere la lingua corrente e le lingue target. In assenza di questi plugin usa le costanti SFS_SOURCE_LANG e SFS_TARGET_LANGS.

Gli URL tradotti vengono sempre letti dai tag hreflang presenti nell'HTML, quindi sono compatibili con qualsiasi plugin che li emetta correttamente.


Licenza

GPL-2.0-or-later

Read the full README on GitHub →

Releases

TagPublishedAssetDownloads
v1.3.0 Jul 7, 2026 wp-static-fuse-search.zip 1
v1.2.0 Mar 15, 2026 wp-static-fuse-search.zip 0
v1.1.0 Mar 15, 2026 wp-static-fuse-search.zip 0
v1.0.0 Mar 15, 2026 wp-static-fuse-search.zip 0