{"id":228857,"date":"2022-10-12T11:15:00","date_gmt":"2022-10-12T08:15:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228857"},"modified":"2022-11-09T04:33:14","modified_gmt":"2022-11-09T01:33:14","slug":"aggiungi-select2-come-inspectorcontrol-in-wordpress-gutenberg","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/aggiungi-select2-come-inspectorcontrol-in-wordpress-gutenberg\/","title":{"rendered":"Aggiungi Select2 come InspectorControl in WordPress Gutenberg"},"content":{"rendered":"\n<p>Per un progetto su cui stavo lavorando, volevo usare Select2 come Gutenberg <code>InpectorControl<\/code>per consentirmi di applicare le impostazioni a un blocco. Questo tutorial ti fornir\u00e0 anche le basi necessarie per inserire qualsiasi componente React di terze parti nell&#8217;editor Gutenberg di WordPress.<\/p>\n<p>Select2 \u00e8 un sostituto super pratico per le caselle selezionate sul tuo sito web. In particolare ha alcune ottime opzioni per selezionare pi\u00f9 elementi.<\/p>\n<p>Il prodotto finito, Select2 in WordPress Gutenberg InspectorControls<\/p>\n<p>La buona notizia \u00e8 che non avevo bisogno di creare un componente React per inserire Select2 in Gutenberg, il <a href=\"https:\/\/github.com\/JedWatson\/react-select\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>react-select<\/code>componente di Jed Watson<\/a> fa gi\u00e0 un ottimo lavoro in questo, tuttavia farlo funzionare bene con Gutenberg non \u00e8 stato facile come seguire le istruzioni.<\/p>\n<p>Per prima cosa, dovevamo installare il componente nella nostra build. Dato che era su npm, era semplice come inserire quanto segue nel nostro terminale:<\/p>\n<h2>Ottenere Select2 in un blocco Gutenberg<\/h2>\n<p>Usando il <a href=\"https:\/\/github.com\/zgordon\/gutenberg-course\/blob\/master\/blocks\/06-inspector-controls\/index.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">repository Git del corso Zac Gordons Gutenberg<\/a> (parte del <a href=\"https:\/\/javascriptforwp.com\/courses\/gutenburg-development\/ref\/648\/?campaign=GutenbergDevelopment\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fantastico corso di sviluppo Gutenberg<\/a> di Zac Gordons) come base per il mio plugin (in particolare l&#8217; <code>InspectorControls<\/code>esempio), per usarlo <code>react-select<\/code>dovevo aggiungere quanto segue nella parte superiore del mio file:<\/p>\n<pre><code>import React from 'react';\nimport Select from 'react-select';\n<\/code><\/pre>\n<p>Oh no! La compilazione di questo ci d\u00e0 un errore:<\/p>\n<blockquote>\n<p>Modulo non trovato: errore: impossibile risolvere &#8216;reagire&#8217;<\/p>\n<\/blockquote>\n<p>Non temere, questo fantastico articolo su <a href=\"https:\/\/www.cssigniter.com\/how-to-use-external-react-components-in-your-gutenberg-blocks\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">&quot;Come utilizzare i componenti React esterni nei tuoi blocchi Gutenberg&quot; di CSS Igniter<\/a> \u00e8 venuto in soccorso, tutto ci\u00f2 che dobbiamo fare \u00e8 registrarci <code>externals<\/code>nel nostro <code>webpack.config.js<\/code>file:<\/p>\n<pre><code>externals: {\n    'react': 'React',\n    'react-dom': 'ReactDOM',\n}\n<\/code><\/pre>\n<p>Cos\u00ec:<\/p>\n<pre><code>module.exports = {\n    entry: {\n        '.\/assets\/js\/editor': '.\/blocks\/index.js',\n        '.\/assets\/js\/script': '.\/blocks\/script.js',\n    },\n    output: {\n        path: path.resolve( __dirname ),\n        filename: '[name].js',\n    },\n    externals: {\n        'react': 'React',\n        'react-dom': 'ReactDOM',\n    }\n...\n<\/code><\/pre>\n<h2>Registrazione degli InspectorControls<\/h2>\n<p>All&#8217;interno del rotolo del pannello del tuo <code>&lt;InspectorControls&gt;<\/code>componente dovrai aggiungere quanto segue:<\/p>\n<pre><code>&lt;Select\n    name='select-two'\n    value={ JSON.parse( selectedOption) }\n    onChange={ handleSelectChange }\n    options={[\n        { value: 'health', label: 'Health' },\n        { value: 'wealth', label: 'Wealth' },\n        { value: 'code', label: 'Code' },\n    ]}\n    isMulti='true'\n    \/&gt;\n<\/code><\/pre>\n<p>Non abbiamo ancora finito, poich\u00e9 dovremo anche registrare l&#8217; <code>selectedOption<\/code>attributo e la <code>handleSelectChange<\/code>funzione. Possiamo farlo in questo modo:<\/p>\n<pre><code>attributes: {\n    selectedOption: {\n        type: 'string',\n        default: null,\n    }\n},\n<\/code><\/pre>\n<p>\u2026e ora per la funzione\u2026<\/p>\n<pre><code>const handleSelectChange = (selectedOption) =&gt; setAttributes( { selectedOption: JSON.stringify( selectedOption) } );\n<\/code><\/pre>\n<p>Aspetta, perch\u00e9 ne abbiamo bisogno <code>JSON.stringify()<\/code>e <code>JSON.parse()<\/code>i valori? Bene, poich\u00e9 il valore <code>react-select<\/code>accettato dal componente \u00e8 un array e poich\u00e9 Gutenberg non ci consente di salvare questo valore come array, questa \u00e8 una soluzione alternativa che possiamo utilizzare.<\/p>\n<h2>Mettendolo insieme<\/h2>\n<p>La nostra area completa <code>InspectorControls<\/code>ora dovrebbe apparire cos\u00ec:<\/p>\n<pre><code>...\nattributes: {\n    selectedOption: {\n        type: 'string',\n        default: null,\n    }\n},\nedit: props =&gt; {\n    const { attributes: { selectedOption }, className, setAttributes } = props;\n    const handleSelectChange = (selectedOption) =&gt; setAttributes( { selectedOption: JSON.stringify( selectedOption) } );\n    return [\n        &lt;InspectorControls&gt;\n            &lt;PanelBody\n                title={ __( 'Select2', 'text-domain') }\n            &gt;\n                &lt;PanelRow&gt;\n                    &lt;Select\n                        name='select-two'\n                        value={ JSON.parse( selectedOption) }\n                        onChange={ handleSelectChange }\n                        options={[\n                            { value: 'health', label: 'Health' },\n                            { value: 'wealth', label: 'Wealth' },\n                            { value: 'code', label: 'Code' },\n                        ]}\n            isMulti='true'\n                        \/&gt;\n                 &lt;\/PanelRow&gt;\n             &lt;\/PanelBody&gt;\n         &lt;\/InspectorControls&gt;,\n...\n<\/code><\/pre>\n<h2>Un bell&#8217;aspetto a Gutenberg<\/h2>\n<p>Come puoi vedere dallo screenshot, funziona abbastanza bene:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-169504-61e816febb7e8.png\" alt=\"Aggiungi Select2 come InspectorControl in WordPress Gutenberg\" \/>Seleziona2 come Gutenberg InspectorControl<\/p>\n<h2>Portarlo oltre<\/h2>\n<p>Ho usato questo Inspector Control nel mio plugin Secure Blocks for Gutenberg, scopri come ho popolato il controllo Select2 con <a href=\"https:\/\/wholesomecode.ltd\/articles\/working-with-gutenberg-and-the-wordpress-rest-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dati dinamici dall&#8217;API REST di WordPress<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Per un progetto su cui stavo lavorando, volevo usare Select2 come Gutenberg InpectorControl per consentirmi di applicare le impostazioni a un blocco. Questo tutorial ti dar\u00e0 anche le basi di cui hai bisogno&#8230;<\/p>\n","protected":false},"author":1,"featured_media":224196,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,720,844],"tags":[1168],"class_list":["post-228857","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-sviluppatore","category-tutorial","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/228857","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=228857"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/228857\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/224196"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=228857"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=228857"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=228857"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}