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/mavidasnc/wp-all-import-controller/archive/refs/heads/master.zipUpdates itself. It ships its own updater (Plugin Update Checker), so new versions appear under Dashboard → Updates.
Esegue 4 importazioni WP All Import Pro in sequenza con un solo click, stop al primo errore e log persistente.
Description
Esegue 4 importazioni WP All Import Pro in sequenza con un solo click, stop al primo errore e log persistente.
Esegue le importazioni WP All Import Pro in sequenza con un solo click dal pannello admin, con arresto al primo errore, barra di progresso live e log persistente.
Requisiti runtime: WordPress >= 6.0, PHP >= 8.1, WP All Import Pro >= 5.0.
Changelog
1.5.2 - 2026-05-19
Added:
readme.txtin formato WordPress.org generato dascripts/generate-readme.php(composer build:readme). Risolve il tab "Changelog" vuoto nel modal "Visualizza dettagli" di WordPress e rimuove l'avviso "plugin non testato con la tua versione corrente" impostandoTested up to: 6.9.4.- Verifica di sincronizzazione
readme.txt↔CHANGELOG.mdnel workflowrelease.yml: la release fallisce sereadme.txtnon è stato rigenerato prima del tag.
1.5.1 - 2026-05-18
Fixed:
- Watchdog 180s non scattava:
MvdWaiCtrlState::save()usavacurrent_time('mysql')perupdated_at, che restituisce l'orario nel fuso del sito WordPress. Il watchdog inajaxStatus()confrontava il valore contime()(sempre UTC) tramitestrtotime(), che lo interpretava nel fuso PHP del processo. Su hosting condate.timezone=UTCe WordPress impostato suEurope/Rome, il delta risultava negativo (fino a −7200 s in DST), rendendo la condizione> 180sempre falsa. Soluzione:updated_atè ora salvato come unix timestamp intero UTC (time()), eliminando qualsiasi conversione di fuso. Aggiunta migrazione inState::get()che converte il vecchio formato stringa MySQL al volo.
1.5.0 - 2026-05-18
Fixed:
- Resume con cron PMXI ancora attivo: al click di "Riprendi", prima di lanciare il loopback, vengono ora resettati i flag runtime PMXI (
triggered,processing,executing) sull'import corrente e si attende 3 secondi. Questo evita che un cron PMXI residuo blocchi la ripartenza, che prima richiedeva un reset manuale dalla UI di WP All Import Pro.queue_chunk_numbere i counter restano intatti, così l'import riprende dal record esatto in cui si era interrotto.
Added:
- History nativa WP All Import Pro: ogni import della chain genera ora un record
wp_pmxi_history(typeprocessing) e il relativo file HTML inuploads/wpallimport/logs/{history_id}/. Il log è appendito chunk-per-chunk, compatibile con import multi-chunk. I record eccedenti la soglialog_storagevengono rimossi prima di ogni nuova esecuzione. In caso di resume dopo un crash, il record history esistente viene riutilizzato.
1.4.0 - 2026-05-18
Added:
- Shutdown handler PHP:
register_shutdown_functionnel runner intercetta fatal error / OOM e scrive una rigacrashednel DB log e nel file di log prima che il processo muoia. - Watchdog AJAX:
ajaxStatus()rileva cron morti — seupdated_atè più vecchio di 180 s e il lock transient è assente, marca automaticamente il run comecrashed. - Log su file rotante: nuovo metodo
MvdWaiCtrlLogger::writeFile()scrive inwp-content/uploads/mvd-wai-ctrl-logs/YYYY-MM-DD.log. La cartella è protetta con.htaccessdeny-all. I file vengono rimossi dopo 30 giorni. Nuovo metodomarkRunCrashed()per chiudere run interrotti. - Banner errore persistente: sopra la progressbar compare un div rosso con messaggio di errore, passo interrotto e pulsanti "Riprendi" / "Reset". Resta visibile fino all'azione dell'utente.
- Ripresa import interrotto: nuovo handler AJAX
mvd_wai_ctrl_resumeche riprende la catena dacurrent_indexsenza resettare i counter PMXI, sfruttandoqueue_chunk_numberpersistente nel record PMXI.MvdWaiCtrlState::markResumeRequested()impostaresuming=trueper istruire il runner. - Resilienza polling JS: dopo 3 fallimenti AJAX consecutivi il polling si ferma e mostra il banner con messaggio "Impossibile contattare il server".
- Nuove costanti:
MVD_WAI_CTRL_WATCHDOG_THRESHOLD(180s),MVD_WAI_CTRL_LOG_DIR,MVD_WAI_CTRL_LOG_RETENTION_DAYS(30 giorni). - Nuovo outcome
crashednel log (distinto daerrorper crash inattesi). uninstall.phprimuove la cartella log all'eliminazione del plugin.
Changed:
MvdWaiCtrlState::defaultState()aggiungeresuming(bool) ecrash_reason(string|null).- Il blocco reset counter PMXI in
runStep()viene saltato quandoresuming=true.
1.3.3 - 2026-05-15
Fixed:
- Indicatore "Chunk X / Y" mostrava valori negativi su import multi-chunk.
queue_chunk_numberdi PMXI è una posizione crescente (record già processati), non un countdown:updateChunk()ora usa il valore direttamente come "fatto" ecountcome totale. Il testo è aggiornato in "Record X / Y" per riflettere la semantica corretta.
1.3.2 - 2026-05-15
Fixed:
MvdWaiCtrlRunner::runStep()non resettava i counter PMXI (imported,created,updated,skipped,queue_chunk_number,processing) prima di chiamareexecute(). Al primo chunk di ogni step il runner chiama ora$import->set([...])->update()con i counter azzerati, replicando il pattern della CLI di WP All Import Pro. Senza questo reset, una seconda esecuzione della catena usciva silenziosamente daexecute()(condizioneimported >= countoprocessing == 1già soddisfatta) e loggava erroneamente "Success" senza aver importato nulla.
1.3.1 - 2026-05-15
Added:
- Costante
MVD_WAI_CTRL_DB_VERSIONper versionare lo schema DB indipendentemente dal plugin. - Aggiornamento automatico dello schema DB a
plugins_loaded: semvd_wai_ctrl_db_versionin DB è diversa dalla costante,createTable()viene rieseguita senza bisogno di disattivare/riattivare il plugin.
1.3.0 - 2026-05-15
Added:
- Elemento
Chunk X / Ynella sezione di progresso: mostra il numero di chunk completati e il totale in modo visibile (non più solo nel messaggio di log). - Colonne
import_name,is_run_headerestarted_atnella tabella{prefix}mvd_wai_ctrl_log.import_nameconserva il nome amichevole dell'importazione al momento dell'esecuzione;is_run_headersostituisce il vecchio sentinelstep_index = -1;started_atregistra l'inizio reale di ogni step. - Metodo statico
MvdWaiCtrlRunner::getImportDisplayName()per risolverefriendly_name/namedi un'importazione PMXI con fallback su "Import ID N". - Metodo
MvdWaiCtrlState::markStepStart()per registrare il timestamp di inizio dello step e calcolarne la durata totale anche su import multi-chunk lunghi.
Changed:
- Nomi importazioni nella UI: la sezione "Sequenza configurata" e la barra di progresso live mostrano ora il nome amichevole dell'importazione (campo
friendly_namedi WP All Import Pro) invece del filename XML/CSV. - Barra di progresso corretta: la formula di calcolo percentuale usa ora
chunk_done / total_chunks(entrambe grandezze omogenee) invece diqueue_chunk_number / record_count. La barra cresce monotonicamente. duration_seccorretto: riflette la durata totale dello step (dalla prima esecuzione del primo chunk all'ultimo), non solo l'ultimo chunk. Il valore è ora coerente con la differenzacreated_at − started_atvisibile in DB.- Label
last_messagedurante l'elaborazione dei chunk semplificato a "Creati: X | Aggiornati: Y | Saltati: Z" (le info chunk sono nel nuovo elemento dedicato). - Storico: query
getRecentRuns()usaWHERE is_run_header = 1invece diWHERE step_index = -1.
Fixed:
- I
<details>dello storico run si chiudevano a ogni ciclo di polling (3 s) perchérefreshRunsTableriscrivevainnerHTMLdistruggendo il DOM. Ora i run aperti vengono salvati prima del re-render e ripristinati dopo.
1.2.0 - 2026-05-15
Removed:
- Form admin per il token GitHub (sezione "Impostazioni aggiornamenti"), costante
MVD_WAI_CTRL_GH_TOKENe optionmvd_wai_ctrl_gh_token. Il repository è ora pubblico: gli aggiornamenti automatici funzionano in modo anonimo senza necessità di autenticazione.
Changed:
- Repository GitHub passato da privato a pubblico: rimossa la dipendenza da Personal Access Token per scaricare le release.
Fixed:
- Pulizia automatica dell'option
mvd_wai_ctrl_gh_tokenresidua nei siti che avevano già salvato un token (eseguita una volta aplugins_loadedpriority 1).
1.1.0 - 2026-05-14
Changed:
- Architettura runner: da "4 import in 1 loopback" a "1 chunk per loopback".
MvdWaiCtrlRunner::runChain()è stato sostituito darunStep()+scheduleSelf(). Ogni richiesta loopback admin-ajax (o hit cron di fallback) processa un solo chunk PMXI e poi ri-schedula sé stessa, finché l'import non è completo. Quando l'import è completo, avanza al successivo. Questo risolve due problemi strutturali. - Lock anti-doppio-avvio ridotto da 600 s a 120 s (copre un singolo chunk PMXI ≈ 59 s con margine).
MvdWaiCtrlStateesteso concurrent_index,current_chunk,current_total_chunksper tracciare l'avanzamento intra-import. AggiuntoadvanceToNextImport()eupdateChunk().- La barra di progresso (PHP e JS) calcola ora una percentuale frazionaria basata sui chunk, risultando più fluida su import grandi.
- La logica di schedulazione loopback è estratta in
MvdWaiCtrlRunner::scheduleSelf()(DRY): usata sia dall'avvio AJAX sia dall'auto-ri-schedulazione nel runner.
Fixed:
- Import grandi troncati silenziosamente. In precedenza, se
execute()superava ilcron_processing_time_limitdi PMXI (≈ 59 s), l'import veniva considerato completato anche sequeue_chunk_number > 0. Ora il runner ri-invocaexecute()finchéqueue_chunk_number == 0(segnale di completamento PMXI). - Bug WPML language_code sticky in catena. Il singleton
WPAI_WPML(add-on WPML All Import v2.3.2) non resettava$language_codetra import consecutivi nella stessa richiesta PHP. Con 1 richiesta loopback per import, il singleton si ricrea ad ogni richiesta HTTP e il bug non si manifesta. - Fallback
wp_schedule_single_eventnon funzionante. In contesto WP-Cronis_admin()=falseePMXI_Plugin::isAdminDashboardOrCronImport()restituiva false, impedendo il caricamento diPMXI_Import_Record. Il runner ora aggiungeadd_filter('pmxi_is_admin_dashboard_or_cron_import', '__return_true')prima di toccare PMXI, rendendo il fallback cron effettivamente operativo.
1.0.1 - 2026-05-14
Added:
- Aggiornamenti automatici direttamente dalla schermata Plugin di WordPress tramite Plugin Update Checker (YahnisElsts v5). Il plugin controlla le GitHub Releases del repository privato
mavidasnc/WP-All-Import-Controller. - Campo Token GitHub nella pagina admin del plugin (sezione "Impostazioni aggiornamenti"): permette di salvare il Personal Access Token direttamente dall'interfaccia WordPress senza toccare
wp-config.php. Il token è salvato come WP option (autoload off) e rimosso alla disinstallazione del plugin. - Supporto opzionale alla costante
MVD_WAI_CTRL_GH_TOKENinwp-config.php(ha precedenza sull'option salvata, utile in ambienti dev). - Workflow GitHub Actions (
.github/workflows/release.yml) che a ogni tagv*builda uno.zippulito (solo dipendenze di produzione, senzatests/,vendor/bin, file di configurazione dev) e lo allega come asset alla GitHub Release.
1.0.0 - 2026-05-14
Added:
- Pannello admin dedicato con menu top-level "Import Sequenziale".
- Esecuzione sequenziale di 4 importazioni WP All Import Pro con un solo click.
- Esecuzione asincrona in background tramite
wp_schedule_single_event(no timeout browser). - Stop automatico alla prima importazione fallita con messaggio di errore.
- Barra di progresso con polling AJAX ogni 3 secondi.
- Toast di notifica a completamento/errore.
- Log persistente in tabella custom
{prefix}mvd_wai_ctrl_logcon storico ultime 20 esecuzioni. - Dettaglio per-step: record creati, aggiornati, saltati, durata, messaggi di log.
- Lock anti-doppio-avvio tramite transient WordPress.
- Routine di disinstallazione (
uninstall.php) che rimuove tabella e option. - Compatibilità WordPress >= 6.0, PHP >= 8.1, WP All Import Pro >= 5.0.