Compilatore, runtime, layout e sezioni
Nucleo compila ogni documento al salvataggio, non alla visita, e il frontend legge solo il risultato.
In questa pagina
01Panoramica
Nucleo compila ogni documento quando lo salvi, non quando il visitatore apre la pagina. Nucleo esegue una pipeline: normalizza, espande le sezioni, risolve i link, valida, controlla la qualità, compila e scrive. Il compilatore produce HTML statico con marcatori di slot, CSS di istanza, elenco degli slot e degli script. L'HTML va in post_content, il CSS in un file sotto uploads/nucleo/css/, il resto nel meta _nucleo_rt. Il runtime del frontend legge solo questi dati e gli artefatti in wp-content/uploads/nucleo/store/. Non carica il compilatore né il registro dei blocchi. I layout sono documenti kind layout o popup nel tipo nucleo_layout. Le condizioni diventano una mappa che il runtime consulta per area. Le sezioni riutilizzabili sono documenti kind section nel tipo nucleo_section, inseriti con il blocco nc/section-ref. Quando cambia una sezione, un menu, un link o un'opzione del sito, Nucleo accoda la ricompilazione delle pagine che ne dipendono.
Lo schema del documento e i blocchi sono descritti nel capitolo Schema del documento e blocchi.
02Compilazione al salvataggio
Pipeline di salvataggio
Cosa fa: porta un documento dal JSON ricevuto al post scritto. Nucleo esegue questi passi in ordine.
Converte gli slug dei menu di nc/menu ("principale" o "menu:principale") nell'ID del menu.
Normalizza le condizioni dei layout. Gli ID numerici in stringa diventano interi. Valida solo le condizioni nuove o cambiate.
Normalizza il documento (migrazioni, default dei blocchi) ed espande i nodi nc/section-ref.
Risolve i link per riferimento (page:<slug>, term:<tassonomia>/<slug>, home) in URL.
Valida lo schema. Gli errori dentro una sezione puntano al nodo nc/section-ref del documento.
Controlla la qualità sulla pagina composta, con le stesse aree del sito pubblico, anche per un contenuto nuovo non ancora salvato: scelte della pagina, layout none, layout single o product. Il peso CSS è quello del documento compilato in questo salvataggio. Applica i riconoscimenti (acknowledge) salvati e nuovi.
Con dryRun si ferma qui e restituisce il report.
Compila il documento espanso.
Scrive prima il file CSS, poi post_content, i meta e le dipendenze. Il CSS va in un file temporaneo rinominato alla fine; i file precedenti restano 7 giorni per le pagine in cache. Emette nucleo/document_saved e svuota la cache di pagina. Salvataggio, patch e ricompilazione dello stesso documento non si sovrappongono: un lock MySQL per documento (GET_LOCK) li mette in fila, con attesa massima dal filtro nucleo/document_lock_timeout.
Come si usa: non ha un'interfaccia propria. La chiamano le ability di scrittura (nucleo/doc-create, nucleo/doc-patch, nucleo/doc-publish, nucleo/doc-rollback, nucleo/doc-texts-set, nucleo/doc-translate (Pro), nucleo/layout-conditions-set), l'import del sito e il controllo delle meta lette dai binding. Vedi il capitolo Abilities di scrittura.
Parametri:
| Nome | Tipo | Valori ammessi | Default | Note |
|---|---|---|---|---|
publish | bool | true, false | false | Imposta post_status a publish. |
dryRun | bool | true, false | false | Valida e controlla la qualità senza scrivere. |
acknowledge | lista | {rule, node, reason} | [] | Riconosce problemi di qualità. |
baseRevision | int o null | intero | null | Se diverso dalla revisione corrente: errore conflict. |
title | string | testo | '' | Titolo del post. Vuoto: resta quello attuale. |
postType | string | tipo di post | page | Solo alla creazione. |
slug | string | slug | '' | Solo alla creazione. Vuoto: WordPress lo ricava dal titolo. |
parent | int o null | 0 o ID | null | null lascia il genitore com'è. |
Permessi: nessun controllo nel salvataggio. Il controllo spetta all'ability o al comando che lo chiama.
Edizione: Free
Limiti noti:
- Codici di errore restituiti:
invalid_document,quality_blocking,conflict,not_found,patch_failed,write_failed,exists(solostart). - Il controllo bloccante della qualità vale con
publish. Vale anche per ogni salvataggio di un post già pubblicato. - Il documento salvato conserva i
nc/section-refe i link simbolici. L'espansione serve solo a validare e compilare. - Le regole
seo.h1.missing,a11y.landmark.missingeseo.content.thinnon valgono per layout, sezioni e popup. Per le sezioni non valgono neanchecontent.button.inerteform.action.consequential. - Un riconoscimento decade quando il nodo cambia. Nucleo salva un'impronta del nodo, senza figli, insieme al riconoscimento.
- Alla creazione con
bindil documento si compila due volte. I binding statici leggono il post, che prima non esiste. - Le regole di budget confrontano la pagina composta con valori predefiniti: CSS 76800 byte, JS 102400 byte, DOM 1500 nodi stimati. Il filtro
nucleo/quality/<css|js|dom>_budgetli cambia per il sito. - Un contenuto nuovo non ancora salvato: la qualità usa i layout del suo tipo, ma non ha peso CSS. I budget si applicano dal primo salvataggio.
Aggancio a un contenuto esistente
Cosa fa: crea il primo documento Nucleo di un post esistente. Tipo, titolo e stato restano quelli del post. Se il documento ha root.children vuoto, Nucleo converte paragrafi, titoli e voci di elenco del testo WordPress in blocchi nc/text. Salva il testo originale nel meta _nucleo_wp_content.
Come si usa: nucleo/doc-create con postId. Accetta solo kind page.
Parametri: postId, document, dryRun, acknowledge.
Permessi: quelli di nucleo/doc-create. Vedi il capitolo Abilities di scrittura.
Edizione: Free
Limiti noti:
- Al massimo 200 blocchi
nc/text. Restano grassetto, corsivo e link. - Immagini e altri elementi si perdono nel documento.
- Errore
existsse il post ha già un documento.
Compilatore
Cosa fa: trasforma un documento valido ed espanso in un risultato di compilazione. Contiene:
html: HTML statico con i marcatori di slot.css: CSS di istanza dei nodi.blockTypes: tipi di blocco usati, in ordine di documento.slots: elenco degli slot dinamici.assets: stili e script dei blocchi usati, con la strategia di caricamento.lcpNodeId: il primo nodo che reclama la priorità LCP.deps: dipendenze dei nodi, daldepsdei manifest e dai binding statici.
Come si usa: interno al salvataggio. Con markIds vero, come nell'anteprima, ogni nodo riceve data-nc-id sul primo tag. L'anteprima usa la route REST POST nucleo/v1/preview (capability edit_posts) e l'ability nucleo/doc-preview.
Parametri: documento, sorgente dei binding (facoltativa), markIds (bool, default false).
Permessi: nessuno.
Edizione: Free
Limiti noti:
- Documento senza
root: eccezioneDocument has no root. - Tipo di blocco non registrato: eccezione
Block type not registered. - Un nodo con il vecchio campo
refproduce una stringa vuota. - Per layout, sezioni e popup le classi per nodo hanno un prefisso di 4 caratteri, ricavato dal documento. Così due documenti nella stessa pagina non condividono
.nc-n1. - Un link con riferimento non risolto diventa
href="#" aria-disabled="true". - Le schede dei blocchi
nc/queryenc/collectionnon reclamano mai la priorità LCP.
Slot dinamici
Cosa fa: segna nell'HTML le parti che il runtime calcola a ogni richiesta. Il marcatore è <!--nc:s N-->fallback<!--/nc:s-->. N è l'indice nell'elenco slots di _nucleo_rt. Il fallback è l'HTML visibile se lo slot non si riempie.
Come si usa: i blocchi che calcolano una parte a ogni richiesta la registrano come slot. Il compilatore crea da solo due slot di involucro:
nc/visibilityper un nodo convisibility.whennon vuoto. Fallback vuoto.nc/bindper un nodo con binding dinamici. I valori diventano token__NCB<n>__da sostituire a runtime.
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti: il valore dinamico di un binding si escapa come URL se la chiave finisce con src, url, href o poster. Si escapa come HTML per content.html, e come testo negli altri casi.
Riferimenti nei link
Cosa fa: sostituisce i riferimenti interni con l'URL prima della validazione. Agisce sulle chiavi href di content e settings a ogni profondità, e sugli href dei tag <a> in content.html. Il documento salvato conserva il simbolo.
Come si usa: scrivi nel campo link uno di questi valori, con #ancora facoltativa:
| Forma | Esempio | Bersaglio |
|---|---|---|
home | home#contatti | home_url('/') |
<tipo-di-post>:<slug> | page:chi-siamo, post:novita | contenuto pubblicato del tipo |
<tipo-di-post>:<percorso> | page:servizi/consulenza | solo tipi gerarchici |
term:<tassonomia>/<slug> | term:category/notizie | termine; ammesso anche term:category:notizie |
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti:
- Prefissi riservati, che non sono riferimenti:
http,https,mailto,tel,sms,ftp,file,data,javascript,vbscript,section,menu,media,author,term(come tipo di post). - Solo contenuti pubblicati di tipi visibili e termini di tassonomie visibili.
- Un riferimento risolto una volta segue il contenuto per ID anche dopo un cambio di slug (meta
_nucleo_links). - Riferimento senza bersaglio: avviso di qualità
content.link.missing. Un percorso interno scritto come/chi-siamo/produce l'informazionecontent.link.pathcon il riferimento suggerito.
Sanificazione del testo ricco
Cosa fa: pulisce l'HTML inline dei blocchi testuali. Tiene strong, em, b, i, br, p, ul, ol, li, span (solo class) e a (href, target, rel). Toglie script e style con il contenuto. Gli altri tag spariscono e il loro testo resta.
Come si usa: i blocchi che mostrano testo ricco applicano questa pulizia al loro HTML.
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti: href ammessi: http:, https:, mailto:, tel:, / (non //) e #. Con target="_blank" aggiunge rel="noopener".
03Ricompilazione e invalidazione
Ricompilazione di un documento
Cosa fa: ricompila il documento salvato senza creare una nuova revisione né una voce di storico. Espande di nuovo le sezioni, così la pagina usa la versione corrente.
Come si usa: lo usano nucleo/cache-rebuild, la coda di ricompilazione e il controllo delle meta lette da un binding.
Parametri: ID del post.
Permessi: nessuno nel servizio. nucleo/cache-rebuild richiede manage_options e lo scope nucleo:admin.
Edizione: Free
Limiti noti:
- Documento non più valido dopo il cambio di una sezione: la pagina tiene HTML e CSS precedenti. Gli errori vanno nel meta
_nucleo_stale. - Problemi bloccanti su un post pubblicato: la pagina tiene la versione precedente. I problemi vanno nel meta
_nucleo_stale_quality. - Una ricompilazione riuscita cancella entrambi i meta.
Coda di ricompilazione
Cosa fa: tiene gli ID dei documenti da ricompilare nell'opzione nucleo_rebuild_queue e li elabora a lotti con WP-Cron (hook nucleo_rebuild).
Come si usa: automatica. Nucleo accoda ogni post con il meta _nucleo_doc. Dopo un aggiornamento del plugin, alla prima richiesta di amministrazione, REST o WP-CLI, Nucleo vede che la versione installata (nucleo_installed_version) è cambiata e accoda tutti i documenti. Così l'HTML salvato, compreso l'URL di store.js con la versione, segue i renderer della nuova versione.
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti:
- Per esecuzione: al massimo 20 documenti o 20 secondi. Se restano documenti, Nucleo pianifica un altro evento.
- Il callback di
nucleo_rebuildsi registra solo nelle richieste WP-Cron. - Una ricompilazione che parte durante un'altra ricompilazione accoda soltanto.
- Nucleo toglie dalla coda un documento appena scritto.
- Un documento resta in coda finché la ricompilazione non dà un esito. Se fallisce, riprova dopo 30 secondi per tentativo, fino a 3 tentativi. Poi esce dalla coda e resta un record con tentativi, codice e messaggio dell'errore.
nucleo/statuslo espone infailed. - La coda registra per ogni documento la generazione dell'ultimo accodamento. Un documento accodato di nuovo durante la sua ricompilazione resta in coda per un altro giro.
- Le scritture della coda passano da un lock MySQL; un solo processo per volta elabora la coda.
- Dopo un aggiornamento del plugin, un documento con problemi bloccanti tiene l'HTML precedente e resta in stato stale (vedi Ricompilazione di un documento).
Eventi di invalidazione
Cosa fa: accoda la ricompilazione dei documenti che dipendono da un oggetto cambiato. Le dipendenze sono nel meta _nucleo_dep di ogni documento, una riga per dipendenza.
Come si usa: automatico in admin, REST e WP-CLI. Le richieste del frontend non registrano questi hook.
| Evento WordPress | Dipendenza cercata | Esecuzione |
|---|---|---|
nucleo/document_saved su una sezione | section:<id>, section-slug:<slug> | primi 10 subito, il resto in coda |
post_updated con slug di sezione cambiato | vecchio e nuovo slug | primi 10 subito |
| Sezione spostata nel cestino o ripristinata | section:<id>, section-slug:<slug> | primi 10 subito |
wp_update_nav_menu, wp_update_nav_menu_item | menu:<id> | coda |
Pubblicazione o ritiro di un post; meta pubbliche o _thumbnail_id e termini di un post pubblicato | query:<tipo> | coda |
| Cambio di slug o genitore, pubblicazione, ritiro di un contenuto | link:post:<id>, link-slug:<tipo>:<slug> (anche discendenti) | coda; dopo il salvataggio se la scrittura è di Nucleo |
deleted_post | link:post:<id> | coda |
created_term, edited_term, delete_term | link:term:<id> (anche figli), link-slug:term:<tassonomia>/<slug> | coda |
blogname, blogdescription, site_logo, customize_save_after | site, bind:site:name, bind:site:description, bind:site:logo, bind:site:url | coda |
post_updated con titolo, estratto, data o autore cambiati | il post stesso, se ha una dipendenza bind:post: o bind:author: | ricompilazione immediata |
profile_update | post dell'utente con una dipendenza bind:author: | coda |
permalink_structure | tutti i documenti | coda |
WPLANG, date_format, time_format | tutti i documenti; incrementa nucleo_content_version | coda |
added_post_meta, updated_post_meta, deleted_post_meta letta da un binding | ogni dipendenza che termina con :<chiave>; _thumbnail_id cerca bind:post:image | ricompilazione immediata |
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti:
- La ricerca dei dipendenti legge a pagine di 500 documenti, senza un limite totale.
- Al cambio di lingua Nucleo adegua
date_formatetime_formatsolo se valgono ancora il formato predefinito della lingua precedente. - Le modifiche ai token non ricompilano le pagine: Nucleo ripubblica l'artefatto
tokense, se il CSS dei token è cambiato, svuota tutta la cache di pagina.
Ricompilazione di tutti i documenti
Cosa fa: accoda ogni documento in questi casi:
- aggiornamento del plugin a una versione diversa;
- cambio dei file dei blocchi (nuovo bundle CSS);
- cambio della struttura dei permalink, della lingua o dei formati di data e ora;
- ricostruzione dello store degli artefatti.
Come si usa: automatica. A mano: nucleo/cache-rebuild senza postIds, oppure wp nucleo ability run cache-rebuild (vedi Comandi WP-CLI).
Parametri: vedi l'ability.
Permessi: manage_options, scope nucleo:admin.
Edizione: Free
Limiti noti: l'ability ricompila subito al massimo 20 documenti e accoda il resto. Accetta al massimo 200 postIds.
Svuotamento della cache di pagina
Cosa fa: dopo ogni scrittura svuota la cache dei plugin di caching presenti. Per un layout svuota tutta la cache. Per gli altri documenti svuota solo l'URL del post. Con LiteSpeed Cache svuota anche le pagine con il tag nucleo-post-<id>, inviato nell'header X-LiteSpeed-Tag del documento.
Come si usa: automatico. Plugin supportati quando presenti: LiteSpeed Cache, WP Rocket, W3 Total Cache, WP Super Cache, SiteGround Optimizer, WP Fastest Cache, Breeze, Kinsta.
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti: con Breeze lo svuotamento di un solo post svuota tutta la cache. Altri sistemi di cache si collegano con nucleo/purge_url e nucleo/purge_all.
Bundle CSS dei blocchi
Cosa fa: concatena e minimizza il CSS di tutti i blocchi registrati, in ordine alfabetico, in uploads/nucleo/css/blocks.<hash8>.css. Una firma di percorsi e date di modifica dei manifest evita di rileggere i file a ogni salvataggio.
Come si usa: automatico alla compilazione e nell'editor.
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti: quando il bundle cambia, Nucleo tiene il bundle precedente, cancella i più vecchi e accoda tutti i documenti. Cartella uploads non scrivibile o CSS di un blocco illeggibile: eccezione.
Pubblicazione dei token
Cosa fa: scrive l'artefatto tokens con le regole @font-face dei font locali, le variabili CSS dei token, la versione (hash) e l'URL del font da precaricare. Nello stack dei font aggiunge un font di ripiego metrico dopo la prima famiglia. L'opzione salvata non cambia.
Come si usa: automatico dopo nucleo/tokens-set, l'import del sito e l'import dei font. Vedi il capitolo Design token.
Parametri: Nessuno
Permessi: quelli dell'ability chiamante.
Edizione: Free
Limiti noti: gruppi di token non validi: errore invalid_tokens.
04Dati prodotti e dove vivono
Meta del post
Cosa fa: conserva sorgente, stato e runtime di ogni documento.
| Meta | Contenuto | Letto dal frontend |
|---|---|---|
_nucleo_doc | documento JSON grezzo, con nc/section-ref e link simbolici | no (solo in scrittura, dal publisher dei layout) |
_nucleo_rev | numero di revisione, +1 a ogni salvataggio | no |
_nucleo_hist | storico delle ultime 20 versioni {rev, doc, time, user} | no |
_nucleo_rt | runtime: cssFile, cssUrl, styles, eager, lazy, slots, lcp, breadcrumbBlock, seo (solo con meta.seo) | sì |
_nucleo_dep | dipendenze, una riga per valore | no |
_nucleo_links | bersagli dei link risolti (link:post:<id>, link:term:<id>) | no |
_nucleo_ack | riconoscimenti di qualità ancora validi, con impronta del nodo | no |
_nucleo_stale, _nucleo_stale_quality | errori dell'ultima ricompilazione fallita | no |
_nucleo_wp_content | testo WordPress originale di un contenuto agganciato | no |
Come si usa: lettura con nucleo/doc-get per il documento. Gli altri meta sono interni.
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti: meta.seo.noindex vero scrive anche il meta noindex letto dalla sitemap.
File e artefatti
Cosa fa: separa i dati serviti al browser da quelli letti dal runtime PHP.
| Dato | Posizione |
|---|---|
| HTML compilato | post_content del post (scritto senza filtri kses) |
| CSS di istanza di pagine, layout e sezioni | uploads/nucleo/css/p-<id>.<hash8>.css |
| CSS di tutti i blocchi | uploads/nucleo/css/blocks.<hash8>.css |
| Token | artefatto tokens, stampato inline con l'handle nucleo-tokens |
| Mappa dei layout | artefatto layouts (map, exclude, conflicts) |
| Layout pubblicato | artefatto layout-<id> (html, rt, popup) |
Lo store degli artefatti scrive file PHP <chiave>.<hash8>.php in wp-content/uploads/nucleo/store/<blog>-<generazione>/, sotto la cartella di wp_upload_dir(). Se la cartella non è scrivibile usa le opzioni del database. Fino alla 0.4.0 lo store stava in wp-content/cache/nucleo/: all'aggiornamento Nucleo sposta la generazione del sito nella cartella nuova.
Come si usa: interno.
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti: un file CSS vuoto resta su disco ma il runtime non lo accoda. Ogni scrittura cancella i file p-<id>.*.css precedenti.
05Runtime del frontend
Avvio del runtime
Cosa fa: registra solo due callback nelle richieste del sito pubblico: wp (priorità 1) e the_content (priorità 9). In wp:
- carica l'anteprima CSS solo se c'è il parametro
nucleo_css; - si ferma in modalità di emergenza;
- prepara le aree dei layout;
- aggancia le regole asset a
wp_enqueue_scriptscon priorità 9999; - su un contenuto singolo con
_nucleo_rt: registra meta SEO e JSON-LD, togliewpautopewptexturize, accoda token, stili e script.
Come si usa: automatico. Il tema verifica se la pagina è un documento Nucleo, per non stampare titolo e main propri.
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti:
- Il font principale si precarica con l'header HTTP
Link, solo se gli header non sono già partiti. - Il runtime non ricompila un documento con
_nucleo_rtmancante: serve ilpost_contentcosì com'è. - Gli script
eagersi accodano condefernel footer. Handle di stili e script:nucleo-<md5 dell'URL, 8 caratteri>.
Riempimento degli slot
Cosa fa: in the_content sostituisce i marcatori di slot del post richiesto con l'HTML generato per la richiesta. Usa strpos, senza espressioni regolari. Poi segna la voce di menu corrente.
Come si usa: automatico. Blocchi di slot riconosciuti: nc/post-title, nc/post-content, nc/post-image, nc/post-meta, nc/breadcrumbs, nc/search, nc/pagination, nc/archive-title, nc/archive-description, nc/visibility, nc/bind, nc/form, nc/collection, nc/native-form, nc/repeater, nc/query, i blocchi woo/* e i nomi storici post.title e post.date. Con un layout single sopra una pagina Nucleo, nc/post-content riempie anche gli slot della pagina: moduli, collezioni e campi collegati.
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
I blocchi woo/* esistono solo nel pacchetto Pro.
Limiti noti:
- Slot con blocco sconosciuto o indice assente: resta il fallback.
- Marcatore di chiusura mancante: Nucleo toglie solo il marcatore di apertura.
- Solo
nc/visibilityenc/bindsi riempiono di nuovo dopo il rendering, fino a 8 livelli di annidamento. - Il filtro agisce solo sul post della query principale.
Visibilità per visitatore
Cosa fa: valuta visibility.when a ogni richiesta. Mostra il nodo solo se tutte le condizioni valgono.
Condizione (is) | Vera quando |
|---|---|
logged_in | l'utente è collegato |
logged_out | l'utente non è collegato |
role:<slug> | l'utente ha il ruolo indicato |
filled | il campo field della sorgente source ha un valore; per source nucleo, anche un ripetitore con almeno una riga |
empty | il contrario di filled |
Come si usa: nel documento. Vedi il capitolo Schema del documento e blocchi.
Parametri: vedi la tabella.
Permessi: nessuno.
Edizione: Free
Limiti noti: condizione sconosciuta: falsa. Cache di pagina e crawler vedono il fallback vuoto.
Caricamento degli script dei blocchi
Cosa fa: carica gli script dei blocchi con la strategia del manifest. eager va in un tag <script defer>. Le strategie visible, interaction e idle passano dal loader degli script, tramite window.ncLazy. Ogni URL riceve ?ver= con la versione del plugin, come gli script accodati da WordPress: dopo un aggiornamento il browser non usa la copia in cache. Se l'URL ha già un parametro ver, Nucleo non aggiunge ?ver=: un parametro con nome diverso, come server, non conta. Per gli script con interaction o idle vale anche il paragrafo sotto la tabella.
| Strategia | Quando parte lo script |
|---|---|
eager | subito, con defer |
visible | un elemento .nc-<blocco> qualsiasi entra nella viewport, con margine di 200 px |
interaction | primo pointerdown, focusin o keydown su un elemento .nc-<blocco> qualsiasi; dopo il caricamento ripete il clic sul pulsante toccato solo se il clic vero è arrivato prima dello script |
idle | requestIdleCallback, oppure dopo 200 ms |
Gli script dei manifest con strategia interaction o idle escono come tag type="text/plain" con data-nc-src e data-nc-load. Il loader li attiva tutti insieme, nell'ordine del documento: interaction al primo pointerdown, keydown, scroll o touchstart sulla finestra; idle con requestIdleCallback e timeout di 2 s, oppure dopo 2 s. Le righe della tabella descrivono le voci registrate in window.ncLazy.
Come si usa: automatico. Strategie dei blocchi inclusi: nc/collection, nc/slider e nc/toc usano visible; nc/menu e nc/tabs usano idle; nc/native-form e nc/video usano interaction.
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti: visible e interaction osservano tutte le istanze del blocco nella pagina; lo script si carica una volta, al primo segnale. Senza IntersectionObserver lo script visible parte subito. Ogni src si carica una sola volta, anche se pagina e layout lo elencano entrambi.
Voce di menu corrente
Cosa fa: aggiunge aria-current="page" e la classe is-current al link della voce corrente dei menu nc/menu, e is-ancestor alle voci antenate. Serve perché l'HTML compilato è uguale per tutte le pagine.
Come si usa: automatico su contenuto e aree. Prima confronta l'oggetto richiesto (post:<id> o term:<id>). Se nessuna voce combacia, confronta l'URL.
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti: nel confronto per URL ignora la barra finale e i parametri utm_*. Un link # non è mai corrente.
Modalità di emergenza
Cosa fa: disattiva tutto il runtime: niente asset, layout e slot di Nucleo. wpautop e wptexturize restano attivi.
Come si usa: definisci la costante NUCLEO_SAFE_MODE a true in wp-config.php, oppure imposta l'opzione nucleo_safe_mode a un valore vero.
Parametri: Nessuno
Permessi: accesso a wp-config.php o al database.
Edizione: Free
Limiti noti: l'opzione si legge da alloptions.
Elenchi e schede
Cosa fa: disegna le schede di nc/query e nc/collection per ogni elemento. Il ciclo di rendering tiene la pila degli elementi correnti: post, termine o riga di dati. nc/collection aggiorna filtri e pagine con la route REST GET nucleo/v1/collection/<doc>/<node>.
Come si usa: vedi il capitolo Moduli, dati dinamici, componenti, bindings e media.
Parametri: query string dei filtri; append=1 per accodare i risultati.
Permessi: route pubblica (__return_true). Serve solo documenti pubblicati senza password.
Edizione: Free
Limiti noti:
- 60 richieste al minuto per IP, poi errore 429.
- Risposta con
Cache-Control: public, max-age=60. - Pagine di risultati in transient per 12 ore (5 minuti per una sorgente
componentsenzattl), invalidate danucleo_content_version. - Una ricerca testuale attiva non usa la cache.
Regole asset e CSS ottimizzato
Cosa fa: in wp_enqueue_scripts a priorità 9999 applica le regole asset, le varianti CSS ridotte e il CSS critico. Gli amministratori (manage_options) vedono le anteprime con ?nucleo_css=original|candidate|critical|published.
Come si usa: vedi il capitolo Ottimizzatore e asset.
Parametri: vedi il capitolo collegato.
Permessi: anteprima nucleo_css: manage_options.
Edizione: vedi il capitolo collegato.
Limiti noti: vedi il capitolo collegato.
06Hook pubblici
nucleo/document_saved
Cosa fa: azione emessa dopo ogni scrittura riuscita di un documento, anche dopo una ricompilazione.
Come si usa:
add_action('nucleo/document_saved', function (int $postId): void { ... });Parametri:
| Nome | Tipo | Valori ammessi | Default | Note |
|---|---|---|---|---|
$postId | int | ID del post | — | Post appena scritto |
Permessi: nessuno.
Edizione: Free
Limiti noti: Nucleo stesso la usa per pubblicare i layout e per ricompilare le pagine di una sezione. Durante il callback il flag di scrittura interno vale true.
nucleo/purge_url
Cosa fa: azione emessa dopo lo svuotamento della cache di un documento non layout. Serve a collegare un sistema di cache non supportato.
Come si usa:
add_action('nucleo/purge_url', function (string $url): void { ... });Parametri:
| Nome | Tipo | Valori ammessi | Default | Note |
|---|---|---|---|---|
$url | string | permalink | — | Non emessa se il post non ha permalink |
Permessi: nessuno.
Edizione: Free
Limiti noti: nessuno rilevato.
nucleo/purge_all
Cosa fa: azione emessa dopo lo svuotamento completo della cache, cioè dopo il salvataggio di un layout.
Come si usa:
add_action('nucleo/purge_all', function (): void { ... });Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti: nessuno rilevato.
nucleo/current_language
Cosa fa: filtro che sostituisce la lingua corrente usata per scegliere i layout con condizione language.
Come si usa:
add_filter('nucleo/current_language', fn (?string $lang): ?string => 'it');Parametri:
| Nome | Tipo | Valori ammessi | Default | Note |
|---|---|---|---|---|
$language | string o null | slug della lingua | lingua di Polylang o WPML, oppure null | Restituisci una stringa vuota o null per nessuna lingua |
Permessi: nessuno.
Edizione: Pro. Il filtro esiste solo nel pacchetto Pro.
Limiti noti: vedi il capitolo Integrazioni.
07Layout
Documenti di layout e aree
Cosa fa: un layout è un documento kind layout (o popup) nel tipo di post nucleo_layout. meta.area dice dove va. meta.conditions dice su quali richieste vale. Il runtime usa solo i layout pubblicati.
| Area | Vale per le richieste |
|---|---|
header, footer | tutte |
before-content, after-content | contenuti singoli e archivi (termine, tipo di post, autore, pagina degli articoli) |
single | contenuti singoli |
archive | archivi di termine, tipo di post, autore e pagina degli articoli |
search | risultati di ricerca |
notfound | pagina 404 |
product | contenuti singoli di tipo product, solo con WooCommerce attivo |
product-archive | archivio del negozio e archivi di categoria o tag di prodotto, solo con WooCommerce attivo |
popup | tutte (solo Pro, vedi Popup) |
Come si usa: crea il layout con nucleo/doc-create e postType nucleo_layout. Il tema stampa ogni area con nucleo_canvas_area('<area>'). Vedi il capitolo Tema.
Parametri: meta.area (string), meta.conditions (oggetto).
Permessi: il tipo nucleo_layout richiede edit_theme_options per creare, modificare ed eliminare.
Edizione: Free
Limiti noti:
- Lo schema non valida
meta.area. Un'area fuori elenco si salva, ma il runtime non la stampa. - Layout senza
meta.area: escluso dalla mappa. - Archivi per data e altre richieste non riconosciute (
kindother) ricevono soloheader,footerepopup. - I layout ricevono token e asset anche sulle pagine non costruite con Nucleo.
Condizioni di layout
Cosa fa: meta.conditions ha la forma {"include": [...], "exclude": [...], "priority": 0}. Ogni condizione è {"type": "<tipo>", ...chiavi del tipo}.
| Tipo | Chiavi | Seleziona | Chiave nella mappa |
|---|---|---|---|
entire_site | — | ogni richiesta | site |
front | — | la pagina iniziale | front |
blog | — | la pagina degli articoli | blog |
search | — | i risultati di ricerca | search |
404 | — | la pagina non trovata | 404 |
post | value (ID) | un contenuto singolo | post:<id> |
parent | value (ID) | le pagine discendenti di una pagina, non la pagina stessa | post:<id> per ogni discendente |
post_type | value (slug) | ogni contenuto singolo del tipo | type:<tipo> |
archive | value (slug) | l'archivio di un tipo di post o di tutti i termini di una tassonomia | archive:<slug> |
author | value (ID utente) | i contenuti singoli dell'autore | author:<id> |
author_archive | value (ID utente) | l'archivio dell'autore | author_archive:<id> |
term | taxonomy, value (ID), children facoltativo | i contenuti singoli con il termine | term:<tassonomia>:<id> |
term_archive | taxonomy, value (ID), children facoltativo | l'archivio del termine | term_archive:<tassonomia>:<id> |
language | value (codice lingua) | limita il layout a una lingua; non seleziona richieste da sola | nessuna |
Come si usa: nel documento del layout, oppure con nucleo/layout-conditions-set, che sostituisce include, exclude e priority. Nei file del sito (layouts/*.json) gli ID si scrivono come simboli (page:<percorso>, term:<tassonomia>/<slug>, author:<login>). Vedi il capitolo Import, export e sincronizzazione.
Parametri:
| Nome | Tipo | Valori ammessi | Default | Note |
|---|---|---|---|---|
include | lista | condizioni | — | Obbligatoria |
exclude | lista | condizioni | [] | Un layout escluso per una chiave qualsiasi della richiesta non vale |
priority | int | intero | 0 | Più alto vince a parità di chiave |
children | bool | true, false | false | Aggiunge i termini figli |
Permessi: nucleo/layout-conditions-set: edit_post sul layout, scope nucleo:design.
Edizione: Free.
Il contesto di lingua esiste solo nel pacchetto Pro, con Polylang, WPML o il filtro nucleo/current_language.
Limiti noti:
- Errori di formato con codice
layout_condition: tipo sconosciuto, chiave sconosciuta, chiave mancante, valore del tipo sbagliato. Ogni errore porta l'esempio del formato atteso. - ID: interi ≥ 1. Una stringa numerica (
"12") diventa intero. - Il salvataggio blocca solo condizioni nuove o cambiate. Un layout salvato prima con condizioni non valide si modifica e si ricompila ancora.
- Un layout con sole condizioni
languagenon vale per nessuna richiesta. - Senza contesto di lingua (Free, o nessun plugin multilingua) un layout limitato a una lingua vale per tutte.
parentcerca discendenti conget_pages()sul tipopage.
Mappa dei layout
Cosa fa: trasforma le condizioni di tutti i layout pubblicati nell'artefatto layouts.
map: area → chiave → voci[id, priorità, lingue], ordinate per priorità decrescente, poi ID decrescente.exclude: area → chiave → ID esclusi.conflicts: chiavi con due o più layout alla priorità massima, che possono valere nella stessa lingua.
Scrive anche l'artefatto layout-<id> con HTML, runtime e impostazioni popup di ogni layout pubblicato.
Come si usa: automatica quando un layout pubblicato si salva o si ricompila, quando smette di essere pubblicato e quando si cancella. I conflitti si leggono con nucleo/layout-list.
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti: le condizioni parent e children diventano chiavi esplicite al momento della ricostruzione. Una pagina figlia o un termine figlio creati dopo entrano nella mappa solo alla ricostruzione successiva. Per forzarla: salva di nuovo il layout, oppure usa nucleo/cache-rebuild.
Scelta del layout per la richiesta
Cosa fa: per ogni area costruisce le chiavi della richiesta dalla più specifica alla più generale. Restituisce il primo layout trovato che non è escluso e che parla la lingua della richiesta.
| Richiesta | Chiavi provate in ordine |
|---|---|
| Contenuto singolo | front (solo pagina iniziale), post:<id>, term:<tassonomia>:<id> per ogni termine, author:<id>, type:<tipo>, site |
| Archivio di termine | term_archive:<tassonomia>:<id>, archive:<tassonomia>, site |
| Archivio di tipo di post | archive:<tipo>, site |
| Archivio di autore | author_archive:<id>, site |
| Ricerca, 404, pagina degli articoli | search, 404 o blog, poi site |
| Altre richieste | site |
Come si usa: automatica a ogni richiesta. Per un URL, nucleo/layout-explain restituisce per ogni area {layout, matched}, e excluded con il layout scartato e la chiave che lo ha escluso.
Parametri: Nessuno
Permessi: nucleo/layout-explain: edit_theme_options, scope nucleo:read.
Edizione: Free
Limiti noti:
- La specificità della chiave conta prima della priorità. Un layout
post:<id>con priorità 0 vince su un layoutsitecon priorità 100. - Per un contenuto in più termini vince il primo termine che ha un layout, nell'ordine delle tassonomie e dei termini restituiti da WordPress.
- La risoluzione non esegue query proprie: usa i termini già in cache della query principale.
Popup
Il popup esiste solo nel pacchetto Pro.
Cosa fa: un layout nell'area popup diventa un <dialog class="nc-popup"> con pulsante di chiusura. Il primo titolo del contenuto etichetta il dialog. Senza titolo il dialog usa il titolo del layout. Lo script del popup gestisce apertura e frequenza.
Come si usa: documento kind popup con meta.area popup nel tipo nucleo_layout.
Parametri:
| Nome | Tipo | Valori ammessi | Default | Note |
|---|---|---|---|---|
meta.trigger.type | string | load, delay, scroll, exit, click | delay | Valore fuori elenco: delay |
meta.trigger.value | scalare | testo | 5 | Diventa data-value |
meta.frequency | string | once, session, always | session | Valore fuori elenco: session |
Permessi: come i layout.
Edizione: Pro.
Limiti noti: nel pacchetto Free un popup pubblicato non si stampa, ma il runtime accoda comunque i suoi stili e script.
08Sezioni riutilizzabili
Blocco nc/section-ref
Cosa fa: inserisce una sezione riutilizzabile (documento kind section, tipo nucleo_section) per slug. Al salvataggio e a ogni ricompilazione Nucleo sostituisce il nodo con il root della sezione e applica i parametri.
Come si usa:
{ "id": "cta1", "type": "nc/section-ref",
"settings": { "section": "cta-contatti", "params": { "titolo": "Parliamone" } } }Elenco delle sezioni e dei loro parametri: nucleo/section-list.
Parametri:
| Nome | Tipo | Valori ammessi | Default | Note |
|---|---|---|---|---|
settings.section | string | ^[a-z0-9][a-z0-9_-]{0,199}$ | — | Obbligatorio. Slug della sezione |
settings.params | oggetto | nome → valore | {} | Valori dei parametri dichiarati dalla sezione |
Permessi: il tipo nucleo_section richiede edit_theme_options per creare, modificare ed eliminare. Le sezioni in bozza, in attesa, private o programmate si espandono solo per chi ha edit_theme_options, e senza utente (WP-Cron, WP-CLI). Gli altri utenti espandono solo sezioni pubblicate.
Edizione: Free
Limiti noti:
- Profondità massima di sezioni annidate: 4.
- Un ciclo (A dentro B dentro A) è un errore sul nodo
nc/section-refesterno. - Sezione mancante o nel cestino: il blocco non stampa nulla e il report ha l'avviso
content.section.missing. visibilitydel nodonc/section-refpassa alrootespanso.- Gli ID dei nodi espansi cambiano per ogni istanza: prime 4 lettere dell'ID del nodo ref più 8 caratteri di hash.
- Il blocco accetta
visibilityma nessuna chiave di stile. - Una sezione nuova riceve lo slug alla creazione anche in bozza.
Parametri di sezione
Cosa fa: la sezione dichiara in params i valori che ogni nc/section-ref può passare. Ogni dichiarazione ha type, e facoltativi label, required, default.
| Tipo | Valore ammesso |
|---|---|
text, html, link | stringa |
color | stringa che inizia con $color. |
boolean | true o false |
image | oggetto con src stringa e alt stringa facoltativo |
list | lista di stringhe, al massimo 30 voci |
Come si usa: nella sezione i valori si usano in tre modi.
bindcon"source": "param":{"content.text": {"source": "param", "field": "titolo"}}. Chiavi ammesse:content.*,settings.*,style.*,visible.fieldaccetta un sotto-campo (immagine.alt). Un'immagine senza sotto-campo dà lasrc.bind.repeatsu un figlio: una copia del nodo per ogni voce di un parametrolist. Nella copia la voce vale come parametroitem.$param.<nome>in un valore distyle, anche dentro un valore composto (1px solid $param.colore). Solo parametricolor.
Parametri: nome del parametro: ^[a-z][a-z0-9_]{0,31}$.
Permessi: come le sezioni.
Edizione: Free
Limiti noti:
- Ordine dei valori: valore passato, poi
default, poinull. - Parametro
requiredsenza valore né default: errore nella pagina che usa la sezione. Nel documento della sezione da solo non è un errore. visibletoglie il nodo se il valore èfalse. Pertext,html,link,imagelo toglie anche se il valore è vuoto o assente.- Senza valore né
fallbackil bind lascia il valore scritto nel nodo, che fa da segnaposto. $paramnon risolto: la proprietà di stile resta fuori.- Errori: parametro non dichiarato, tipo sbagliato,
repeatsu un parametro nonlist,repeatovisiblesulrootdella sezione, bindparamfuori da una sezione.
Posizione degli errori nelle sezioni
Cosa fa: riporta gli errori di validazione e qualità dei nodi espansi sul nodo nc/section-ref del documento. Così l'agente corregge il documento che ha scritto.
Come si usa: automatica.
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti:
- Valore arrivato da un parametro: il percorso diventa
.../settings/params/<nome>. - Altri errori: il percorso diventa
.../settings/sectione il messaggio inizia coninside section:. - Un errore di stile perde il suggerimento con gli ID interni.
- Nel report di qualità il messaggio termina con
(inside a reusable section). - Errori uguali sullo stesso percorso compaiono una volta.
Aggiornamento delle pagine che usano una sezione
Cosa fa: quando una sezione si salva, cambia slug o va nel cestino, Nucleo ricompila i documenti che la usano. Li trova con le dipendenze section:<id> e section-slug:<slug>. La seconda trova anche i documenti che citavano la sezione quando ancora mancava.
Come si usa: automatico.
Parametri: Nessuno
Permessi: nessuno.
Edizione: Free
Limiti noti: i primi 10 documenti si ricompilano nella stessa richiesta. Gli altri vanno nella coda di WP-Cron. Se la sezione rende un documento non valido o bloccante, la pagina pubblicata tiene la versione precedente.
Riferimento storico ref
Cosa fa: un nodo con il campo ref "section:<id>" diventa il root del documento indicato durante la normalizzazione. Gli ID interni ricevono il prefisso g<id>.
Come si usa: formato precedente a nc/section-ref. Per i documenti nuovi usa nc/section-ref.
Parametri: ref (string, section:<id>).
Permessi: nessuno.
Edizione: Free
Limiti noti: il documento referenziato non segue altri ref. Dentro una sezione riusabile ref è un errore. Dentro una sezione espansa il nodo sparisce senza errore.
Questa pagina ti è stata utile?