Import, export e sincronizzazione
Esporta il sito in file JSON, importali con controllo dei conflitti e sincronizzali con la cartella locale.
In questa pagina
01Panoramica
Nucleo salva il documento JSON di ogni pagina nei metadati del post e la configurazione del sito in opzioni WordPress. I dati precalcolati per il frontend ("artefatti") stanno in file PHP sotto wp-content/uploads/nucleo/store/, oppure in opzioni se la cartella non è scrivibile. L'export trasforma il sito in una mappa "percorso relativo → testo JSON": site.json, pages/, posts/, layouts/, sections/, menus/, media/manifest.json, rules/assets.json, content/ e terms/ per i tipi e le tassonomie modellati. L'import legge la stessa mappa e crea o aggiorna ogni documento per tipo di post e slug, e ogni elemento e termine per slug. site.json contiene un'impronta (base) di ogni documento al momento dell'export: l'import la usa per rilevare le modifiche fatte sul sito nel frattempo. Tre superfici usano lo stesso motore: le ability nucleo/site-export e nucleo/site-import, i comandi WP-CLI wp nucleo export|import|sync e la pagina Strumenti. La CLI locale nucleo pull e nucleo push chiama le ability via REST e aggiunge il caricamento delle immagini (media/).
02Archiviazione
Documento e storico nei metadati del post
Cosa fa: salva il documento sorgente, il numero di revisione, l'indice runtime e lo storico delle ultime versioni nei metadati del post.
Come si usa: interno. Lo usa la pipeline di salvataggio per ogni scrittura di documento.
Parametri:
| Meta | Contenuto | Note |
|---|---|---|
_nucleo_doc | Documento JSON | Salvato con wp_slash(wp_json_encode(...)): nel database c'è il JSON così com'è. Letto senza wp_unslash. |
_nucleo_rev | Numero di revisione (intero) | |
_nucleo_rt | Indice runtime (slot e asset della pagina) | Letto dal frontend. |
_nucleo_hist | Storico: lista di {rev, doc, time, user} | Tiene le ultime 20 versioni (HISTORY_LIMIT). |
_nucleo_wp_content | Copia del post_content originale | Scritta quando un contenuto esistente riceve il primo documento Nucleo. |
_nucleo_dep, _nucleo_links, _nucleo_stale, _nucleo_ack, _nucleo_stale_quality | Dipendenze, bersagli dei link, errori dell'ultima ricompilazione, consensi validi, stato qualità | Gestiti dalla pipeline di salvataggio. Vedi il capitolo sul compilatore e il runtime. |
L'HTML compilato va in post_content. Il CSS compilato dei blocchi va in uploads/nucleo/css/.
Permessi: dipendono dall'ability o dal comando che salva.
Edizione: Free
Limiti noti: lo storico conserva 20 versioni. Il ripristino restituisce il documento di una revisione ma non lo salva: decide il chiamante (vedi nucleo/doc-rollback nelle ability di scrittura).
Opzioni del sito
Cosa fa: conserva la configurazione di Nucleo nella tabella delle opzioni.
Come si usa: interno. Le ability di design e di amministrazione scrivono queste opzioni.
Parametri: opzioni rilevanti per import ed export.
| Opzione | Contenuto | Autoload |
|---|---|---|
nucleo_tokens | Gruppi dei design token | no |
nucleo_asset_rules | Regole degli asset (rules/assets.json) | no |
nucleo_content_model | Modello dei contenuti | no |
nucleo_store_generation | Generazione dello store degli artefatti | sì |
nucleo_store_rebuild_lock | Lock della ricostruzione degli artefatti (valore: time()) | no |
nucleo_art_<chiave>, nucleo_art__index | Artefatti del driver option e indice delle chiavi | no |
nucleo_audit_inserts | Contatore delle righe del registro di audit | no |
Le impostazioni WordPress esportate in site.json (blogname, blogdescription, show_on_front, page_on_front, page_for_posts, date_format, time_format, lingua) restano nelle opzioni native.
Permessi: dipendono dall'ability o dal comando che scrive.
Edizione: Free
Limiti noti: nessuno rilevato.
Store degli artefatti
Cosa fa: salva array PHP precalcolati che il frontend legge a ogni richiesta: token, mappa dei layout, layout compilati, regole asset, modello dei contenuti e CSS critico.
Come si usa: interno. Lo store usa la cartella wp-content/uploads/nucleo/store. Il driver attivo compare in nucleo/status e nella scheda "System status" della pagina Strumenti.
Parametri: due driver.
| Driver | Dove | Come scrive | ||
|---|---|---|---|---|
php-file | wp-content/uploads/nucleo/store/<blog>-<generazione>/<chiave>.<hash8>.php | File temporaneo nella stessa cartella, poi spostamento al posto finale. Il file contiene `<?php defined('ABSPATH') \ | \ | exit; return [...];. Il nome include 8 caratteri dello SHA-1 del codice. Le versioni vecchie della chiave si cancellano con opcache_invalidate. La cartella riceve index.php vuoto e .htaccess con Require all denied`. |
option | Opzioni nucleo_art_<chiave>, mai autoload | update_option. L'indice nucleo_art__index elenca le chiavi, così lo svuotamento cancella solo le opzioni dello store. |
Nucleo sceglie php-file se la cartella esiste o si può creare ed è scrivibile. Altrimenti sceglie option. Chiavi usate: tokens, layouts, layout-<id>, asset-rules, content-model, critical e lo stato dell'ottimizzatore CSS.
Permessi: nessuno: lo store non è esposto.
Edizione: Free
Limiti noti: le chiavi devono rispettare /^[a-z0-9][a-z0-9_-]{0,63}$/. I valori accettano solo scalari, null e array annidati: oggetti, risorse, NAN e INF danno un errore. Un file illeggibile vale come artefatto assente.
Generazione dello store e ricostruzione
Cosa fa: separa i file degli artefatti di ogni database. Dopo un reset o un import del database, la generazione nell'opzione manca. Nucleo allora non legge i file vecchi e ricostruisce gli artefatti dal database.
Come si usa: automatico. All'avvio dell'area di amministrazione (admin_init) Nucleo crea la generazione se manca e ricostruisce lo store se mancano tokens o layouts. Anche la prima scrittura senza generazione la crea. L'ability nucleo/cache-rebuild ricostruisce lo store senza ricompilare i documenti.
Parametri: la generazione è un identificativo di 10 caratteri esadecimali (5 byte casuali) in nucleo_store_generation. Il formato accettato è /^[a-z0-9]{1,16}$/.
- Sul sito principale, alla creazione della generazione, Nucleo sposta nella nuova cartella i file della cartella base se il database ha dati Nucleo (documenti, layout o modello dei contenuti). Senza dati li cancella.
- Poi cancella le altre generazioni dello stesso blog.
- La ricostruzione ripubblica token, regole asset, layout e modello dei contenuti. Con l'opzione di ricompilazione accoda anche la ricompilazione di tutti i documenti.
Permessi: il controllo in admin_init gira per ogni utente che apre la bacheca. nucleo/cache-rebuild richiede manage_options e lo scope nucleo:admin.
Edizione: Free
Limiti noti: la ricostruzione usa un lock di 300 secondi: una seconda richiesta restituisce false. Un errore del filesystem in admin_init si ignora e la richiesta successiva riprova. Il frontend non ricostruisce mai lo store.
Registro di audit
Cosa fa: registra ogni scrittura delle ability con utente, client OAuth, ability, post, esito e riepilogo. nucleo/site-import scrive una riga per chiamata con riepilogo import o dry-run.
Come si usa: interno. Si legge con nucleo/audit-list.
Parametri: tabella {prefix}nucleo_audit con colonne id, time, user_id, client_id, ability, post_id, ok, summary.
Permessi: dipendono dall'ability che legge.
Edizione: Free
Limiti noti: conserva le ultime 10.000 righe. La pulizia avviene ogni 100 inserimenti. ability è troncato a 64 caratteri, summary a 255. La lettura restituisce al massimo 1.000 righe.
03Pacchetto di export
Struttura dei file
Cosa fa: definisce i file prodotti dall'export. Ogni valore è testo JSON con rientri, barre e Unicode non escapati.
Come si usa: lo producono nucleo/site-export, wp nucleo export, la pagina Strumenti (zip) e nucleo pull.
Parametri:
| Percorso | Contenuto |
|---|---|
site.json | Token, breakpoint, impostazioni del sito, impronte. Sempre primo. |
pages/<slug>.json | Documenti del tipo page |
posts/<slug>.json | Documenti del tipo post |
layouts/<slug>.json | Documenti del tipo nucleo_layout |
sections/<slug>.json | Documenti del tipo nucleo_section |
menus/<slug>.json | Un file per menu: {"name", "items": [...]} |
media/manifest.json | Elenco degli allegati: [{file, url, alt, sha1}] |
rules/assets.json | Regole degli asset |
content/<tipo>/<slug>.json | Elementi dei tipi modellati, senza type e managedBy. Un elemento di page o post che ha già un documento non si ripete. |
terms/<tassonomia>.json | Termini delle tassonomie modellate, come lista. |
Si esportano solo i post dei quattro tipi che hanno un documento Nucleo, con stato any, in ordine di ID. Lo slug del file è post_name. Una bozza senza slug usa lo slug generato dal titolo, oppure post-<ID>.
Permessi: vedi nucleo/site-export.
Edizione: Free
Limiti noti: due post con lo stesso percorso (stesso tipo e stesso slug) producono un solo file: vince quello con ID più alto. Una pagina figlia usa solo il proprio slug nel nome del file: due pagine figlie omonime con genitori diversi collidono. Le pagine in un'altra lingua con lo stesso slug collidono allo stesso modo. Con un sito multilingua l'esito non è verificato: il percorso non distingue la lingua. Gli elementi con managedBy non si esportano in content/: stanno in pages/ o posts/.
site.json
Cosa fa: porta configurazione globale e impronte per il controllo dei conflitti.
Come si usa: si modifica in locale e si reinvia con l'import. Dopo un push riuscito la CLI aggiorna le chiavi base, tokensBase e siteBase.
Parametri:
| Chiave | Tipo | Note |
|---|---|---|
schema | intero | Deve valere 1. Un altro valore dà errore "Unsupported schema." e ferma la lettura di site.json. |
exportedAt | stringa | Data UTC Y-m-d\TH:i:s\Z. L'import non la usa. |
base | oggetto | Percorso → impronta SHA-1 del documento all'export (vedi Controllo dei conflitti). |
tokens | oggetto | Contenuto di nucleo_tokens. |
tokensBase | stringa | Impronta dei token effettivi all'export. |
breakpoints | oggetto | Larghezze minime dei breakpoint. L'import non le legge. |
site | oggetto | title, tagline, homepage, postsPage, language, dateFormat, timeFormat. business, icons, imageFormats e siteIcon solo se impostati. |
siteBase | oggetto | Chiave di site → impronta del valore all'export. |
homepage e postsPage sono lo slug (o il percorso, per una pagina figlia) della pagina. homepage vale null se la home mostra gli ultimi articoli.
Permessi: vedi nucleo/site-import.
Edizione: Free
Limiti noti: breakpoints è solo informativo: l'import non lo applica.
File di documento
Cosa fa: contiene il documento Nucleo (vedi lo schema del documento e dei blocchi) più il blocco wp con i dati WordPress.
Come si usa: {"schema": 1, "kind": ..., "meta": {...}, "root": {...}, "wp": {...}}.
Parametri: chiavi del blocco wp.
| Nome | Tipo | Valori ammessi | Default | Note |
|---|---|---|---|---|
slug | stringa | non vuota | obbligatorio | Chiave di ricerca all'import, con postType. |
postType | stringa | page, post, nucleo_layout, nucleo_section | obbligatorio | |
title | stringa | non vuota | obbligatorio | |
status | stringa | publish, draft, pending, private, future | — | publish pubblica. draft, pending e private valgono anche per un post esistente: una pagina pubblicata torna bozza. Senza la chiave un post esistente mantiene il suo stato. future vale solo per un post già programmato sul sito, che resta com'è. Un altro valore, o future su un post non programmato, dà l'errore unsupported_status e il file non si salva. |
parent | stringa o null | slug o percorso della pagina genitore | assente | Solo pagine. null = primo livello. Chiave assente = genitore invariato. L'export la scrive sempre per le pagine. |
lang | stringa | /^[a-z-]{2,5}$/i | assente | Scritto e applicato solo con il pacchetto Pro e l'integrazione multilingua. |
translations | oggetto | lingua → percorso del file | assente | Come lang. L'export lo scrive se il gruppo ha più di una traduzione esportata. |
Riferimenti simbolici: l'export sostituisce gli ID con nomi leggibili e l'import li riconverte.
| Dove | Simbolo |
|---|---|
ref di un nodo (section:<id>) | section:<slug> |
settings.menu di nc/menu | menu:<slug>; all'import vale anche lo slug semplice |
meta.conditions di tipo post, parent | page:<slug> o post:<slug> |
meta.conditions di tipo term, term_archive | term:<tassonomia>:<slug> |
meta.conditions di tipo author, author_archive | author:<login> |
Campi src, url, href, poster con l'URL di un allegato | media:<nome file> |
Permessi: vedi nucleo/site-import.
Edizione: Free. lang e translations richiedono il pacchetto Pro con un plugin multilingua. Nucleo controlla la presenza del componente multilingua, non la licenza.
Limiti noti: un ID senza nome resta numerico. Succede per post di tipi personalizzati nelle condizioni e per oggetti cancellati. Un URL media fuori dal manifest (per esempio una dimensione ridotta -300x200) resta assoluto. All'import un simbolo non risolto dà "Unresolved symbol: …".
menus/<slug>.json
Cosa fa: esporta un menu WordPress con le sue voci. Il nome del file è lo slug del menu.
Come si usa: {"name": "...", "items": [{"label", uno tra page | post | ref | url, "children"?}]}. ref accetta <post-type>:<slug>, term:<tassonomia>/<slug>, archive:<post-type> o home.
Parametri: vedi la descrizione completa del formato in nucleo/menu-set.
Permessi: vedi nucleo/site-import.
Edizione: Free
Limiti noti: l'export salta le voci con bersaglio non pubblicato, cancellato o non pubblico. L'ability le riporta in skipped con menu, label e reason.
Media nell'export
Cosa fa: media/manifest.json elenca gli allegati con stato inherit che hanno un file su disco: file (nome del file originale, non la copia -scaled), url, alt e sha1 del file.
Come si usa: l'export non include i file binari. All'import ogni media:<file> diventa l'URL di un allegato del sito di destinazione, in quest'ordine:
- allegato con lo stesso nome file e lo stesso
sha1; - allegato del sito a cui punta
urldella voce, se il file ha lo stessosha1; - download dall'
urldella voce conmedia_sideload_image.
Un nome assente dal manifest usa l'allegato in libreria con lo stesso nome file, qualunque sia lo sha1. Nel dry-run l'URL viene dal manifest, senza download.
Parametri: nessuno.
Permessi: vedi nucleo/site-import.
Edizione: Free
Limiti noti: il download richiede che l'URL del sito di origine sia raggiungibile dal sito di destinazione e superi la validazione degli URL di WordPress. Errori: "Media not found in the manifest or in the library: …", "Invalid media URL: …", "Media not downloaded (…): …". Il manifest contiene tutta la libreria, non solo gli allegati usati.
04Export e import
nucleo/site-export
Cosa fa: restituisce il sito come mappa di file JSON, compresi gli elementi di content/ e i termini di terms/ dei tipi e delle tassonomie modellati.
Come si usa: ability di lettura, GET su /wp-json/wp-abilities/v1/abilities/nucleo/site-export/run, oppure tool MCP. Input vuoto. Output {files: {percorso: testo}, skipped: [{menu, label, reason}]}.
Parametri: nessuno.
Permessi: manage_options; scope OAuth nucleo:admin.
Edizione: Free
Limiti noti: nessuna paginazione: la risposta contiene tutti i documenti, gli elementi e il manifest completo. L'export non è un backup completo del sito: non contiene il modello dei contenuti, le impostazioni di Nucleo, le impostazioni per pagina (_nucleo_page), i campi dei documenti e i documenti su tipi di contenuto generici. Per un backup si usa uno strumento di WordPress. Annotazioni: readonly, idempotent.
nucleo/site-import
Cosa fa: importa i file prodotti da nucleo/site-export. Crea o aggiorna token, termini, elementi, sezioni, pagine, post, layout, regole, media, menu e impostazioni del sito.
Come si usa: ability di scrittura, POST su /wp-json/wp-abilities/v1/abilities/nucleo/site-import/run, oppure tool MCP. Esempio: {"files": {"pages/home.json": "{...}"}, "dryRun": true}.
Parametri:
| Nome | Tipo | Valori ammessi | Default | Note |
|---|---|---|---|---|
files | oggetto | percorso → testo JSON | obbligatorio | |
dryRun | booleano | false | Valida ogni documento come un import vero (schema e qualità bloccante) senza scrivere. Un documento che cita contenuti creati dallo stesso push non si valida e riceve un avviso. | |
force | booleano o lista di stringhe | true, false, o percorsi | false | true sovrascrive tutti i file cambiati sul sito. Una lista sovrascrive solo quei percorsi. "site.json" vale per token e impostazioni. |
pending | lista di stringhe | simboli, es. evento:congresso, page:servizi/consulenza, term:area/nutrizione | [] | Solo con dryRun. Contenuti e termini che lo stesso push crea prima: menu e impostazioni li trattano come trovati. |
acknowledge | oggetto | percorso → [{rule, node, reason}] | {} | Segnalazioni bloccanti accettate da una persona, per file. reason non vuoto. |
Output: created, updated, unchanged (interi), errors ([{file, message, code, guide?}]), warnings ([{file, message}]), ids (simbolo → ID), base, tokensBase, siteBase. Codici d'errore: error, conflict, duplicate, not_json, invalid_document, quality_blocking, unsupported_status, legacy_base. Un codice di un altro servizio diventa error e resta in testa al messaggio (per esempio menu_target_missing: …).
Permessi: manage_options; scope OAuth nucleo:admin. Il limite di frequenza delle scritture vale anche qui.
Edizione: Free
Limiti noti: input non valido dà WP_Error invalid_input. Un errore su un file non ferma gli altri. tokensBase compare solo se i token del sito ora coincidono con quelli di site.json. siteBase compare solo dopo un import vero con blocco site. Il dry-run non restituisce diff né report qualità completo: solo conteggi, errori e avvisi. Annotazioni: non readonly, non destructive, idempotent.
Ordine e regole dell'import
Cosa fa: descrive come l'import elabora i file.
Come si usa: vale per ability, WP-CLI, pagina Strumenti e nucleo push.
Parametri: ordine di elaborazione.
- Ogni percorso che non finisce in
.jsondànot_json. Un file.phpriceve ancheguidecon la regola sul codice dei componenti. site.json: lettura dibase,site,siteBase; scrittura dei token.media/manifest.json.terms/*.json, poicontent/<tipo>/*.json: upsert per slug, in lotti da 500 termini e da 25 elementi. Il genitore arriva prima dei figli.menus/*.json: crea o rinomina i menu, senza voci.sections/, ordinate per dipendenza: una sezione inserita in un'altra connc/section-refarriva prima.pages/, ordinate perwp.parent: il genitore arriva prima dei figli.posts/, poilayouts/.- Voci dei menu, quando pagine e post esistono.
rules/assets.json.- Lingue e collegamento delle traduzioni (solo import vero, solo con il pacchetto Pro).
- Impostazioni del blocco
site. La lingua si applica per ultima.
Le pagine arrivano prima dei layout: le condizioni dei layout citano le pagine.
Regole per i documenti:
- Ricerca per
postTypeeslugcon qualsiasi stato. Un post trovato si aggiorna, altrimenti si crea. - Due file con stesso tipo, slug e lingua: il secondo dà
duplicate. - Documento, titolo, stato e genitore uguali al sito: nessun salvataggio, conteggio in
unchanged. - Una sezione non importata fa fallire le pagine che la usano, con il motivo.
wp.parentsu un tipo diverso dapage, un genitore non trovato o un ciclo danno errore. Un figlio pubblicato con genitore non pubblicato dà un avviso.- Il salvataggio passa dalla stessa pipeline di
doc-createedoc-patch: schema, qualità bloccante,acknowledge. - Un file in una cartella non elencata (per esempio
other/) si ignora senza errore.
Regole per content/ e terms/:
- Il nome del file deve essere lo
slugdell'elemento e la cartella deve essere il suotype; altrimenti l'elemento dà errore. - Uno slug uguale a un documento di
pages/oposts/dàduplicate: vince il documento. - Nell'import non c'è controllo di conflitto: l'upsert sovrascrive gli elementi e i termini con lo stesso slug. Le impronte di
site.jsonriguardano solo i documenti. Il controllo su ogni elemento e termine lo fa la CLI con la suabase(vedinucleo push).
Permessi: quelli della superficie che chiama.
Edizione: Free
Limiti noti: le regole asset si sostituiscono per intero. L'import non cancella mai post, menu, termini, elementi o voci assenti dai file: solo wp nucleo sync --prune cestina i documenti Nucleo. La lingua del blocco site può richiedere il download del pacchetto: serve il permesso di installare lingue, oppure WP-CLI senza utente, e nessun DISALLOW_FILE_MODS. Senza pacchetto l'errore ha codice language_unavailable e le altre chiavi restano scritte.
Controllo dei conflitti
Cosa fa: confronta a tre vie il file locale, la base di site.json e lo stato del sito. Evita che un import cancelli modifiche fatte sul sito dopo l'export.
Come si usa: automatico quando site.json ha base, tokensBase o siteBase. Si scavalca con force. Non si applica a content/ e terms/ nell'import: per quei file la CLI confronta la base di ogni elemento e termine (vedi nucleo push).
Parametri: impronte.
- Documento:
sha1del documento normalizzato, del titolo e dello stato del post, con prefissov2:. Per una pagina figlia l'impronta include il percorso del genitore. Uno spostamento, un titolo o uno stato cambiati sul sito valgono come modifica del documento. Una base senza prefissov2:usa il confronto precedente, senza titolo e stato. - Token:
sha1dei token effettivi, default compresi. - Impostazioni: un'impronta per chiave del blocco
site.
| Locale rispetto alla base | Sito rispetto alla base | Esito senza force |
|---|---|---|
| uguale | uguale | Nessun salvataggio se il documento coincide (unchanged) |
| diverso | uguale | Import |
| uguale | diverso | File saltato, avviso in warnings: resta la versione del sito. Conta in unchanged. |
| diverso | diverso, e diverso dal locale | Errore conflict |
| diverso | diverso, ma uguale al locale | Nessun conflitto |
Un file senza voce in base non entra nel controllo: si importa. Una base scritta prima di Nucleo 0.3.5 (senza prefisso v2:) non contiene titolo e stato: se il file li cambierebbe rispetto al sito, l'import si ferma con legacy_base invece di riscriverli. Si risolve con nucleo pull --only <file> oppure nucleo push --force <file>. Per i token e le impostazioni vale la stessa tabella. Il conflitto dei token dà conflict su site.json. Il conflitto delle impostazioni elenca le chiavi coinvolte.
Permessi: quelli della superficie che chiama.
Edizione: Free
Limiti noti: force non riporta indietro una chiave di site cambiata solo sul sito: resta il valore del sito. La nuova base restituita conserva la base vecchia per le chiavi in conflitto o non scritte.
Dry-run
Cosa fa: esegue l'import senza scrivere e restituisce gli stessi errori per file.
Come si usa: dryRun: true nell'ability, wp nucleo import --dry-run, nucleo push --dry-run. La pagina Strumenti lo esegue sempre come anteprima.
Parametri: comportamento.
- I token nuovi di
site.jsonvalgono per la validazione tramite il filtropre_option_nucleo_tokens, senza salvarli. - Le sezioni dello stesso import valgono per le pagine che le inseriscono.
- Un documento che cita un simbolo creato nello stesso import si conta senza validarlo e riceve un avviso in
warnings. - I termini e gli elementi di
content/che questo import crea valgono come trovati per i documenti successivi, le voci dei menu e le impostazioni. - I menu nuovi e le pagine nuove valgono come trovati per i documenti successivi, le voci dei menu e le impostazioni.
- Le voci di menu e le impostazioni del sito passano gli stessi controlli dell'import vero.
Permessi: quelli della superficie che chiama.
Edizione: Free
Limiti noti: un documento che cita un oggetto non ancora creato non riceve la validazione di schema e qualità. Lingue e traduzioni non si controllano.
wp nucleo export
Cosa fa: scrive i file dell'export in una cartella del server, compresi content/ e terms/.
Come si usa: wp nucleo export <dir> --user=<admin>. Sintassi nel capitolo sui comandi WP-CLI.
Parametri: <dir> obbligatorio: senza, il comando termina con "Specify the site folder.".
Permessi: serve un utente con manage_options: senza, il comando termina con un errore. Passare --user=<admin>.
Edizione: Free
Limiti noti: non riporta le voci di menu saltate. I file esistenti con lo stesso percorso si sovrascrivono. I file vecchi non più esportati restano. Percorsi assoluti, con .. o con backslash danno errore.
wp nucleo import
Cosa fa: legge ricorsivamente i file .json di una cartella e li importa.
Come si usa: wp nucleo import <dir> [--dry-run] [--force]. Sintassi nel capitolo sui comandi WP-CLI.
Parametri:
| Nome | Tipo | Valori ammessi | Default | Note |
|---|---|---|---|---|
<dir> | percorso | cartella esistente | obbligatorio | |
--dry-run | flag | assente | ||
--force | flag | assente | Equivale a force: true (tutti i file). |
Permessi: serve un utente con manage_options (--user=<admin>): senza, il comando termina con un errore.
Edizione: Free
Limiti noti: stampa solo "Creati, aggiornati, invariati" e un avviso per errore. Non stampa gli avvisi. Non aggiorna la base di site.json. Non accetta acknowledge: un documento con segnalazioni bloccanti fallisce. Non accetta force per singolo file.
wp nucleo sync
Cosa fa: importa la cartella come wp nucleo import. Con --prune cestina i documenti Nucleo che non hanno più un file.
Come si usa: wp nucleo sync <dir> [--prune]. Sintassi nel capitolo sui comandi WP-CLI.
Parametri:
| Nome | Tipo | Valori ammessi | Default | Note |
|---|---|---|---|---|
<dir> | percorso | cartella esistente | obbligatorio | |
--prune | flag | assente | Cestina i post page, post, nucleo_layout, nucleo_section con documento Nucleo il cui percorso manca dalla cartella. Stampa "Cestinati: N." Non tocca elementi di content/ né termini. |
Permessi: serve un utente con manage_options (--user=<admin>): senza, il comando termina con un errore.
Edizione: Free
Limiti noti: niente --dry-run né --force. Il prune confronta i file della cartella, non l'esito dell'import: un file con errore protegge comunque il suo post.
Pagina Strumenti: export e import zip
Cosa fa: scarica l'export come zip e importa uno zip o file .json con anteprima.
Come si usa: bacheca, Nucleo AI → Strumenti (slug nucleo-tools).
- "Download zip" esegue
nucleo/site-exporte scaricanucleo-export-AAAA-MM-GG.zip, senza compressione. - Il riquadro "Import the site" accetta un solo
.zipoppure uno o più.json. Esegue subitonucleo/site-importcondryRun: truee mostra l'anteprima. - "Import" esegue l'import vero. La casella "Overwrite changes made on the site" chiede conferma e invia
force: true.
Parametri: nessuno.
Permessi: pagina con capability manage_options. Le ability richiedono manage_options.
Edizione: Free
Limiti noti:
- Lo zip deve avere voci non compresse (metodo 0) e non cifrate. Uno zip creato da un altro strumento con compressione dà errore.
- I file
.jsonscelti singolarmente arrivano con il solo nome, senza cartella:home.jsoninvece dipages/home.json. L'import li ignora, trannesite.json. - Nessun campo per
acknowledgené perforceper singolo file.
05Sincronizzazione con la CLI locale
Cartella locale
Cosa fa: rappresenta il sito su disco. La cartella predefinita è nucleo-site nella directory corrente.
Come si usa: si crea con nucleo pull, si modifica, si invia con nucleo push. Sintassi e configurazione (--site, --user, --password, Application Password) nel capitolo sulla CLI locale.
Parametri: struttura.
nucleo-site/ ├── site.json ├── pages/<slug>.json ├── posts/<slug>.json ├── layouts/<slug>.json ├── sections/<slug>.json ├── menus/<slug>.json ├── media/manifest.json ├── media/<immagine> (solo push: caricata con nucleo/media-upload) ├── rules/assets.json ├── content/<tipo>/<slug>.json ├── terms/<tassonomia>.json └── .nucleo-backup/ (copie di sicurezza di pull)
Permessi: vedi le singole funzioni.
Edizione: Free
Limiti noti: percorsi assoluti, con .., ., segmenti vuoti o backslash si rifiutano prima di scrivere.
nucleo pull
Cosa fa: scarica il sito nella cartella locale.
- Chiama
nucleo/site-exporte scrive tutti i file restituiti. - Scarica gli elementi di contenuto in
content/<tipo>/<slug>.jsonconnucleo/content-list(full: true, 50 per pagina). - Scarica i termini in
terms/<tassonomia>.jsonconnucleo/terms-get.
Come si usa: nucleo pull [dir] [--prune] [--only FILE[,FILE]].
Parametri:
| Nome | Tipo | Valori ammessi | Default | Note |
|---|---|---|---|---|
dir | percorso | nucleo-site | ||
--prune | flag | assente | Cancella i file content/<tipo>/*.json assenti dal sito e toglie da terms/*.json i termini assenti. Sposta nella copia di sicurezza i file .json di pages/, posts/, layouts/, sections/ e menus/ assenti dall'export. | |
--only | lista separata da virgole | percorsi dei file di site-export | assente | Vedi nucleo pull --only. |
Cosa scarica in content/ e terms/:
- Un tipo si scarica se è nel modello dei contenuti (
modeled: true) o se la cartellacontent/<tipo>esiste già. - Una tassonomia si scarica se è nel modello o se
terms/<tassonomia>.jsonesiste già. - Gli elementi con
managedBy(hanno un documento Nucleo) non si scrivono incontent/: stanno inpages/oposts/. - Senza
--prune, i file locali assenti dal sito restano e compaiono come "solo locale". I termini locali assenti dal sito restano in coda al file.
Il pull sovrascrive i file locali senza controllo dei conflitti. Prima copia ogni file locale con contenuto diverso, o da cancellare, in .nucleo-backup/<data-ora>/<percorso>.
Permessi: nucleo/site-export richiede manage_options (scope nucleo:admin). nucleo/content-list richiede edit_posts o la capability edit_posts del tipo (scope nucleo:read). nucleo/terms-get richiede edit_posts e assign_terms della tassonomia (scope nucleo:read).
Edizione: Free
Limiti noti: un'ability content-list o terms-get assente (HTTP 404) si salta. Un elemento senza slug o saltato dal server dà un avviso su stderr. Le voci di menu saltate dall'export danno un avviso. Le chiamate a content-list e terms-get con rate_limited si ripetono fino a 5 volte dopo retryAfter secondi (10 se manca). La chiamata a site-export non si ripete.
nucleo pull --only
Cosa fa: riscrive solo i file indicati e la loro voce in base. Serve a risolvere un conflitto tenendo la versione del sito.
Come si usa: nucleo pull --only pages/home.json oppure --only site.json.
Parametri: elenco di percorsi presenti nella risposta di nucleo/site-export.
- Prima di sovrascrivere, ogni file locale con contenuto diverso va in
<dir>/.nucleo-backup/<data-ora>/<percorso>. - Senza
site.jsonnell'elenco: insite.jsonlocale cambiano solo le vocibasedei file scelti. Le altre chiavi restano. - Con
site.jsonnell'elenco: si scrive ilsite.jsondel sito, con labasedelsite.jsonlocale.
Permessi: manage_options; scope nucleo:admin.
Edizione: Free
Limiti noti: rifiuta content/ e terms/. Rifiuta un percorso assente dall'export. Non usa --prune. Le letture avvengono prima di ogni scrittura: un errore non lascia file a metà.
nucleo push
Cosa fa: invia la cartella locale al sito, in quest'ordine.
- Carica le immagini di
media/connucleo/media-uploade aggiornamedia/manifest.json. - Invia
terms/connucleo/terms-set(lotti da 500) econtent/connucleo/content-upsert(lotti da 25). - Invia il resto della cartella a
nucleo/site-import. - Dopo un push vero scrive in
site.jsonla nuovabase,tokensBaseesiteBase, e labasedi elementi e termini di ogni lotto accettato, anche se il push fallisce dopo.
Come si usa: nucleo push [dir] [--dry-run] [--prune] [--yes] [--use-tokens] [--acknowledge FILE] [--force FILE[,FILE]].
Parametri:
| Nome | Tipo | Valori ammessi | Default | Note |
|---|---|---|---|---|
dir | percorso | nucleo-site | ||
--dry-run | flag | assente | Nessun upload. Le immagini non caricate entrano nel manifest inviato con un URL segnaposto https://media.invalid/<file>. Invia pending a site-import. Non tocca site.json. | |
--prune | flag | assente | Solo content/: elenca gli elementi del sito assenti in locale. | |
--yes | flag | assente | Con --prune cestina gli elementi elencati (status: trash). | |
--use-tokens | flag | assente | Sostituisce nei file locali i valori uguali a un token con $gruppo.chiave prima dell'invio. | |
--acknowledge | percorso di file | {"pages/x.json": [{rule, node, reason}]} | assente | Una persona conferma ogni consenso al terminale. Senza terminale interattivo il comando si rifiuta prima di chiamare il sito. |
--force | lista separata da virgole | percorsi inviati a site-import | assente | Inviati come lista in force. Un percorso non inviato dà un avviso. |
Cosa non va a site-import: content/, terms/, .nucleo-backup/ e il file dei consensi se sta nella cartella. Si leggono solo i file .json. Prima di ogni invio il comando legge e valida tutta la cartella: pagine e altri JSON, content/, terms/ e media/manifest.json. Un errore locale ferma il push senza modifiche sul sito.
Regole di content/:
- Lo slug del file deve coincidere con
sluge la cartella contype, se presenti. Altrimenti erroreslug_mismatchotype_mismatch. - Uno slug presente anche in
pages/(tipopage) oposts/(tipopost) dàduplicate: vince il documento. - I genitori arrivano prima dei figli. Un tipo che cita
<altro tipo>:<slug>infieldsarriva dopo il tipo citato. - Il prune non tocca gli elementi
protected(pagine di sistema), quelli senza slug e quelli conmanagedBy.
Permessi: nucleo/site-import: manage_options, scope nucleo:admin. nucleo/media-upload: upload_files, scope nucleo:write. nucleo/content-upsert: edit_posts, scope nucleo:write. nucleo/terms-set: manage_terms della tassonomia, scope nucleo:write.
Edizione: Free
Limiti noti: il comando esce con codice 1 se c'è almeno un errore. Esce con 1 anche se site-import rifiuta la richiesta (ok: false), per esempio rate_limited dopo i tentativi. Un upload fallito ferma il push dopo aver salvato nel manifest le voci già caricate. Per ogni file in conflict stampa il suggerimento nucleo pull --only <file> o nucleo push --force <file>; per un file di content/ o terms/ il suggerimento è nucleo pull senza --only, che li rifiuta. I consensi su content/ e terms/ si ignorano con un avviso. Le immagini si cercano solo in media/, non nelle sottocartelle, con estensioni .jpg, .jpeg, .png, .webp, .gif, .avif.
Flusso consigliato per un conflitto
Cosa fa: riassume i messaggi che la CLI e l'import danno per un file in conflict.
Come si usa:
- Per tenere la versione del sito:
nucleo pull --only <file>, poi riapplicare la modifica locale. La copia locale precedente sta in.nucleo-backup/. Per un file dicontent/oterms/pull --onlynon va bene: si usanucleo pull, che riscrive i file con copie di sicurezza in.nucleo-backup/. - Per sovrascrivere il sito:
nucleo push --force <file>(ability:force: ["<file>"]).
Parametri: nessuno.
Permessi: come nucleo pull e nucleo push.
Edizione: Free
Limiti noti: nessuno rilevato.
Questa pagina ti è stata utile?