{"id":233986,"date":"2023-02-26T12:23:00","date_gmt":"2023-02-26T09:23:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233986"},"modified":"2023-02-26T12:25:43","modified_gmt":"2023-02-26T09:25:43","slug":"come-aggiungere-le-impostazioni-del-colore-al-tuo-blocco-gutenberg-personalizzato","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/come-aggiungere-le-impostazioni-del-colore-al-tuo-blocco-gutenberg-personalizzato\/","title":{"rendered":"Come aggiungere le impostazioni del colore al tuo blocco Gutenberg personalizzato"},"content":{"rendered":"\n<p>Questo post approfondir\u00e0 come aggiungere le impostazioni del colore al blocco Gutenberg di WordPress personalizzato. Impareremo come aggiungere lo stesso componente delle impostazioni del colore, che offre la possibilit\u00e0 di scegliere tra i colori della tavolozza e il colore personalizzato, come utilizzano molti dei blocchi predefiniti di WordPress.<\/p>\n<p>Questo \u00e8 ci\u00f2 che aggiungeremo al nostro blocco personalizzato:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151572-61e4cc69ead10.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151572-61e4cc69ead10.png\" alt=\"Come aggiungere le impostazioni del colore al tuo blocco Gutenberg personalizzato\"><\/a><\/p>\n<p>Usando i componenti di Gutenberg possiamo implementare molto facilmente questa sezione di tavolozza\/colore nel nostro blocco personalizzato. Puoi definire le impostazioni del colore per influenzare qualsiasi colore desideri; sfondo, colore del testo, colore del bordo o qualsiasi altra cosa. Puoi anche aggiungere tutte le impostazioni di colore che desideri all&#8217;interno di questo pannello.<\/p>\n<p>Prima di approfondire il codice, ci sono alcune cose di cui devi essere a conoscenza. Non saltare al codice poich\u00e9 la sezione successiva spiegher\u00e0 molto perch\u00e9 il codice deve farlo come fa.<\/p>\n<h2>Quello che devi sapere prima<\/h2>\n<p>I componenti per l&#8217;implementazione delle impostazioni di tavolozza\/colore sono <code>PanelColorSettings<\/code>e <code>withColors<\/code>dal <code>wp.blockEditor<\/code>pacchetto. Il componente <code>withColors<\/code>\u00e8 un cosiddetto componente di ordine superiore e deve essere implementato in modo leggermente diverso rispetto al semplice output di un componente normale. Entrer\u00f2 un po&#8217; pi\u00f9 nel dettaglio pi\u00f9 avanti. Ma prima dobbiamo essere consapevoli delle nozioni di base su come Gutenberg gestisce le impostazioni del colore dei blocchi.<\/p>\n<h3>Come i blocchi Gutenberg gestiscono le impostazioni del colore<\/h3>\n<p>Ci sono alcune regole su come Gutenberg gestisce le impostazioni dei colori nei blocchi. Se hai mai disegnato un tema supportato da Gutenberg prima, probabilmente hai gi\u00e0 familiarit\u00e0 con queste regole. Li esamineremo comunque rapidamente perch\u00e9 dobbiamo gestirlo nel nostro codice a blocchi.<\/p>\n<ul>\n<li>Quando viene scelto un colore della tavolozza, l&#8217;elemento del blocco del nodo otterr\u00e0 una classe di un determinato modello. La lezione inizia con &#8221; <code>has-<\/code>&#8220;, e poi lo slug della tavolozza viene dopo. Il finale dipende da quale elemento dovrebbe influenzare il colore. Per il colore del testo termina con &#8221; <code>-color<\/code>&#8220;. Per il colore di sfondo termina con &#8221; <code>-background-color<\/code>&#8220;. Ad esempio, un blocco con una tavolozza di colore &#8220;rosso&quot; scelto come colore di sfondo otterr\u00e0 la classe &#8221; <code>has-red-background-color<\/code>&#8220;.<\/li>\n<li>Quando viene scelto un colore personalizzato (dal colorpicker), l&#8217;elemento del blocco del nodo otterr\u00e0 uno stile in linea con il codice esadecimale. Ad esempio un colore personalizzato #DD0000 scelto per il colore di sfondo ricever\u00e0 l&#8217;attributo &#8221; <code>style=\"background-color: #DD0000;<\/code>&#8220;.<\/li>\n<\/ul>\n<p>Quando implementiamo le impostazioni del colore per il nostro blocco, dovremo implementare la classe e lo stile inline corretti. Lo faremo alla fine di questo tutorial.<\/p>\n<h3>Come lavorare con<code>withColors<\/code><\/h3>\n<p>Come accennato in precedenza <code>withColors<\/code>\u00e8 un <a href=\"https:\/\/reactjs.org\/docs\/higher-order-components.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">componente di ordine superiore<\/a>. Ci\u00f2 significa sostanzialmente che \u00e8 un componente che prende un componente e restituisce un nuovo componente. Nel componente restituito otteniamo utili oggetti di scena dal componente di ordine superiore. Per dirla semplicemente, useremo <code>withColors<\/code>per restituire il nostro componente per il nostro blocco personalizzato. Il nostro componente a blocchi ottiene i supporti necessari per lavorare con i colori da <code>withColors<\/code>.<\/p>\n<p>Il componente <code>withColors<\/code>gestisce lo stato e molte funzionalit\u00e0 per lavorare con i colori. E otteniamo molta automazione in questo processo. Questo \u00e8 molto utile per capire se il colore scelto \u00e8 un colore della tavolozza (dobbiamo aggiungere una classe) o un colore personalizzato (dobbiamo aggiungere uno stile in linea). <code>withColors<\/code>semplifica molto il processo di memorizzazione del colore scelto, qualunque esso sia, negli attributi del nostro blocco. A proposito di attributi..<\/p>\n<h3>Attributi e<code>withColors<\/code><\/h3>\n<p>Ovviamente il tuo blocco ha bisogno di attributi per memorizzare il colore scelto. Per beneficiare dell&#8217;automazione di withColor per la memorizzazione del colore corretto \u00e8 necessario definire due attributi per ciascuna impostazione del colore. Uno per memorizzare lo slug del colore della tavolozza e un altro per memorizzare il codice esadecimale. Ci sono alcune regole per\u00f2.<\/p>\n<p>Supponiamo di voler aggiungere un&#8217;impostazione di colore per il colore del testo del blocco, quindi decidi di definire un attributo chiamato in modo appropriato &quot; <code>textColor<\/code>&quot;. Sar\u00e0 quindi necessario definire un altro attributo nel modello &#8221; <code>customYourOriginalAttribute<\/code>&#8220;. In questo esempio il secondo attributo dovr\u00e0 essere denominato &#8221; <code>customTextColor<\/code>&#8220;. Attenzione al camelCase (maiuscolo) qui. Seguendo questo schema <code>withColors<\/code>automaticamente:<\/p>\n<ul>\n<li>Se \u00e8 stato scelto un colore della tavolozza, l&#8217;attributo &#8221; <code>textColor<\/code>&#8221; conterr\u00e0 lo slug della tavolozza.<\/li>\n<li>Se \u00e8 stato scelto un colore personalizzato, &#8221; <code>customTextColor<\/code>&#8221; verr\u00e0 popolato con il codice esadecimale.<\/li>\n<\/ul>\n<p>Questi due lavorano in tandem. Se viene scelto un colore personalizzato, <code>textColor<\/code>sar\u00e0 automaticamente <code>undefined<\/code>e viceversa.<\/p>\n<p>E infine, un&#8217;ultima cosa da ricordare: <strong>non sar\u00e0 necessario utilizzare <code>setAttributes()<\/code>per aggiornare gli attributi del colore<\/strong>! Gli oggetti di scena forniti da <code>withColors<\/code>includono una funzione che aggiorna automaticamente i tuoi attributi per te. Tutto quello che devi fare \u00e8 passare questa funzione <code>onChange<\/code>all&#8217;evento al <code>PanelColorSettings<\/code>componente e i tuoi attributi verranno aggiornati automaticamente.<\/p>\n<p>Ok, \u00e8 ora di vedere tutto questo in pratica!<\/p>\n<h2>Implementazione delle impostazioni del colore in un blocco personalizzato<\/h2>\n<p>Per iniziare, ho un blocco personalizzato piuttosto inutile che non fa altro che visualizzare un testo codificato. Questo rende facile separare ci\u00f2 di cui abbiamo bisogno per codificare per aggiungere le impostazioni del colore. Ho una <a href=\"https:\/\/wordpress.mediadoma.com\/it\/come-creare-un-blocco-gutenberg-personalizzato-per-wordpress-serie-di-tutorial\/\" title=\"serie di tutorial su come creare i tuoi blocchi personalizzati\">serie di tutorial su come creare i tuoi blocchi personalizzati<\/a> se sei interessato a saperne di pi\u00f9.<\/p>\n<p>Nota: sto scrivendo tutto il codice in ES6\/ESNext. Ci\u00f2 include le funzioni delle frecce che richiedono un&#8217;attenzione particolare nella configurazione di Babel\/webpack. Se ricevi errori su alcuni dei codici seguenti, segui la mia <a href=\"https:\/\/wordpress.mediadoma.com\/it\/guida-completa-alla-creazione-di-un-ambiente-di-sviluppo-per-gutenberg\/\" title=\"guida su come configurare Webpack e Babel per ES6\/ESNext\">guida su come configurare Webpack e Babel per ES6\/ESNext<\/a> o regola il codice per non utilizzare &quot;sintassi sperimentali&quot;.<\/p>\n<p>Questo \u00e8 il mio blocco personalizzato di base prima di fare qualsiasi cosa con le impostazioni del colore:<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\nconst { __ } = wp.i18n;\n\u00a0\nconst BlockWithColorSettings = (props) =&gt; {\n    return(\n        &lt;div&gt;\n            PanelColorSettings Demo\n        &lt;\/div&gt;\n    );\n}\n\u00a0\nregisterBlockType('awp\/colorsettings', {\n    title: __('Color Settings Demo'),\n    icon: 'carrot',\n    category: 'common',\n    edit: BlockWithColorSettings,\n    save: (props) =&gt; { \n        return(\n            &lt;div&gt;\n                PanelColorSettings Demo\n            &lt;\/div&gt;\n        );\n    }\n});<\/code><\/pre>\n<p>\u00c8 piuttosto semplice. Si noti che la <code>edit<\/code>funzione si riferisce semplicemente a un componente separato, <code>BlockWithColorSettings<\/code>, invece di scriverlo in linea. Ci\u00f2 semplifica l&#8217;implementazione in un secondo momento <code>withColors<\/code>.<\/p>\n<p>Ok, \u00e8 ora di implementare le impostazioni del colore nel nostro blocco! Ad esempio, voglio impostare il colore del testo.<\/p>\n<h3>Aggiunta di attributi<\/h3>\n<p>Come accennato in precedenza, \u00e8 necessario definire due attributi per ciascuna impostazione del colore. E dobbiamo prestare particolare attenzione alla loro denominazione. Voglio aggiungere un attributo di colore del testo, quindi sto nominando l&#8217;attributo <code>textColor<\/code>. Ci\u00f2 significa che aggiunger\u00f2 anche un attributo <code>customTextColor<\/code>. Entrambi dovrebbero essere di tipo string.<\/p>\n<pre><code>...\nregisterBlockType('awp\/colorsettings', {\n    title: __('Color Settings Demo'),\n    icon: 'carrot',\n    category: 'common',\n    attributes: {\n        textColor: {\n            type: 'string'\n        },\n        customTextColor: {\n            type: 'string'\n        },\n    },\n    edit: BlockWithColorSettings,\n    save: (props) =&gt; { \n    ...<\/code><\/pre>\n<p>I nostri attributi sono pronti per memorizzare l&#8217;impostazione del colore del testo del blocco. Ora \u00e8 il momento di implementare <code>withColors<\/code>e <code>PanelColorSettings<\/code>.<\/p>\n<h3>Implementazione<code>withColors<\/code><\/h3>\n<p>Come accennato in precedenza <code>withColors<\/code>, \u00e8 un componente di ordine superiore che dovrebbe richiedere un componente per essere restituito. Ovviamente vogliamo che restituisca il nostro componente di modifica, <code>BlockWithColorSettings<\/code>. Ma come parametro per <code>withColors<\/code>fornire un oggetto.<\/p>\n<p>Nell&#8217;oggetto passato <code>withColors<\/code>dobbiamo dire <code>withColors<\/code>quale attributo vogliamo usare per memorizzare il colore e che tipo di elemento colorer\u00e0 (nel nostro caso il colore del testo, che significa &quot;colore&quot; della regola CSS). L&#8217;informazione sulla regola CSS assicura che i nomi delle classi restituiti siano corretti. Poich\u00e9 questo \u00e8 il colore del testo, vogliamo nomi di classe come &quot;has-color&quot;.<\/p>\n<p>Prima un po&#8217; di destrutturazione in alto. <code>withColors<\/code>risiede nel <code>wp.blockEditor<\/code>pacchetto.<\/p>\n<pre><code>const { withColors } = wp.blockEditor;<\/code><\/pre>\n<p>Cambieremo la <code>edit<\/code>funzione in:<\/p>\n<pre><code>    ...\n    attributes: {\n        ...\n    },\n    edit: withColors({textColor: 'color'})(BlockWithColorSettings),\n    save: (props) =&gt; { \n        ...<\/code><\/pre>\n<p>Con questo codice il nostro componente <code>BlockWithColorSettings<\/code>ricever\u00e0 alcuni prop aggiuntivi:<\/p>\n<ul>\n<li><code>props.textColor<\/code>: \u00c8 un oggetto che consiste in tutte le informazioni sul colore scelto. Se \u00e8 stato scelto un colore della tavolozza, memorizzer\u00e0 le propriet\u00e0 per il codice esadecimale, lo slug della tavolozza, il nome della classe e altro. Se \u00e8 stato scelto un colore personalizzato, l&#8217;oggetto conterr\u00e0 il codice esadecimale. Il codice esadecimale si trova sempre nella propriet\u00e0 <code>color<\/code>. E il nome della classe, (solo se \u00e8 stato scelto un colore della tavolozza) verr\u00e0 impostato nella propriet\u00e0 <code>class<\/code>.<\/li>\n<li><code>props.setTextColor<\/code>: una funzione che aggiorner\u00e0 i nostri attributi per noi. Forniamo questo per l&#8217; <code>onChange<\/code>evento delle impostazioni del colore come vedremo in seguito. La funzione aggiorner\u00e0 entrambi <code>textColor<\/code>e gli <code>customTextColor<\/code>attributi. Poich\u00e9 abbiamo seguito le regole di denominazione, si aggiorner\u00e0 automaticamente <code>customTextColor<\/code>anche se non abbiamo mai fornito questo nome di attributo.<\/li>\n<\/ul>\n<p>Si noti che la funzione &quot;set&quot; fornita come prop seguir\u00e0 la regola: &quot; <code>setYourAttributeName<\/code>&quot;. Poich\u00e9 abbiamo fornito <code>textColor<\/code>, la funzione \u00e8 denominata <code>setTextColor<\/code>. Se invece nominassimo il nostro attributo <code>awesomeColor<\/code>e lo <code>withColors<\/code>fornissimo nell&#8217;oggetto, la funzione set sarebbe denominata <code>setAwesomeColor()<\/code>.<\/p>\n<h3>Implementazione<code>PanelColorSettings<\/code><\/h3>\n<p>Il passaggio successivo \u00e8 l&#8217;implementazione della sezione Ispettore effettiva. Per fare ci\u00f2 aggiungiamo <code>PanelColorSettings<\/code>all&#8217;interno un <code>InspectorControls<\/code>componente. Poich\u00e9 React richiede che tutto sia all&#8217;interno di un nodo radice, utilizziamo anche <code>Fragment<\/code>(from <code>wp.elements<\/code>) per avvolgere tutto all&#8217;interno.<\/p>\n<p>Prima un po&#8217; di destrutturazione nella parte superiore del file:<\/p>\n<pre><code>const { Fragment } = wp.element;\nconst { InspectorControls, PanelColorSettings, withColors } = wp.blockEditor;<\/code><\/pre>\n<p>E aggiorniamo il nostro <code>BlockWithColorSettings<\/code>componente in qualcosa del genere:<\/p>\n<pre><code>const BlockWithColorSettings = (props) =&gt; {\n    const { textColor, setTextColor } = props;  \/\/ Props received from withColors\n    return(\n        &lt;Fragment&gt;\n            &lt;InspectorControls&gt;\n                &lt;PanelColorSettings \n                    title={__('Color settings')}\n                    colorSettings={[\n                        {\n                            value: textColor.color,\n                            onChange: setTextColor,\n                            label: __('Text color')\n                        },\n                    ]}\n                \/&gt;\n            &lt;\/InspectorControls&gt;\n            &lt;div&gt;\n                PanelColorSettings Demo\n            &lt;\/div&gt;\n        &lt;\/Fragment&gt;\n    );\n}<\/code><\/pre>\n<p>Come puoi vedere in linea <code>#2<\/code>destrutturiamo gli oggetti di scena ricevuti da <code>withColors<\/code>, <code>textColor<\/code>e <code>setTextColor<\/code>. Tieni presente che <code>props.textColor<\/code>\u00e8 l&#8217;oggetto ricevuto da <code>withColors<\/code>, ed <code>props.attributes.textColor<\/code>\u00e8 l&#8217;attributo. Non abbiamo bisogno di fare riferimento all&#8217;attributo per\u00f2.<\/p>\n<p>Come supporto al componente <code>PanelColorSettings<\/code>possiamo fornire un titolo per la sezione (titolo nella casella pieghevole in Inspector). La cosa importante qui \u00e8 il supporto <code>colorSettings<\/code>in cui dobbiamo fornire una serie di oggetti per l&#8217;impostazione del colore. Per ogni impostazione di colore (attualmente ne abbiamo solo una) dobbiamo fornire alcune propriet\u00e0. La propriet\u00e0 <code>value<\/code>prevede il codice esadecimale attualmente scelto (anche se \u00e8 stato scelto un colore della tavolozza). Questo ci viene fornito nel <code>textColor<\/code>puntello, all&#8217;interno della propriet\u00e0 <code>color<\/code>. Per la <code>onChange<\/code>propriet\u00e0 forniamo semplicemente la funzione &#8220;set&#8221; fornita da <code>withColors<\/code>, <code>setTextColor<\/code>. E infine dovremmo dare un <code>label<\/code>in modo che l&#8217;utente sappia quale elemento influenzer\u00e0 questo colore. Apparir\u00e0 proprio sopra l&#8217;area di scelta di un colore.<\/p>\n<p>Ecco come appare il nostro componente nell&#8217;editor di Gutenberg in questo momento:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151572-61e4cc6b47b23.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151572-61e4cc6b47b23.png\" alt=\"Come aggiungere le impostazioni del colore al tuo blocco Gutenberg personalizzato\"><\/a><\/p>\n<p>Ora sta aggiornando con successo i nostri attributi durante la scelta dei colori. Puoi vedere che ricorda la tua scelta di colore quando salvi il post.<\/p>\n<p>Tuttavia, non accade nulla visivamente quando si cambiano i colori. La scelta del colore \u00e8 memorizzata negli attributi, ma non si verifica alcun cambiamento di colore nell&#8217;editor, n\u00e9 durante l&#8217;anteprima del post. Questo perch\u00e9 abbiamo bisogno di aggiungere codice per le classi e gli stili del blocco. Dobbiamo farlo sia per la <code>edit<\/code>funzione (che \u00e8 per l&#8217;editor) che per la <code>save<\/code>funzione (frontend). Questo \u00e8 il prossimo passo.<\/p>\n<h3>Gestione degli stili di classe e inline in<code>edit<\/code><\/h3>\n<p>Abbiamo bisogno di costruire la classe del nodo del blocco e gli attributi di stile in base all&#8217;impostazione del colore scelta. Fortunatamente con <code>withColors<\/code>otteniamo un po&#8217; di automazione in questo. Ricorda che <code>props.textColor<\/code>\u00e8 un oggetto che contiene tutte le informazioni di cui abbiamo bisogno, incluso il nome della classe.<\/p>\n<p>Potremmo fare qualcosa del genere:<\/p>\n<pre><code>...\nconst BlockWithColorSettings = (props) =&gt; {\n    const { textColor, setTextColor } = props;  \/\/ Props received from withColors\n    let divClass;\n    let divStyles = {};\n    if (textColor != undefined) {\n        if (textColor.class != undefined) {\n            divClass = textColor.class;\n        } else {\n            divStyles.color = textColor.color;\n        }\n    }\n    return(\n        &lt;Fragment&gt;\n            &lt;InspectorControls&gt;\n                ...\n            &lt;\/InspectorControls&gt;\n            &lt;div className={divClass} style={divStyles}&gt;\n                PanelColorSettings Demo\n            &lt;\/div&gt;\n            ...<\/code><\/pre>\n<p>In linea <code>#20<\/code>applichiamo la classe critica e lo stile inline al nodo radice del nostro blocco. Prima di ci\u00f2, costruiamo l&#8217;attributo class e inline style controllando l&#8217; <code>props.textColor<\/code>oggetto.<\/p>\n<p>Dopo questa modifica, il tuo blocco personalizzato dovrebbe ora essere completamente funzionante nell&#8217;editor. Ogni volta che cambi colore, il blocco cambier\u00e0 il colore del testo. Stupendo! Il passaggio finale \u00e8 farlo anche per la <code>save<\/code>funzione, in modo da ottenere queste classi e stili anche nel frontend.<\/p>\n<h3>Gestione degli stili di classe e inline in<code>save<\/code><\/h3>\n<p>Il concetto di costruire la classe e gli stili inline e applicarli al nodo radice \u00e8 lo stesso <code>save<\/code>di <code>edit<\/code>. Ma c&#8217;\u00e8 una differenza fondamentale. In <code>save<\/code>non abbiamo gli oggetti di scena forniti da <code>withColors<\/code>. E non possiamo aggiungere componenti di ordine superiore alla <code>save<\/code>funzione. Quindi nella <code>save<\/code>funzione tutte le informazioni che abbiamo sono gli attributi.<\/p>\n<p>\u00c8 una buona regola empirica evitare di codificare i nomi delle classi &quot;ha&quot;. E se WordPress decidesse di modificare questa regola in futuro? Fortunatamente abbiamo una funzione che pu\u00f2 aiutarci a generare i nomi di classe appropriati per noi: <code>getColorClassName()<\/code>.<\/p>\n<p>Prima di dimenticarlo, destrutturiamolo. \u00c8 anche nella <code>wp.blockEditor<\/code>confezione.<\/p>\n<pre><code>const { InspectorControls, PanelColorSettings, withColors, getColorClassName } = wp.blockEditor;<\/code><\/pre>\n<p>L&#8217;utilizzo della <code>getColorClassName()<\/code>funzione richiede due parametri. Prima una stringa per la regola CSS. Poich\u00e9 la nostra impostazione del colore \u00e8 per il colore del testo, forniamo &quot; <code>color<\/code>&quot;. Questo dice alla funzione che dovrebbe restituire un nome di classe di &quot;ha-qualcosa-colore&quot; e non &quot;ha-qualcosa-colore-di-sfondo&quot;, per esempio. Come secondo parametro dobbiamo fornire il valore dell&#8217;attributo.<\/p>\n<p>L&#8217;attributo style \u00e8 costruito semplicemente impostando &#8220;color&#8221; sul valore dell&#8217;attributo <code>customTextColor<\/code>, se \u00e8 definito.<\/p>\n<pre><code>save: (props) =&gt; { \n    const { textColor, customTextColor } = props.attributes;\n    let divClass;\n    let divStyles = {};\n    if (textColor != undefined) {\n        divClass = getColorClassName('color', textColor);\n    }\n    if (customTextColor != undefined) {\n        divStyles.color = customTextColor;\n    }\n    return(\n        &lt;div className={divClass} style={divStyles}&gt;\n            PanelColorSettings Demo\n        &lt;\/div&gt;\n    );\n}<\/code><\/pre>\n<p>E, naturalmente, non dimenticare di applicare la classe e lo stile al nodo radice del tuo blocco; come in linea <code>#12<\/code>.<\/p>\n<p>PS: se stai testando il tuo blocco nell&#8217;editor mentre scrivi questo codice, ora riceverai un errore di blocco. Ci\u00f2 accade perch\u00e9 ora abbiamo modificato l&#8217;output per la <code>save<\/code>funzione e tutto ci\u00f2 che hai salvato in precedenza \u00e8 in conflitto. Dovrai rimuovere il blocco e aggiungerlo di nuovo.<\/p>\n<p>Dopo questa modifica, il tuo blocco ora dovrebbe applicare correttamente anche il colore del testo scelto nel frontend.<\/p>\n<p>E questo \u00e8 tutto! Ora hai implementato con successo le impostazioni del colore nel tuo blocco. Se sei interessato ad aggiungere pi\u00f9 impostazioni di colore (non solo il colore del testo), continua a leggere.<\/p>\n<h2>Una nota su pi\u00f9 impostazioni di colore<\/h2>\n<p>A questo punto dovresti essere in grado di implementare pi\u00f9 impostazioni di colore. Potresti voler aggiungere impostazioni per il colore di sfondo, il colore del testo, il colore del bordo o qualsiasi altra cosa per il tuo blocco. In questa sezione far\u00f2 una rapida panoramica di ci\u00f2 che dobbiamo fare per implementare pi\u00f9 impostazioni di colore.<\/p>\n<p>Supponiamo che io voglia aggiungere anche il colore di sfondo al mio blocco.<\/p>\n<p>Per prima cosa ho bisogno di definire un nuovo attributo chiamato in modo creativo <code>backgroundColor<\/code>. Definisco <code>customBackgroundColor<\/code>anche un altro attributo.<\/p>\n<p>Nella <code>edit<\/code>funzione cambio l&#8217;oggetto fornito <code>withColors<\/code>come tale:<\/p>\n<pre><code>withColors({textColor: 'color', backgroundColor: 'background-color'})<\/code><\/pre>\n<p>Questo dice <code>withColors<\/code>che il mio <code>textColor<\/code>attributo \u00e8 per la regola CSS &#8221; <code>color<\/code>&#8221; (per il colore del testo), e l&#8217;attributo <code>backgroundColor<\/code>\u00e8 per la regola CSS &#8221; <code>background-color<\/code>&#8220;. <code>withColors<\/code>riconoscer\u00e0 e aggiorner\u00e0 automaticamente anche gli attributi e <code>customTextColor<\/code>.<code>customBackgroundColor<\/code><\/p>\n<p>Nel <code>PanelColorSettings<\/code>componente, fornisco un altro oggetto all&#8217;array al prop <code>colorSettings<\/code>. Cos\u00ec:<\/p>\n<pre><code>&lt;PanelColorSettings \n    title={__('Color settings')}\n    colorSettings={[\n        {\n            value: textColor.color,\n            onChange: setTextColor,\n            label: __('Text color')\n        },\n        {\n            value: backgroundColor.color,\n            onChange: setBackgroundColor,\n            label: __('Background color')\n        },\n    ]}\n\/&gt;<\/code><\/pre>\n<p>Con questo dovresti ottenere due impostazioni di colore separate all&#8217;interno della finestra Impostazioni per le impostazioni di colore.<\/p>\n<p>L&#8217;ultimo passaggio consiste nella creazione dei nomi e degli stili di classe appropriati in entrambi <code>edit<\/code>e <code>save<\/code>. Questo \u00e8 un passaggio piuttosto semplice in quanto si tratta semplicemente di costruire correttamente una stringa o un oggetto di stile. Ricorda che il nome della tua classe deve supportare pi\u00f9 classi di colore (ad esempio se sono stati scelti sia il colore del testo che il colore dello sfondo). Basta aggiungere uno spazio tra ogni nome di classe.<\/p>\n<p>PS: se devi gestire molti nomi di classi per il tuo blocco, potresti trarre vantaggio dall&#8217;installazione del <code>classnames<\/code>pacchetto. Praticamente tutti i componenti in Gutenberg usano questa libreria per combinare pi\u00f9 facilmente i nomi delle classi.<\/p>\n<h2>Conclusione e codice completo<\/h2>\n<p>Ora dovresti aver imparato come implementare le impostazioni del colore nel tuo blocco personalizzato. Spero che questo ti sia stato di qualche utilit\u00e0! Ho dovuto aggiungere questa funzionalit\u00e0 al mio progetto e non sono riuscito a trovare alcuna informazione o una buona documentazione. Quindi questo \u00e8 il risultato del consolidamento di tutto ci\u00f2 che ho imparato su questo argomento, dopo molti tentativi ed errori.<\/p>\n<p>Ecco il codice finale, tutto sommato, per il blocco personalizzato di esempio con l&#8217;impostazione del colore del testo:<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\nconst { __ } = wp.i18n;\nconst { Fragment } = wp.element;\nconst { InspectorControls, PanelColorSettings, withColors, getColorClassName } = wp.blockEditor;\n\u00a0\nconst BlockWithColorSettings = (props) =&gt; {\n    const { textColor, setTextColor } = props;  \/\/ Props received from withColors\n\u00a0\n    let divClass;\n    let divStyles = {};\n    if (textColor != undefined) {\n        if (textColor.class != undefined) {\n            divClass = textColor.class;\n        } else {\n            divStyles.color = textColor.color;\n        }\n    }\n    return(\n        &lt;Fragment&gt;\n            &lt;InspectorControls&gt;\n                &lt;PanelColorSettings \n                    title={__('Color settings')}\n                    colorSettings={[\n                        {\n                            value: textColor.color,\n                            onChange: setTextColor,\n                            label: __('Text color')\n                        },\n                    ]}\n                \/&gt;\n            &lt;\/InspectorControls&gt;\n            &lt;div className={divClass} style={divStyles}&gt;\n                PanelColorSettings Demo\n            &lt;\/div&gt;\n        &lt;\/Fragment&gt;\n    );\n}\n\u00a0\nregisterBlockType('awp\/colorsettings', {\n    title: __('Color Settings Demo'),\n    icon: 'carrot',\n    category: 'common',\n    attributes: {\n        textColor: {\n            type: 'string'\n        },\n        customTextColor: {\n            type: 'string'\n        },\n    },\n    edit: withColors({textColor: 'color'})(BlockWithColorSettings),\n    save: (props) =&gt; { \n        const { textColor, customTextColor } = props.attributes;\n        let divClass;\n        let divStyles = {};\n        if (textColor != undefined) {\n            divClass = getColorClassName('color', textColor);\n        }\n        if (customTextColor != undefined) {\n            divStyles.color = customTextColor;\n        }\n        return(\n            &lt;div className={divClass} style={divStyles}&gt;\n                PanelColorSettings Demo\n            &lt;\/div&gt;\n        );\n    }\n});<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Questo post approfondisce come aggiungere le impostazioni del colore al blocco Gutenberg personalizzato di WordPress, nel modo corretto, proprio come fanno i blocchi di WordPress.<\/p>\n","protected":false},"author":1,"featured_media":151573,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[939,939,1110,804,804,814,814,844,844,865,865],"tags":[1168],"class_list":["post-233986","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gutenberg-6","category-n-a","category-php-6","category-plugin-2","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233986","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=233986"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233986\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/151573"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=233986"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233986"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233986"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}