{"id":233759,"date":"2023-02-20T16:33:00","date_gmt":"2023-02-20T13:33:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233759"},"modified":"2023-02-24T18:45:49","modified_gmt":"2023-02-24T15:45:49","slug":"aggiungi-una-barra-laterale-custom-inspector-in-wordpress-gutenberg-con-post-meta","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/aggiungi-una-barra-laterale-custom-inspector-in-wordpress-gutenberg-con-post-meta\/","title":{"rendered":"Aggiungi una barra laterale Custom Inspector in WordPress Gutenberg con Post Meta"},"content":{"rendered":"\n<p>In questo tutorial esamineremo come aggiungere una barra laterale personalizzata all&#8217;Inspector (barra laterale destra) in WordPress Gutenberg. All&#8217;interno implementeremo un campo collegato a un post meta. Tutto \u00e8 implementato con Javascript, all&#8217;interno dell&#8217;editor Gutenberg, ed \u00e8 un&#8217;alternativa all&#8217;aggiunta di metabox in modo tradizionale.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e03345086.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-152503-61e4e03345086.png\" alt=\"Aggiungi una barra laterale Custom Inspector in WordPress Gutenberg con Post Meta\"><\/a><\/p>\n<h3>Dritta!<\/h3>\n<p>Questo \u00e8 un tutorial per creare la tua barra laterale personalizzata. Ma se sei interessato solo ad aggiungere meta\/impostazioni alla barra laterale standard di Inspector (scheda &quot;Documento&quot;), ho un tutorial esattamente per questo:<\/p>\n<h2>Cosa creeremo<\/h2>\n<p>WordPress Gutenberg consente agli sviluppatori di creare barre laterali personalizzate utilizzando la creazione di un cosiddetto plug-in Javascript. (Da non confondere con i tradizionali plugin di WordPress). Utilizzando un plug-in Javascript possiamo creare una nuova barra laterale e anche collegarci al menu &quot;Strumenti e opzioni&quot;.<\/p>\n<p>Aggiungeremo una nuova voce di menu negli &quot;Strumenti&quot; che aprir\u00e0 la nostra barra laterale personalizzata. Il contenuto della barra laterale dipende interamente da te, ma analizzer\u00f2 alcuni esempi, incluso come collegare un meta campo post al suo interno.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e0343f620.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-152503-61e4e0343f620.png\" alt=\"Aggiungi una barra laterale Custom Inspector in WordPress Gutenberg con Post Meta\"><\/a><\/p>\n<h2>Configurazione del tuo Javascript<\/h2>\n<p>Per questo tutorial scriver\u00f2 ES6\/ESNext Javascript con JSX, il che significa che dobbiamo impostare un compilatore. Se vuoi seguire e non scrivere Javascript ES5 dovrai configurare un ambiente di sviluppo che compili il tuo Javascript mentre procedi. Se non hai familiarit\u00e0 con questo, <a href=\"https:\/\/wordpress.mediadoma.com\/it\/guida-completa-alla-creazione-di-un-ambiente-di-sviluppo-per-gutenberg\/\" title=\"segui il mio post che spiega come configurarlo\">segui il mio post che spiega come configurarlo<\/a> e poi torna qui.<\/p>\n<p>Ho impostato il mio <code>webpack.config.js<\/code>per compilare il mio file Javascript di origine nella mia cartella del tema <code>\/assets\/js\/sidebar-plugin.js<\/code>. Questo file compilato \u00e8 ci\u00f2 di cui abbiamo bisogno per accodare all&#8217;editor Gutenberg. Mentre scrivo questo codice ho avviato il compilatore di runtime che ricompila Javascript ogni volta che salvo le modifiche nel codice sorgente (<code>npm run start<\/code>). Tutto questo \u00e8 spiegato in modo approfondito nel tutorial precedentemente menzionato.<\/p>\n<p>Lo sto scrivendo in un tema, ma funziona allo stesso modo in un plugin. Ricorda solo di regolare i percorsi quando aggiungi lo script all&#8217;editor.<\/p>\n<h2>Aggiunta dello script all&#8217;editor<\/h2>\n<p>Per aggiungere il nostro script all&#8217;editor Gutenberg abbiamo bisogno di scrivere del PHP. Se ti trovi in \u200b\u200bun tema, <code>functions.php<\/code>\u00e8 un buon punto di partenza o da qualche parte nei tuoi file di plugin. Si noti che \u00e8 necessario aggiungere lo script compilato finale, non il codice sorgente. Nel mio esempio il Javascript compilato si trova nella cartella del mio tema <code>\/assets\/js\/sidebar-plugin.js<\/code>.<\/p>\n<p>Creiamo una funzione agganciata a <code>enqueue_block_editor_assets<\/code>. Dentro facciamo il solito <code>[wp_enqueue_script](https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_script\/)()<\/code>. Come dipendenze allo script ne aggiungiamo due; <code>wp-plugins<\/code>, e <code>wp-edit-post<\/code>. Questi due pacchetti devono essere caricati prima del nostro script poich\u00e9 utilizziamo le funzioni da essi.<\/p>\n<pre><code>add_action('enqueue_block_editor_assets', function() {\n    wp_enqueue_script('awp-sidebar-plugin', get_stylesheet_directory_uri(). '\/assets\/js\/sidebar-plugin.js', ['wp-plugins', 'wp-edit-post']);\n});<\/code><\/pre>\n<p>Poich\u00e9 accodiamo lo script nell&#8217;hook, il <code>enqueue_block_editor_assets<\/code>nostro script verr\u00e0 caricato solo quando l&#8217;editor Gutenberg \u00e8 attivo. Grande! Ora \u00e8 tutto pronto per scrivere il nostro plugin Javascript.<\/p>\n<h2>Registra un plugin Javascript<\/h2>\n<p>Il primo passo \u00e8 la registrazione di un plugin. Lo facciamo con la <code>[registerPlugin](https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/plugins#registerPlugin)<\/code>funzione in wp.plugins dall&#8217;interno del <code>wp.plugins<\/code>pacchetto.<\/p>\n<p>Come parametro del registerPlugin forniamo un nome (assicurati che sia univoco) e un oggetto con le impostazioni. Come minimo \u00e8 necessario fornire un componente per la propriet\u00e0 render. Puoi anche aggiungere un&#8217;icona facoltativamente dai <a href=\"https:\/\/developer.wordpress.org\/resource\/dashicons\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dashicon di WordPress<\/a>. Tieni presente che se non specifichi un&#8217;icona ricadr\u00e0 sull&#8217;icona del plug-in. A scopo dimostrativo sto usando l&#8217; <code>'carrot'<\/code>icona.<\/p>\n<p>Per quanto riguarda il componente iniziamo definendo un componente base che restituisca un semplice div con del testo casuale al suo interno. E prima di tutto il codice destrutturiamo le funzioni dai pacchetti che vogliamo utilizzare.<\/p>\n<pre><code>const { registerPlugin } = wp.plugins;\n\u00a0\nconst CustomSidebarComponent =() =&gt; {\n    return(\n        &lt;div&gt;Hey!&lt;\/div&gt;\n    );\n}\n\u00a0\nregisterPlugin('awp-customsidebar', {\n    render: CustomSidebarComponent,\n    icon: 'carrot'\n});<\/code><\/pre>\n<p>Se non succede nulla (nemmeno errori) quando si aggiorna Gutenberg siamo tutti a posto. Non vediamo il nostro componente perch\u00e9 non abbiamo detto a WordPress dove renderizzarlo. Il passaggio successivo \u00e8 l&#8217;aggancio al menu personalizzato della barra laterale e ai componenti del menu degli strumenti per il rendering delle nostre cose.<\/p>\n<h2>Registra una barra laterale personalizzata<\/h2>\n<p>Ma prima una spiegazione su come Gutenberg gestisce le barre laterali personalizzate e perch\u00e9 dobbiamo fare quello che faremo. Quando registriamo correttamente una barra laterale personalizzata, all&#8217;inizio accadr\u00e0 automaticamente. Gutenberg aggiunger\u00e0 una scorciatoia alla nostra barra laterale nella barra degli strumenti in alto, accanto al menu Strumenti. Ci\u00f2 accade perch\u00e9 la nostra barra laterale viene automaticamente &quot;bloccata&quot;.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e0353bff7.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-152503-61e4e0353bff7.png\" alt=\"Aggiungi una barra laterale Custom Inspector in WordPress Gutenberg con Post Meta\"><\/a><\/p>\n<p>Il problema della semplice aggiunta di una barra laterale personalizzata \u00e8 che qualsiasi utente pu\u00f2 &quot;sbloccare&quot; questa scorciatoia. Quando lo fanno, non c&#8217;\u00e8 alcun punto di accesso per aprire di nuovo la barra laterale! Questo \u00e8 il motivo per cui dobbiamo aggiungere anche una voce di menu al menu Strumenti.<\/p>\n<p>La registrazione di una barra laterale personalizzata viene eseguita con il componente <code>PluginSidebar<\/code>del <code>wp.editPost<\/code>pacchetto. L&#8217;aggiunta di una voce di menu al menu Strumenti viene eseguita con il componente con il nome appropriato <code>PluginSidebarMoreMenuItem<\/code>(anch&#8217;esso nel <code>wp.editPost<\/code>pacchetto).<\/p>\n<p>Per il <code>PluginSidebar<\/code>componente dobbiamo fornire alcuni oggetti di scena. Dovresti fornire come minimo <code>name<\/code>e <code>title<\/code>. L&#8217;elica <code>title<\/code>si spiega da s\u00e9, questo \u00e8 il nome che apparir\u00e0 nella parte superiore della barra laterale. Nell&#8217;elica <code>name<\/code>fornire una lumaca unica. Quando aggiungi la voce di menu devi fare riferimento a questo slug.<\/p>\n<p>L&#8217;aggiunta di un <code>PluginSidebarMoreMenuItem<\/code>componente (menu strumenti) richiede almeno un prop; <code>target<\/code>. Qui fornisci lo stesso nome che hai dato nel supporto della barra laterale <code>name<\/code>. Come contenuto del componente scrivi il testo che verr\u00e0 visualizzato come voce di menu. Di solito questo sarebbe lo stesso della barra laterale <code>title<\/code>.<\/p>\n<p>Poich\u00e9 React richiede un singolo nodo di wrapping attorno al reso del componente, avvolgiamo tutto all&#8217;interno di un <code>Fragment<\/code>componente (dal <code>wp.element<\/code>pacchetto). Sto anche avvolgendo le mie stringhe <code>__()<\/code>dal <code>wp.i18n<\/code>pacchetto per consentire la traduzione.<\/p>\n<pre><code>const { registerPlugin } = wp.plugins;\nconst { __ } = wp.i18n;\nconst { Fragment } = wp.element;\nconst { PluginSidebarMoreMenuItem, PluginSidebar } = wp.editPost;\n\u00a0\nconst CustomSidebarComponent =() =&gt; {\n    return(\n        &lt;Fragment&gt;\n            &lt;PluginSidebar \n                name=\"awp-custom-sidebar\" \n                title={__('My Custom sidebar', 'awp')}\n            &gt;Hello there.&lt;\/PluginSidebar&gt;\n            &lt;PluginSidebarMoreMenuItem \n                target='awp-custom-sidebar'\n                &gt;{__('My Custom sidebar', 'awp')}&lt;\/PluginSidebarMoreMenuItem&gt;\n        &lt;\/Fragment&gt;\n    );\n}\n\u00a0\nregisterPlugin('awp-customsidebar', {\n    render: CustomSidebarComponent,\n    icon: 'carrot'\n});<\/code><\/pre>\n<p>Con il codice sopra otterremo le seguenti due (molto probabilmente tre) cose che accadono. Otterrai una scorciatoia per l&#8217;icona di una carota nella barra degli strumenti (se non l&#8217;hai ancora sbloccata). Cliccando su questo si aprir\u00e0 la barra laterale. Avrai anche una nuova voce di menu nella barra laterale nel menu Strumenti, sotto il titolo &quot;Plugin&quot;.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e036136de.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-152503-61e4e036136de.png\" alt=\"Aggiungi una barra laterale Custom Inspector in WordPress Gutenberg con Post Meta\"><\/a><\/p>\n<h2>Aggiunta di contenuti alla barra laterale<\/h2>\n<p>Il contenuto effettivo della barra laterale dipende interamente da te. Devi solo aggiungere HTML o componenti all&#8217;interno del <code>PluginSidebar<\/code>componente con quello che vuoi (al posto del testo &quot;Hello there.&quot;).<\/p>\n<p>Potresti notare che al contenuto della barra laterale manca il riempimento. Questo \u00e8 intenzionale perch\u00e9 l&#8217;idea \u00e8 che creerai pannelli all&#8217;interno di questa barra laterale. I pannelli sono le sezioni pieghevoli nella normale barra laterale di Gutenberg. Questi sono componenti che puoi facilmente aggiungere all&#8217;interno della tua barra laterale personalizzata. Puoi aggiungere tutti i pannelli che vuoi e sono ottimi per raggruppare cose diverse.<\/p>\n<h3>Aggiunta di pannelli nella nostra barra laterale<\/h3>\n<p>Diamo un&#8217;occhiata rapidamente a come possiamo aggiungere pannelli alla nostra barra laterale. Se hai creato i tuoi tipi di blocchi personalizzati, potresti avere familiarit\u00e0 con questi componenti. Usiamo <code>PanelBody<\/code>e facoltativamente <code>PanelRow<\/code>dal <code>wp.components<\/code>pacchetto.<\/p>\n<p>Per un <code>PanelBody<\/code>componente fornisci come minimo il prop <code>title<\/code>. Puoi opzionalmente fornire true o false <code>initialOpen<\/code>all&#8217;elica per decidere se il pannello deve essere espanso come predefinito o meno. Poich\u00e9 il contenuto all&#8217;interno del componente \u00e8 tutto all&#8217;interno del pannello.<\/p>\n<p>All&#8217;interno di un <code>PanelBody<\/code>\u00e8 possibile utilizzare facoltativamente <code>PanelRow<\/code>dei componenti. Non sono realmente necessari ma possono aiutarti a ottenere uno stile buono per il contenuto del tuo pannello.<\/p>\n<p>Per esempio, aggiungiamo due pannelli alla nostra barra laterale personalizzata.<\/p>\n<pre><code>const { registerPlugin } = wp.plugins;\nconst { __ } = wp.i18n;\nconst { Fragment } = wp.element;\nconst { PluginSidebarMoreMenuItem, PluginSidebar } = wp.editPost;\nconst { PanelBody, PanelRow } = wp.components;\n\u00a0\nconst CustomSidebarComponent = () =&gt; {\n    return(\n        &lt;Fragment&gt;\n            &lt;PluginSidebarMoreMenuItem \n                target='awp-custom-sidebar'\n                &gt;{__('My Custom sidebar', 'awp')}&lt;\/PluginSidebarMoreMenuItem&gt;\n            &lt;PluginSidebar \n                name=\"awp-custom-sidebar\" \n                title={__('My Custom sidebar', 'awp')}\n            &gt;                \n                &lt;PanelBody\n                    title={__('This is a panel section', 'awp')}\n                    initialOpen={true}\n                &gt;\n                    &lt;PanelRow&gt;\n                        Put any component or content here.\n                    &lt;\/PanelRow&gt;\n                &lt;\/PanelBody&gt;\n                &lt;PanelBody\n                    title={__('Another section', 'awp')}\n                    initialOpen={false}\n                &gt;\n                    &lt;PanelRow&gt;\n                        This is a collapsed section by default.\n                    &lt;\/PanelRow&gt;\n                &lt;\/PanelBody&gt;\n            &lt;\/PluginSidebar&gt;\n        &lt;\/Fragment&gt;\n    );\n}\n\u00a0\nregisterPlugin('awp-customsidebar', {\n    render: CustomSidebarComponent,\n    icon: 'carrot'\n});<\/code><\/pre>\n<p>Con questo codice la nostra barra laterale personalizzata inizia a sembrare davvero come se appartenesse a Gutenberg!<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152503-61e4e036ce025.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-152503-61e4e036ce025.png\" alt=\"Aggiungi una barra laterale Custom Inspector in WordPress Gutenberg con Post Meta\"><\/a><\/p>\n<h2>Aggiunta di meta campi post alla barra laterale personalizzata<\/h2>\n<p>Ora stiamo davvero entrando nel vivo delle cose utili per una barra laterale personalizzata; aggiungendo impostazioni e memorizzando i loro valori. Ma prima dobbiamo capire come.<\/p>\n<p>\u00c8 davvero facile aggiungere campi di impostazione (input, caselle di controllo, campi di commutazione, ecc.) Nella barra laterale utilizzando i componenti pronti all&#8217;uso nei pacchetti di WordPress. Tuttavia, dobbiamo considerare come memorizzare i valori. L&#8217;opzione pi\u00f9 ovvia \u00e8 salvarli come post meta. Ma il collegamento di un&#8217;impostazione a un meta campo post richiede del codice aggiuntivo. Pi\u00f9 specificamente, abbiamo bisogno di utilizzare i cosiddetti <a href=\"https:\/\/reactjs.org\/docs\/higher-order-components.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">componenti<\/a> di ordine superiore per recuperare e aggiornare i post meta all&#8217;interno di Javascript. Dobbiamo anche registrare ogni meta post utilizzando PHP e renderli disponibili per l&#8217;API REST.<\/p>\n<p>Per chiudere questo tutorial dimostrer\u00f2 come aggiungere un meta post con una chiave <code>awp_my_custom_meta<\/code>che dovrebbe essere archiviata come true o false. Nella barra laterale verr\u00e0 visualizzato come un campo di commutazione (un componente vero\/falso).<\/p>\n<h3>Registra il meta meta per l&#8217;API REST<\/h3>\n<p>Il primo passo per aggiungere post meta nel nostro file Javascript \u00e8 registrarli e definirli come accessibili nell&#8217;API REST. Per fare ci\u00f2 torniamo di nuovo a PHP.<\/p>\n<p>All&#8217;interno di una funzione agganciata <code>init<\/code>all&#8217;azione utilizziamo la <code>[register_meta](https:\/\/developer.wordpress.org\/reference\/functions\/register_meta\/)()<\/code>funzione. Come parametri dobbiamo definire il tipo di oggetto come &#8216; <code>post<\/code>&#8216; perch\u00e9 lo stiamo usando come post meta (non esclude ad esempio il tipo di post di pagina). Forniamo la chiave meta e quindi un array di argomenti. La cosa fondamentale da aggiungere nell&#8217;array degli argomenti \u00e8 impostare &#8216; <code>show_in_rest<\/code>&#8216; su <code>true<\/code>. Post meta \u00e8 comunemente usato come &#8216; <code>single<\/code>&#8216; (pensa a come usi <code>get_post_meta()<\/code>). Definiamo anche il <code>type<\/code>. Per quanto riguarda il nostro caso, lo abbiamo impostato su &#8216; <code>boolean<\/code>&#8216;.<\/p>\n<pre><code>add_action('init', function() {\n    register_meta('post', 'awp_my_custom_meta', [\n        'show_in_rest' =&gt; true,\n        'single' =&gt; true,\n        'type' =&gt; 'boolean'\n    ]);\n});<\/code><\/pre>\n<p>Con questo codice il campo &#8216; <code>awp_my_custom_meta<\/code>&#8216; post meta \u00e8 accessibile da Gutenberg. Devi ripetere <code>register_meta()<\/code>per ogni meta post che desideri aggiungere nella barra laterale.<\/p>\n<p>Ora torniamo al nostro Javascript.<\/p>\n<h3>Aggiunta di un&#8217;impostazione alla nostra barra laterale<\/h3>\n<p>Iniziamo con la parte facile: aggiungere l&#8217;input alla nostra barra laterale. Successivamente aggiungeremo pi\u00f9 codice per collegare effettivamente il campo delle impostazioni al post meta. A causa del modo in cui dobbiamo farlo, definiamo un nuovo componente separato per la nostra impostazione. Quindi all&#8217;interno del pannello a cui vuoi aggiungere le tue impostazioni chiama semplicemente questo nuovo componente.<\/p>\n<p>Chiamiamo il componente <code>CustomSidebarMetaComponent<\/code>(potresti chiamarlo qualcosa di rilevante per il tuo progetto). All&#8217;interno di questo componente vogliamo rendere un campo di commutazione. Per fare ci\u00f2 utilizziamo il <code>ToggleControl<\/code>componente del <code>wp.components<\/code>pacchetto. Come supporto per ToggleControl forniamo un&#8217;etichetta di montaggio nell&#8217;oggetto <code>title<\/code>. Un ToggleControl necessita anche degli oggetti di scena <code>onChange<\/code>per l&#8217;aggiornamento del valore e <code>checked<\/code>per il valore corrente. Ometteremo questi due per ora fino al passaggio successivo.<\/p>\n<pre><code>...\nconst { PanelBody, PanelRow, ToggleControl } = wp.components;\n\u00a0\nconst CustomSidebarMetaComponent = () =&gt; {\n    return(\n        &lt;ToggleControl\n            label={__('My custom post meta', 'awp')}\n        \/&gt;\n    );\n}\n\u00a0\nconst CustomSidebarComponent = () =&gt; {\n    return(\n        ...       \n        &lt;PanelBody\n            title={__('This is a panel section', 'awp')}\n            initialOpen={true}\n        &gt;\n            &lt;PanelRow&gt;\n                &lt;CustomSidebarMetaComponent \/&gt;\n            &lt;\/PanelRow&gt;\n        &lt;\/PanelBody&gt;\n        ...<\/code><\/pre>\n<p>Con il codice sopra dovresti ottenere un campo di attivazione\/disattivazione nella barra laterale. \u00c8 deselezionato e non accade nulla quando si fa clic su di esso. Questo \u00e8 il passaggio successivo: collegarlo al nostro post meta.<\/p>\n<h3>Accesso al meta post con withSelect e withDispatch<\/h3>\n<p>Per accedere e aggiornare un meta valore post, dobbiamo utilizzare componenti di ordine superiore (HOC) per accedere alla versione dei negozi di WordPress (simile a Redux). WordPress ci fornisce alcuni utili HOC con funzioni che possiamo utilizzare nel <code>wp.data<\/code>pacchetto.<\/p>\n<p>Il componente di ordine superiore <code>[withSelect](https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-data\/#withSelect)<\/code>\u00e8 fornire al nostro componente oggetti di scena che, nel nostro caso, vengono recuperati da post meta. Lo usiamo per ottenere il valore del nostro post meta. All&#8217;interno <code>withSelect<\/code>possiamo usare <code>select('core\/editor').getEditedPostAttribute('meta')<\/code>per recuperare il meta del post corrente.<\/p>\n<p>D&#8217;altra parte, <code>[withDispatch](https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-data\/#withDispatch)<\/code>\u00e8 un componente di ordine superiore che pu\u00f2 eseguire azioni. Nel nostro caso vogliamo aggiornare il meta del post quando l&#8217;impostazione del campo corrispondente viene modificata nella nostra barra laterale. All&#8217;interno di questo componente utilizziamo <code>dispatch('core\/editor').editPost()<\/code>per informare WordPress per inviare un&#8217;azione. All&#8217;interno dell&#8217;oggetto che forniamo diciamo a WordPress che \u00e8 meta che vogliamo aggiornare.<\/p>\n<p>Infine dobbiamo combinare <code>withSelect<\/code>e <code>withDispatch<\/code>con il nostro componente che gestisce il post meta campo (<code>CustomSidebarMetaComponent<\/code>). Per fare questo utilizziamo WordPress&#8217; <code>compose<\/code>dal <code>wp.compose<\/code>pacchetto. L&#8217;idea \u00e8 quella <code>withSelect<\/code>e <code>withDispatch<\/code>fornisce al nostro <code>CustomSidebarMetaComponent<\/code>componente oggetti di scena. <code>withSelect<\/code>fornisce il valore del meta post come prop e <code>withDispatch<\/code>fornisce una funzione che possiamo chiamare per aggiornare il valore come prop. Impostiamo questi oggetti di scena sul nostro ToggleField <code>checked<\/code>e <code>onChange<\/code>, di conseguenza.<\/p>\n<p>Questo \u00e8 molto da spiegare. Diamo un&#8217;occhiata al codice effettivo:<\/p>\n<pre><code>...\nconst { compose } = wp.compose;\nconst { withDispatch, withSelect } = wp.data;\n\u00a0\nconst CustomSidebarMetaComponent = (props) =&gt; {\n    return(\n        &lt;ToggleControl\n            label={__('My custom post meta', 'awp')}\n            checked={props.customPostMetaValue}\n            onChange={props.setCustomPostMeta}\n        \/&gt;\n    );\n}\n\u00a0\nconst CustomSidebarMeta = compose([\n    withSelect(select =&gt; {\n        return { customPostMetaValue: select('core\/editor').getEditedPostAttribute('meta')['awp_my_custom_meta'] }\n    }),\n    withDispatch(dispatch =&gt; {\n        return { \n            setCustomPostMeta: function(value) {\n                dispatch('core\/editor').editPost({ meta: { awp_my_custom_meta: value } });\n            }\n        }\n    })\n])(CustomSidebarMetaComponent);\n\u00a0\nconst CustomSidebarComponent = () =&gt; {\n    return(\n        ...\n        &lt;PanelBody\n            title={__('This is a panel section', 'awp')}\n            initialOpen={true}\n        &gt;\n            &lt;PanelRow&gt;\n                &lt;CustomSidebarMeta \/&gt;\n            &lt;\/PanelRow&gt;\n        &lt;\/PanelBody&gt;\n        ...<\/code><\/pre>\n<p>Cominciamo dall&#8217;inizio. Che \u00e8 in fondo. Alla riga <code>#36<\/code>cambiamo il componente che renderizziamo nella nostra barra laterale con il componente che abbiamo creato con <code>compose<\/code>(alla riga <code>#15<\/code>). Il <code>CustomSidebarMeta<\/code>componente unir\u00e0 i componenti <code>withSelect<\/code>e <code>withDispatch<\/code>e restituir\u00e0 il <code>CustomSidebarMetaComponent<\/code>.<\/p>\n<p>Avranno <code>CustomSidebarMetaComponent<\/code>accesso <code>customPostMetaValue<\/code>all&#8217;elica di <code>withSelect<\/code>, e <code>setCustomPostMeta<\/code>all&#8217;elica di <code>withDispatch<\/code>Questi due che usiamo per gli oggetti di scena <code>checked<\/code>e in .<code>onChange``ToggleField<\/code><\/p>\n<p>Nota che in linea <code>#5<\/code>aggiungiamo <code>props<\/code>come parametri ai componenti in modo da rendere gli oggetti di scena accessibili nel componente.<\/p>\n<h2>Conclusione e parole finali<\/h2>\n<p>Spero che questo tutorial ti sia stato di qualche utilit\u00e0. Questo \u00e8 ci\u00f2 che sono riuscito a comprendere sull&#8217;argomento durante molti tentativi ed errori. Non c&#8217;\u00e8 ancora quasi nessuna documentazione su questo argomento. Sto ancora lottando con questo, specialmente quando si tratta di gestire in modo efficiente pi\u00f9 meta meta. Se riesco ad imparare qualche buon trucco aggiorner\u00f2 di sicuro questo tutorial!<\/p>\n<p>Si spera che seguendo questo tutorial dovresti avere un codice che aggiunge con successo una nuova barra laterale personalizzata all&#8217;editor Gutenberg di WordPress e, si spera, con alcuni contenuti e impostazioni significativi. Ecco il codice finale per la barra laterale personalizzata con il meta campo post.<\/p>\n<pre><code>const { registerPlugin } = wp.plugins;\nconst { __ } = wp.i18n;\nconst { Fragment } = wp.element;\nconst { PluginSidebarMoreMenuItem, PluginSidebar } = wp.editPost;\nconst { PanelBody, PanelRow, ToggleControl } = wp.components;\nconst { compose } = wp.compose;\nconst { withDispatch, withSelect } = wp.data;\n\u00a0\nconst CustomSidebarMetaComponent = (props) =&gt; {\n    return(\n        &lt;ToggleControl\n            label={__('My custom post meta', 'awp')}\n            checked={props.customPostMetaValue}\n            onChange={props.setCustomPostMeta}\n        \/&gt;\n    );\n}\n\u00a0\nconst CustomSidebarMeta = compose([\n    withSelect(select =&gt; {\n        return { customPostMetaValue: select('core\/editor').getEditedPostAttribute('meta')['awp_my_custom_meta'] }\n    }),\n    withDispatch(dispatch =&gt; {\n        return { \n            setCustomPostMeta: function(value) {\n                dispatch('core\/editor').editPost({ meta: { awp_my_custom_meta: value } });\n            }\n        }\n    })\n])(CustomSidebarMetaComponent);\n\u00a0\nconst CustomSidebarComponent = () =&gt; {\n    return(\n        &lt;Fragment&gt;\n            &lt;PluginSidebarMoreMenuItem \n                target='awp-custom-sidebar'\n                icon='carrot'\n            &gt;{__('My Custom sidebar', 'awp')}&lt;\/PluginSidebarMoreMenuItem&gt;\n            &lt;PluginSidebar \n                name=\"awp-custom-sidebar\" \n                title={__('My Custom sidebar', 'awp')}\n            &gt;                \n                &lt;PanelBody\n                    title={__('This is a panel section', 'awp')}\n                    initialOpen={true}\n                &gt;\n                    &lt;PanelRow&gt;\n                        &lt;CustomSidebarMeta \/&gt;\n                    &lt;\/PanelRow&gt;\n                &lt;\/PanelBody&gt;\n                &lt;PanelBody\n                    title={__('Another section', 'awp')}\n                    initialOpen={false}\n                &gt;\n                    &lt;PanelRow&gt;\n                        This is a collapsed section by default.\n                    &lt;\/PanelRow&gt;\n                &lt;\/PanelBody&gt;\n            &lt;\/PluginSidebar&gt;\n        &lt;\/Fragment&gt;\n    );\n}\n\u00a0\nregisterPlugin('awp-customsidebar', {\n    render: CustomSidebarComponent,\n    icon: 'carrot'\n});<\/code><\/pre>\n<pre><code>add_action('enqueue_block_editor_assets', function() {\n    wp_enqueue_script('awp-sidebar-plugin', get_stylesheet_directory_uri(). '\/assets\/js\/sidebar-plugin.js', ['wp-plugins', 'wp-edit-post']);\n});\n\u00a0\nadd_action('init', function() {\n    register_meta('post', 'awp_my_custom_meta', [\n        'show_in_rest' =&gt; true,\n        'single' =&gt; true,\n        'type' =&gt; 'boolean'\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>Un tutorial su come aggiungere una barra laterale personalizzata all&#8217;Inspector in WordPress Gutenberg. All&#8217;interno implementeremo un campo collegato a un post meta.<\/p>\n","protected":false},"author":1,"featured_media":223619,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,896,720,939,939,1110,814,814,720,844,844,865,865],"tags":[1168],"class_list":{"0":"post-233759","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-codice","9":"category-sviluppatore","10":"category-gutenberg-6","12":"category-n-a","13":"category-plugin-2","16":"category-tutorial","18":"category-wordpress-6","20":"tag-affiai-it"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233759","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=233759"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233759\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/223619"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=233759"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233759"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233759"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}