{"id":80203,"date":"2025-01-20T09:21:00","date_gmt":"2025-01-20T08:21:00","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=80203&#038;preview=true&#038;preview_id=80203"},"modified":"2025-01-20T12:24:34","modified_gmt":"2025-01-20T11:24:34","slug":"plugin-gutenberg","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/","title":{"rendered":"Come costruire un plugin Gutenberg per aggiungere funzionalit\u00e0 all&#8217;editor a blocchi"},"content":{"rendered":"<p>Nel corso degli anni abbiamo esplorato Gutenberg da molti punti di vista. Abbiamo analizzato <a href=\"https:\/\/kinsta.com\/it\/blog\/gutenberg-editor-wordpress\/\">le funzionalit\u00e0 dell&#8217;editor<\/a>, le abbiamo confrontate con quelle di <a href=\"https:\/\/kinsta.com\/it\/blog\/gutenberg-vs-elementor\/\">altri page builder<\/a>, abbiamo costruito blocchi personalizzati <a href=\"https:\/\/kinsta.com\/it\/blog\/blocchi-gutenberg\/\">statici<\/a> e <a href=\"https:\/\/kinsta.com\/it\/blog\/blocchi-dinamici\/\">dinamici<\/a> e <a href=\"https:\/\/kinsta.com\/it\/blog\/aggiungere-meta-box-ai-post-di-wordpress\/\">molto altro<\/a>.<\/p>\n<p>Con le ultime versioni di WordPress, nuove funzionalit\u00e0 e strumenti permettono di creare layout complessi in modo pi\u00f9 semplice, arricchendo e migliorando le funzionalit\u00e0 dell&#8217;editor di blocchi senza dover costruire blocchi personalizzati.<\/p>\n<p>Grazie all&#8217;introduzione dei <a href=\"https:\/\/kinsta.com\/it\/blog\/block-pattern-wordpress\/\">block pattern<\/a> e di strumenti per sviluppatori come l&#8217;<a href=\"https:\/\/kinsta.com\/it\/blog\/api-block-bindings\/\">API Block Bindings<\/a>, i casi di utilizzo dei blocchi personalizzati sono diminuiti. Ora \u00e8 possibile creare strutture di blocchi complesse, iniettare valori di metadati nei propri contenuti e automatizzare buona parte del flusso di lavoro senza lasciare l&#8217;interfaccia dell&#8217;editor. In breve, oggi WordPress permette di creare siti complessi con pochi clic come mai prima d&#8217;ora.<\/p>\n<p>L&#8217;aggiunta di controlli e strumenti personalizzati all&#8217;editor pu\u00f2 contribuire a rendere pi\u00f9 fluido il processo di creazione dei contenuti. Ad esempio, potreste aver bisogno di aggiungere un pannello alla barra laterale dei post per aggiungere funzionalit\u00e0 o creare una barra laterale personalizzata per gestire pi\u00f9 campi meta.<\/p>\n<p>Iniziamo!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Come creare un plugin per l&#8217;editor a blocchi senza creare un blocco personalizzato<\/h2>\n<p>WordPress mette a disposizione un comodo <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/packages\/packages-create-block\/\" target=\"_blank\" rel=\"noopener noreferrer\">strumento a riga di comando<\/a> che permette di installare un ambiente di sviluppo Node.js locale con tutti i file e le dipendenze necessarie per creare un blocco personalizzato. Basta digitare <code>npx @wordpress\/create-block<\/code> nello strumento a riga di comando, attendere qualche secondo e il gioco \u00e8 fatto.<\/p>\n<p>Tuttavia, l&#8217;impalcatura di un blocco personalizzato non \u00e8 necessaria quando si deve aggiungere solo una barra laterale o un semplice pannello di impostazioni. In questo caso, \u00e8 necessario creare un plugin Gutenberg.<\/p>\n<p>WordPress non fornisce un&#8217;utility per automatizzare il processo di creazione di un plugin per Gutenberg, quindi dovrete farlo manualmente. Ma non preoccupatevi: il processo \u00e8 relativamente semplice e ci saremo noi a guidarvi. Ecco i passi da seguire:<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"7\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>1. Scaricare e installare un ambiente di sviluppo locale<\/h3>\n<p><strong>Prima di tutto:<\/strong> anche se \u00e8 possibile sviluppare un plugin Gutenberg in un ambiente remoto, potrebbe essere pi\u00f9 conveniente installare un sito WordPress di sviluppo in locale. Potete utilizzare qualsiasi ambiente basato su PHP e MySQL. Tra le <a href=\"https:\/\/kinsta.com\/it\/blog\/mamp-alternative\/\">tante alternative<\/a> disponibili, vi consigliamo <a href=\"https:\/\/kinsta.com\/it\/devkinsta\/caratteristiche\/\">DevKinsta<\/a>. \u00c8 gratuito, completo, facile da usare e compatibile al 100% con l&#8217;hosting Kinsta.<\/p>\n<p>Una volta configurato il sito di sviluppo, sarete pronti a creare un plugin per l&#8217;editor di blocchi Gutenberg.<\/p>\n<h3>2. Scaricare e installare Node.js e npm<\/h3>\n<p>Scaricate Node.js da <a href=\"https:\/\/nodejs.org\/\">nodejs.org<\/a> e installatelo sul vostro computer. In questo modo installerete anche npm, il gestore di pacchetti Node.<\/p>\n<p>Una volta fatto questo, lanciate lo strumento a riga di comando ed eseguite <code>node -v<\/code> e <code>npm -v<\/code>. Dovreste vedere le versioni installate di Node.js e npm.<\/p>\n<figure id=\"attachment_190001\" aria-describedby=\"caption-attachment-190001\" style=\"width: 1302px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-190001\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/01\/node-v.png\" alt=\"Verificare le versioni di node e npm\" width=\"1302\" height=\"308\"><figcaption id=\"caption-attachment-190001\" class=\"wp-caption-text\">Verificare le versioni di node e npm<\/figcaption><\/figure>\n<h3>3. Creare la cartella del plugin<\/h3>\n<p>Create una nuova cartella sotto <code>wp-content\/plugins<\/code> e rinominatela <code>my-sidebar-plugin<\/code> o qualcosa di simile. Ricordate che questo nome deve riflettere il nome del plugin.<\/p>\n<p>Aprite il terminale, navigate nella cartella del plugin e inizializzate un progetto npm con il seguente comando:<\/p>\n<pre><code class=\"language-bash\">npm init -y<\/code><\/pre>\n<p>In questo modo verr\u00e0 creato un file di base <code>package.json<\/code>.<\/p>\n<figure id=\"attachment_190003\" aria-describedby=\"caption-attachment-190003\" style=\"width: 1302px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-190003\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/01\/npm-init-y.png\" alt=\"Creare un file package.json di base\" width=\"1302\" height=\"886\"><figcaption id=\"caption-attachment-190003\" class=\"wp-caption-text\">Creare un file package.json di base<\/figcaption><\/figure>\n<h3>4. Installare le dipendenze<\/h3>\n<p>Nel vostro strumento a riga di comando, digitate il seguente comando:<\/p>\n<pre><code class=\"language-bash\">npm install @wordpress\/plugins @wordpress\/scripts --save-dev<\/code><\/pre>\n<ul>\n<li><code>@wordpress\/plugins<\/code> installa il <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/packages\/packages-plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">modulo per WordPress<\/a> <code>plugins<\/code>.<\/li>\n<li><code>@wordpress\/scripts<\/code> installa una raccolta di <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/packages\/packages-scripts\/\" target=\"_blank\" rel=\"noopener noreferrer\">script riutilizzabili<\/a> per lo sviluppo di WordPress.<\/li>\n<\/ul>\n<p>Una nuova cartella <code>node_modules<\/code> dovrebbe essere stata aggiunta al vostro progetto.<\/p>\n<p>Ora, aprite il vostro <code>package.json<\/code> e aggiornate <code>scripts<\/code> come segue:<\/p>\n<pre><code class=\"language-json\">{\n\t\"name\": \"my-sidebar-plugin\",\n\t\"version\": \"1.0.0\",\n\t\"main\": \"index.js\",\n\t\"scripts\": {\n\t\t\"build\": \"wp-scripts build\",\n\t\t\"start\": \"wp-scripts start\"\n\t},\n\t\"keywords\": [],\n\t\"author\": \"\",\n\t\"license\": \"ISC\",\n\t\"description\": \"\",\n\t\"devDependencies\": {\n\t\t\"@wordpress\/plugins\": \"^7.14.0\",\n\t\t\"@wordpress\/scripts\": \"^30.7.0\"\n\t}\n}<\/code><\/pre>\n<p>Ora date un&#8217;occhiata alla cartella del plugin:<\/p>\n<figure id=\"attachment_190006\" aria-describedby=\"caption-attachment-190006\" style=\"width: 1862px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-190006\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/01\/package-json.png\" alt=\"Il progetto del plugin in Visual Studio Code\" width=\"1862\" height=\"998\"><figcaption id=\"caption-attachment-190006\" class=\"wp-caption-text\">Il progetto del plugin in Visual Studio Code<\/figcaption><\/figure>\n<h3>5. Creare i file del plugin<\/h3>\n<p>Nella cartella del plugin, create un nuovo file <code>.php<\/code> e dategli lo stesso nome della cartella. Nel nostro esempio, \u00e8 <code>my-sidebar-plugin.php<\/code>.<\/p>\n<p>Aprite il file e incollate il seguente codice per registrare il plugin sul server:<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\/**\n * Plugin Name: My Sidebar Plugin\n *\/\n\nfunction my_sidebar_plugin_register_script() {\n\twp_enqueue_script(\n\t\t'my_sidebar_plugin_script',\n\t\tplugins_url( 'build\/index.js', __FILE__ ),\n\t\tarray( 'wp-plugins', 'wp-edit-post' ),\n\t\tfilemtime( plugin_dir_path( __FILE__ ) . 'build\/index.js' )\n\t);\n}\nadd_action( 'enqueue_block_editor_assets', 'my_sidebar_plugin_register_script' );<\/code><\/pre>\n<p>Successivamente, create una cartella <code>src<\/code> nella directory del plugin. Al suo interno, create un nuovo file <code>index.js<\/code> con il seguente codice:<\/p>\n<pre><code class=\"language-js\">import { registerPlugin } from '@wordpress\/plugins';\nimport { PluginSidebar } from '@wordpress\/edit-post';\n\nconst MyPluginSidebar = () =&gt; (\n\t&lt;PluginSidebar\n\t\tname=\"my-sidebar-plugin\"\n\t\ttitle=\"My Sidebar Plugin\"\n\t&gt;\n\t\t&lt;div&gt;\n\t\t\tHello my friends!\n\t\t&lt;\/div&gt;\n\t&lt;\/PluginSidebar&gt;\n);\n\nregisterPlugin( 'my-sidebar-plugin', {\n\trender: MyPluginSidebar,\n} );<\/code><\/pre>\n<h3>6. Compilare il codice<\/h3>\n<p>Manca solo la compilazione. Tornate alla riga di comando ed eseguite:<\/p>\n<pre><code class=\"language-bash\">npm run build<\/code><\/pre>\n<p>Questo crea una cartella <code>build<\/code> con i file compressi del progetto.<\/p>\n<figure id=\"attachment_190008\" aria-describedby=\"caption-attachment-190008\" style=\"width: 2120px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-190008\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/01\/plugin-project-vsc.png\" alt=\"La cartella del progetto del plugin in VSC\" width=\"2120\" height=\"998\"><figcaption id=\"caption-attachment-190008\" class=\"wp-caption-text\">La cartella del progetto del plugin in VSC<\/figcaption><\/figure>\n<p>Una volta terminato, accedete alla schermata dei <strong>plugin<\/strong> nella bacheca di WordPress e attivate il plugin. Create un nuovo post o una nuova pagina e cliccate sull&#8217;icona del plugin nell&#8217;angolo in alto a destra per visualizzare la barra laterale personalizzata.<\/p>\n<figure id=\"attachment_190010\" aria-describedby=\"caption-attachment-190010\" style=\"width: 1976px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-190010\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/01\/gutenberg-custom-sidebar.png\" alt=\"Una barra laterale personalizzata nell'editor dei post\" width=\"1976\" height=\"552\"><figcaption id=\"caption-attachment-190010\" class=\"wp-caption-text\">Una barra laterale personalizzata nell&#8217;editor dei post<\/figcaption><\/figure>\n<h3>7. Sviluppare e compilare<\/h3>\n<p>Abbiamo inserito il file <code>index.js<\/code> nella cartella <code>src<\/code>. L&#8217;uso di una cartella <code>src<\/code> \u00e8 una convenzione comune nello sviluppo di plugin e temi di WordPress, che rende il vostro codice pi\u00f9 facile da capire per gli altri sviluppatori.<\/p>\n<p>Inserendo il codice JS nella cartella <code>src<\/code>, potete utilizzare il comando <code>npm start<\/code> o <code>npm run start<\/code> per avviare un ambiente di sviluppo che monitora gli script e ricompila automaticamente il codice quando necessario. Una volta terminato lo sviluppo, il comando <code>npm build<\/code> o <code>npm run build<\/code> compiler\u00e0 il codice JavaScript nella cartella <code>build<\/code>, che conterr\u00e0 il codice ottimizzato per la produzione.<\/p>\n<p>Ora mettiamo in pratica ci\u00f2 che abbiamo imparato e modifichiamo il plugin che abbiamo creato nella sezione precedente per aggiungere un nuovo pannello alla barra laterale dell&#8217;editor dei post per gestire i campi personalizzati.<\/p>\n<h2>Come creare una barra laterale aggiuntiva per gestire i meta-campi dei post<\/h2>\n<p>Il nostro obiettivo \u00e8 quello di creare una barra laterale personalizzata che contenga un pannello con un singolo campo di testo per aggiungere e modificare un meta-campo personalizzato.<\/p>\n<p>Prima di procedere, \u00e8 bene ricordare che potremmo utilizzare un meta box personalizzato per ottenere lo stesso risultato. Con WordPress 6.7, i <a href=\"https:\/\/kinsta.com\/it\/blog\/wordpress-6-7\/#meta-boxes-in-the-post-editor\">meta box hanno ricevuto un aggiornamento<\/a> e sono ora pienamente compatibili con l&#8217;editor a blocchi, quindi potreste chiedervi perch\u00e9 gestire i meta field da una sidebar personalizzata invece che da un meta box. Il motivo \u00e8 che una sidebar permette di sfruttare i componenti integrati. Ci\u00f2 aiuta a costruire interfacce pi\u00f9 user friendly con controlli interessanti che dovrebbero essere familiari agli utenti.<\/p>\n<p>Detto questo, ecco la procedura per creare una barra laterale personalizzata che permette di gestire i campi personalizzati dall&#8217;editor.<\/p>\n<h3><code>my-sidebar-plugin.php<\/code><\/h3>\n<h4>Passo 1: Registrare i meta dei post<\/h4>\n<p>Per prima cosa, dobbiamo registrare il campo meta. Aggiungiamo il seguente codice al file principale del plugin:<\/p>\n<pre><code class=\"language-php\">function my_sidebar_plugin_register_meta() {\n\tregister_post_meta(\n\t\t'post',\n\t\t'meta_fields_book_title', \n\t\tarray(\n\t\t\t'show_in_rest' =&gt; true,\n\t\t\t'type' =&gt; 'string',\n\t\t\t'single' =&gt; true,\n\t\t\t'sanitize_callback' =&gt; 'sanitize_text_field',\n\t\t\t'label' =&gt; __( 'Book title', 'my-sidebar-plugin' ),\n\t\t\t'auth_callback' =&gt; function() { \n\t\t\t\treturn current_user_can( 'edit_posts' );\n\t\t\t}\n\t\t)\n\t);\n}\nadd_action( 'init', 'my_sidebar_plugin_register_meta' );<\/code><\/pre>\n<p>La funzione <code>register_post_meta<\/code> accetta tre argomenti:<\/p>\n<ul>\n<li>Il tipo di post per cui registrare una meta-chiave. Impostando una stringa vuota, la meta-chiave verr\u00e0 registrata in tutti i tipi di post esistenti.<\/li>\n<li>La meta-chiave da registrare. Non stiamo usando un trattino basso all&#8217;inizio della meta-chiave, poich\u00e9 il prefisso della meta-chiave con un trattino basso nasconderebbe il campo personalizzato, per cui potreste volerlo utilizzare in una meta-box. Tuttavia, nascondere il campo personalizzato impedirebbe l&#8217;utilizzo del campo meta tramite l&#8217;API Block Bindings nel contenuto del post.<\/li>\n<li>Un array di argomenti. \u00c8 necessario impostare <code>show_in_rest<\/code> su <code>true<\/code>. Questo espone il meta-campo all&#8217;API Rest e ci permette di legare il meta-campo agli attributi del blocco. Per gli altri attributi, consultate il <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_post_meta\/\" target=\"_blank\" rel=\"noopener noreferrer\">riferimento alla funzione<\/a>.<\/li>\n<\/ul>\n<h4>Passo 2: Registrare il meta-campo<\/h4>\n<p>Per garantire la retrocompatibilit\u00e0 del plugin, \u00e8 necessario registrare un meta box personalizzato per consentire agli utenti di gestire i campi personalizzati, anche se si utilizza l&#8217;editor classico. Aggiungiamo il seguente codice al file PHP del plugin:<\/p>\n<pre><code class=\"language-php\">\/**\n * Register meta box\n * \n * @link https:\/\/developer.wordpress.org\/reference\/functions\/add_meta_box\/\n * \n *\/\nfunction my_sidebar_plugin_register_meta_box(){\n\tadd_meta_box(\n\t\t'book_meta_box', \/\/ Unique ID\n\t\t__( 'Book details' ), \/\/ Box title\n\t\t'my_sidebar_plugin_meta_box_callback', \/\/ Content callback\n\t\tarray( 'post' ), \/\/ Post types\n\t\t'advanced', \/\/ context\n\t\t'default', \/\/ priority\n\t\tarray('__back_compat_meta_box' =&gt; true) \/\/ hide the meta box in Gutenberg\n\t );\n}\nadd_action( 'add_meta_boxes', 'my_sidebar_plugin_register_meta_box' );<\/code><\/pre>\n<p>Ora dichiariamo il callback che costruisce il modulo:<\/p>\n<pre><code class=\"language-php\">\/**\n * Build meta box form\n * \n * @link https:\/\/developer.wordpress.org\/reference\/functions\/wp_nonce_field\/\n * @link https:\/\/developer.wordpress.org\/reference\/functions\/get_post_meta\/\n * \n *\/\nfunction my_sidebar_plugin_meta_box_callback( $post ){\n\twp_nonce_field( 'my_sidebar_plugin_save_meta_box_data', 'my_sidebar_plugin_meta_box_nonce' );\n\t$title = get_post_meta( $post-&gt;ID, 'meta_fields_book_title', true );\n\t?&gt;\n\t&lt;div class=\"inside\"&gt;\n\t\t&lt;p&gt;&lt;strong&gt;&lt;?php echo __( 'Book title', 'my-sidebar-plugin' ); ?&gt;&lt;\/strong&gt;&lt;\/p&gt;\n\t\t&lt;p&gt;&lt;input type=\"text\" id=\"meta_fields_book_title\" name=\"meta_fields_book_title\" value=\"&lt;?php echo esc_attr( $title ); ?&gt;\" \/&gt;&lt;\/p&gt;\n\t&lt;\/div&gt;\n\t&lt;?php\n}<\/code><\/pre>\n<p>Successivamente, scriviamo la funzione per salvare i meta-campi nel database:<\/p>\n<pre><code class=\"language-php\">\/**\n * Save metadata\n * \n * @link https:\/\/developer.wordpress.org\/reference\/functions\/wp_verify_nonce\/\n * @link https:\/\/developer.wordpress.org\/reference\/functions\/current_user_can\/\n * @link https:\/\/developer.wordpress.org\/reference\/functions\/sanitize_text_field\/\n * @link https:\/\/developer.wordpress.org\/reference\/functions\/update_post_meta\/\n * \n *\/\nfunction my_sidebar_plugin_save_meta_box_data( $post_id ) {\n\tif ( ! isset( $_POST['my_sidebar_plugin_meta_box_nonce'] ) )\n\t\treturn;\n\tif ( ! wp_verify_nonce( $_POST['my_sidebar_plugin_meta_box_nonce'], 'my_sidebar_plugin_save_meta_box_data' ) )\n\t\treturn;\n\tif ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )\n\t\treturn;\n\tif ( ! current_user_can( 'edit_post', $post_id ) )\n\t\treturn;\n\tif ( ! isset( $_POST['meta_fields_book_title'] ) )\n\t\treturn;\n\n\t$title = sanitize_text_field( $_POST['meta_fields_book_title'] );\n\n\tupdate_post_meta( $post_id, 'meta_fields_book_title', $title );\n}\nadd_action( 'save_post', 'my_sidebar_plugin_save_meta_box_data' );<\/code><\/pre>\n<p>Non approfondiremo questo codice perch\u00e9 esula dagli scopi di questo articolo, ma potete trovare tutte le informazioni di cui avete bisogno seguendo i link nelle intestazioni delle funzioni.<\/p>\n<p>Per ultimo, dobbiamo inserire il file <code>index.js<\/code> del nostro plugin:<\/p>\n<pre><code class=\"language-php\">function my_sidebar_plugin_register_script() {\n\twp_enqueue_script(\n\t\t'my_sidebar_plugin_script',\n\t\tplugins_url( 'build\/index.js', __FILE__ ),\n\t\tarray( 'wp-plugins', 'wp-edit-post' ),\n\t\tfilemtime( plugin_dir_path( __FILE__ ) . 'build\/index.js' )\n\t);\n}\nadd_action( 'enqueue_block_editor_assets', 'my_sidebar_plugin_register_script' );<\/code><\/pre>\n<p>Questo \u00e8 tutto per quanto riguarda il file PHP. Successivamente, dobbiamo scrivere il codice JS.<\/p>\n<h3><code>index.js<\/code><\/h3>\n<p>L&#8217;<code>index.js<\/code> si trova nella cartella <code>src<\/code>, che \u00e8 il luogo in cui vengono memorizzati i file JS durante la fase di sviluppo.<\/p>\n<p>Apriamo <code>index.js<\/code> e aggiungiamo le seguenti <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Statements\/import\" target=\"_blank\" rel=\"noopener noreferrer\">dichiarazioni<code>import<\/code>:<\/a><\/p>\n<pre><code class=\"language-js\">import { __ } from '@wordpress\/i18n';\nimport { registerPlugin } from '@wordpress\/plugins';\nimport { PluginSidebar } from '@wordpress\/editor';\nimport { PanelBody, PanelRow, TextControl } from '@wordpress\/components';\nimport { useSelect } from '@wordpress\/data';\nimport { useEntityProp } from '@wordpress\/core-data';<\/code><\/pre>\n<p>Abbiamo bisogno di queste risorse per costruire la barra laterale con i controlli necessari.<\/p>\n<p>Successivamente, dobbiamo costruire il componente della barra laterale:<\/p>\n<pre><code class=\"language-js\">const MyPluginSidebar = () =&gt; {\n\tconst postType = useSelect(\n\t\t( select ) =&gt; select( 'core\/editor' ).getCurrentPostType(),\n\t\t[]\n\t);\n\tconst [ meta, setMeta ] = useEntityProp( 'postType', postType, 'meta' );\n\n\tconst bookTitle = meta ? meta[ 'meta_fields_book_title' ] : '';\n\n\tconst updateBookTitleMetaValue = ( newValue ) =&gt; {\n\t\tsetMeta( { ...meta, meta_fields_book_title: newValue } );\n\t};\n\n\tif ( postType === 'post' ) {\n\t\treturn (\n\t\t\t&lt;PluginSidebar\n\t\t\t\tname=\"my-sidebar-plugin\"\n\t\t\t\ticon=\"book\"\n\t\t\t\ttitle=\"My plugin sidebar\"\n\t\t\t&gt;\n\t\t\t\t&lt;PanelBody title=\"Book details\" initialOpen={ true }&gt;\n\t\t\t\t\t&lt;PanelRow&gt;\n\t\t\t\t\t\t&lt;TextControl \n\t\t\t\t\t\t\tvalue={ bookTitle }\n\t\t\t\t\t\t\tlabel={ __( \"Book title\" ) }\n\t\t\t\t\t\t\tonChange={ updateBookTitleMetaValue }\n\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\/&gt;\n\t\t\t\t\t&lt;\/PanelRow&gt;\n\t\t\t\t&lt;\/PanelBody&gt;\n\t\t\t&lt;\/PluginSidebar&gt;\n\t\t);\n\t}\n};\n\nregisterPlugin( 'my-sidebar-plugin', {\n\trender: MyPluginSidebar,\n} );<\/code><\/pre>\n<p>La funzione <code>registerPlugin<\/code> registra il plugin e crea il componente chiamato <code>MyPluginSidebar<\/code>.<\/p>\n<p>La funzione <code>MyPluginSidebar<\/code> dichiara alcune costanti e restituisce il codice JSX del componente.<\/p>\n<ul>\n<li><code>useSelect<\/code> \u00e8 un hook personalizzato per recuperare i prop dai selettori registrati. Lo abbiamo utilizzato per ottenere il tipo di post corrente. Date un&#8217;occhiata anche a <a href=\"https:\/\/developer.wordpress.org\/news\/2024\/03\/how-to-work-effectively-with-the-useselect-hook\/\" target=\"_blank\" rel=\"noopener noreferrer\">questo post del blog<\/a> degli sviluppatori di WordPress.<\/li>\n<li><code>useEntityProp<\/code> restituisce un array di campi meta e una funzione setter per impostare nuovi valori meta. Consultate anche il <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/packages\/packages-core-data\/#useentityprop\" target=\"_blank\" rel=\"noopener noreferrer\">riferimento online<\/a>.<\/li>\n<li><code>updateBookTitleMetaValue<\/code> \u00e8 un gestore di eventi che salva il valore del campo meta <code>bookTitle<\/code>.<\/li>\n<\/ul>\n<p>Abbiamo utilizzato alcuni componenti integrati per costruire la nostra barra laterale:<\/p>\n<ul>\n<li><code>PluginSidebar<\/code> permette di aggiungere elementi alla barra degli strumenti delle schermate dell&#8217;editor del Post o del Sito. (Ecco il <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/slotfills\/plugin-sidebar\/\" target=\"_blank\" rel=\"noopener noreferrer\">riferimento del componente<\/a>).<\/li>\n<li><code>PanelBody<\/code> crea un contenitore pieghevole che pu\u00f2 essere aperto o chiuso. (Ecco il <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/components\/panel\/\" target=\"_blank\" rel=\"noopener noreferrer\">riferimento del componente<\/a>).<\/li>\n<li><code>PanelRow<\/code> \u00e8 un contenitore generico per le righe di un sito <code>PanelBody<\/code>. (Ecco il <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/components\/panel\/\" target=\"_blank\" rel=\"noopener noreferrer\">riferimento del componente<\/a>).<\/li>\n<li><code>TextControl<\/code> \u00e8 un campo a riga singola che pu\u00f2 essere utilizzato per l&#8217;inserimento di testo libero. (Ecco il <a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/components\/text-control\/\" target=\"_blank\" rel=\"noopener noreferrer\">riferimento del componente<\/a>).<\/li>\n<\/ul>\n<p>Ora eseguiamo il comando <code>npm run build<\/code>, attiviamo il plugin e creiamo un nuovo post. Nella barra laterale superiore dovrebbe apparire l&#8217;icona di un nuovo libro. Cliccando su questa icona, il plugin mostrer\u00e0 la sua barra laterale.<\/p>\n<figure id=\"attachment_190019\" aria-describedby=\"caption-attachment-190019\" style=\"width: 1976px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-190019\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/01\/plugin-sidebar.png\" alt=\"Una barra laterale personalizzata con un campo meta\" width=\"1976\" height=\"558\"><figcaption id=\"caption-attachment-190019\" class=\"wp-caption-text\">Una barra laterale personalizzata con un campo meta<\/figcaption><\/figure>\n<p>E se non avete bisogno di una nuova barra laterale ma volete visualizzare il vostro campo personalizzato nella barra laterale integrata del post? Basta sostituire <code>PluginSidebar<\/code> con <code>PluginDocumentSettingPanel<\/code>. Questo sar\u00e0 il vostro nuovo file <code>index.js<\/code>:<\/p>\n<pre><code class=\"language-js\">import { __ } from '@wordpress\/i18n';\nimport { registerPlugin } from '@wordpress\/plugins';\nimport { PluginDocumentSettingPanel } from '@wordpress\/edit-post';\nimport { PanelBody, PanelRow, TextControl } from '@wordpress\/components';\n\nimport { useSelect } from '@wordpress\/data';\nimport { useEntityProp } from '@wordpress\/core-data';\n\nconst MyPluginSidebar = () =&gt; {\n\tconst postType = useSelect(\n\t\t( select ) =&gt; select( 'core\/editor' ).getCurrentPostType(),\n\t\t[]\n\t);\n\tconst [ meta, setMeta ] = useEntityProp( 'postType', postType, 'meta' );\n\n\tconst bookTitle = meta ? meta[ 'meta_fields_book_title' ] : '';\n\n\tconst updateBookTitleMetaValue = ( newValue ) =&gt; {\n\t\tsetMeta( { ...meta, meta_fields_book_title: newValue } );\n\t};\n\n\tif ( postType === 'post' ) {\n\t\treturn (\n\t\t\t&lt;PluginDocumentSettingPanel \n\t\t\t\tname=\"my-sidebar-plugin\"\n\t\t\t\ttitle=\"Book details\" \n\t\t\t\tclassName=\"my-sidebar-plugin\"\n\t\t\t&gt;\n\t\t\t\t&lt;PanelRow&gt;\n\t\t\t\t\t&lt;TextControl \n\t\t\t\t\t\tvalue={ bookTitle }\n\t\t\t\t\t\tlabel={ __( \"Book title\" ) }\n\t\t\t\t\t\tonChange={ updateBookTitleMetaValue }\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\/&gt;\n\t\t\t\t&lt;\/PanelRow&gt;\n\t\t\t&lt;\/PluginDocumentSettingPanel&gt;\n\t\t);\n\t}\n};\n\nregisterPlugin( 'my-sidebar-plugin', {\n\trender: MyPluginSidebar,\n} );<\/code><\/pre>\n<p>L&#8217;immagine seguente mostra il risultato.<\/p>\n<figure id=\"attachment_190023\" aria-describedby=\"caption-attachment-190023\" style=\"width: 1914px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-190023\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/01\/default-sidebar-panel.png\" alt=\"Un pannello di impostazioni personalizzate nella barra laterale dei post\" width=\"1914\" height=\"1418\"><figcaption id=\"caption-attachment-190023\" class=\"wp-caption-text\">Un pannello di impostazioni personalizzate nella barra laterale dei post<\/figcaption><\/figure>\n<h2>Un caso d&#8217;uso: la sovrascrittura di un block pattern per automatizzare il flusso di lavoro<\/h2>\n<p>Ora potete aggiungere un valore per il campo personalizzato, che sar\u00e0 disponibile attraverso l&#8217;API Block Bindings per essere utilizzato con gli attributi del blocco. Ad esempio, potete aggiungere un blocco Paragrafo al vostro contenuto e associare il campo personalizzato all&#8217;attributo <code>content<\/code> del paragrafo.<\/p>\n<figure id=\"attachment_190026\" aria-describedby=\"caption-attachment-190026\" style=\"width: 1912px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-190026\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/01\/block-attributes.png\" alt=\"Associare i campi meta agli attributi dei blocchi\" width=\"1912\" height=\"1420\"><figcaption id=\"caption-attachment-190026\" class=\"wp-caption-text\">Associare i campi meta agli attributi dei blocchi<\/figcaption><\/figure>\n<p>Modificando il valore del vostro campo personalizzato, le modifiche verranno applicate automaticamente al contenuto del paragrafo.<\/p>\n<p>Se vi state chiedendo se c&#8217;\u00e8 altro che potete fare con i campi personalizzati e Block Bindings, la risposta \u00e8 s\u00ec! I block pattern e l&#8217;API Block Bindings permettono di automatizzare l&#8217;intero processo di creazione dei contenuti.<\/p>\n<p>Per averne un&#8217;idea, create un pattern con almeno un titolo o un paragrafo. In questo esempio, creiamo un block pattern con un blocco Colonne, un&#8217;immagine, un titolo e un paio di blocchi Riga, ciascuno con due paragrafi.<\/p>\n<figure id=\"attachment_190040\" aria-describedby=\"caption-attachment-190040\" style=\"width: 2116px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-190040\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/01\/building-a-pattern.png\" alt=\"Un blocco Colonne con un'immagine, un titolo e due righe\" width=\"2116\" height=\"1076\"><figcaption id=\"caption-attachment-190040\" class=\"wp-caption-text\">Un blocco Colonne con un&#8217;immagine, un titolo e due righe<\/figcaption><\/figure>\n<p>Una volta soddisfatti del vostro layout, selezionate gli elementi che lo compongono e create un pattern sincronizzato.<\/p>\n<figure id=\"attachment_190035\" aria-describedby=\"caption-attachment-190035\" style=\"width: 1334px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-190035\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/01\/create-pattern.png\" alt=\"Creare un pattern\" width=\"1334\" height=\"1184\"><figcaption id=\"caption-attachment-190035\" class=\"wp-caption-text\">Creare un pattern<\/figcaption><\/figure>\n<p>Aggiungete un nome e una categoria per il block pattern e assicuratevi di sincronizzarlo.<\/p>\n<figure id=\"attachment_190041\" aria-describedby=\"caption-attachment-190041\" style=\"width: 1386px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-190041\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/01\/add-new-pattern.png\" alt=\"Aggiungere un nuovo pattern\" width=\"1386\" height=\"994\"><figcaption id=\"caption-attachment-190041\" class=\"wp-caption-text\">Aggiungere un nuovo pattern<\/figcaption><\/figure>\n<p>Successivamente, se avete creato il pattern nell&#8217;editor del Post, selezionatelo e cliccate su <strong>Modifica originale<\/strong> nella barra degli strumenti del blocco. Potete anche andare nella sezione <strong>Pattern<\/strong> dell&#8217;editor del sito e individuare il pattern nella sezione <strong>I miei pattern<\/strong> o nella categoria di pattern che avete impostato in precedenza.<\/p>\n<p>Aprite l&#8217;Editor del Codice e individuate il blocco che volete associare al campo personalizzato. Nel delimitatore del blocco, aggiungete il seguente codice:<\/p>\n<pre><code class=\"language-json\">&lt;!-- wp:heading {\n\t\"metadata\":{\n\t\t\"bindings\":{\n\t\t\t\"content\":{\n\t\t\t\t\"source\":\"core\/post-meta\",\n\t\t\t\t\"args\":{\n\t\t\t\t\t\"key\":\"meta_fields_book_title\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} --&gt;<\/code><\/pre>\n<figure id=\"attachment_190042\" aria-describedby=\"caption-attachment-190042\" style=\"width: 1594px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-190042\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/01\/block-pattern-in-code-editor.png\" alt=\"Il block pattern nell'editor del codice\" width=\"1594\" height=\"1258\"><figcaption id=\"caption-attachment-190042\" class=\"wp-caption-text\">Il block pattern nell&#8217;editor del codice<\/figcaption><\/figure>\n<p>Salvate il pattern e create un nuovo post. Aggiungete il pattern al contenuto e impostate un valore per il campo personalizzato. Dovreste vedere il valore applicato automaticamente al vostro pattern.<\/p>\n<figure id=\"attachment_190044\" aria-describedby=\"caption-attachment-190044\" style=\"width: 2120px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-190044\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2025\/01\/bound-blocks-in-a-synced-block-pattern.png\" alt=\"Un titolo associato in un pattern sincronizzato\" width=\"2120\" height=\"1226\"><figcaption id=\"caption-attachment-190044\" class=\"wp-caption-text\">Un titolo associato in un pattern sincronizzato<\/figcaption><\/figure>\n<p>A questo punto, divertitevi pure a fare qualche esperimento con questo plugin. Grazie ai campi personalizzati e all&#8217;API Block Bindings, potrete aggiungere altri campi e controlli per popolare automaticamente i layout.<\/p>\n<h2>Riepilogo<\/h2>\n<p>Sviluppare un blocco personalizzato pu\u00f2 essere impegnativo. Ma \u00e8 davvero necessario costruire un blocco quando potreste fare molto di pi\u00f9 con un pattern di blocco?<\/p>\n<p>Con i progressi dei block patterns e l&#8217;introduzione di potenti funzioni per gli sviluppatori, come l&#8217;API Block Bindings, non \u00e8 pi\u00f9 necessario creare blocchi personalizzati per creare siti web sofisticati e funzionali. Un semplice plugin e un pattern di blocco possono automatizzare efficacemente una parte significativa del vostro flusso di lavoro.<\/p>\n<p>Questo tutorial ha dimostrato come aggiungere funzionalit\u00e0 all&#8217;editor dei post di WordPress attraverso un plugin. Tuttavia, ci\u00f2 che abbiamo trattato in questo post scalfisce solo la superficie di ci\u00f2 che \u00e8 possibile realizzare con le solide funzionalit\u00e0 che offre WordPress.<\/p>\n<p>Avete gi\u00e0 esplorato queste caratteristiche e aggiunto funzionalit\u00e0 all&#8217;editor di WordPress? Se s\u00ec, non esitate a condividere le vostre esperienze e le vostre intuizioni nella sezione commenti qui sotto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nel corso degli anni abbiamo esplorato Gutenberg da molti punti di vista. Abbiamo analizzato le funzionalit\u00e0 dell&#8217;editor, le abbiamo confrontate con quelle di altri page builder, &#8230;<\/p>\n","protected":false},"author":36,"featured_media":80204,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[25992,25873],"class_list":["post-80203","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-suggerimenti-tecnici","topic-sviluppo-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Come costruire un plugin Gutenberg per estendere le funzionalit\u00e0 dell&#039;editor<\/title>\n<meta name=\"description\" content=\"Scopri come creare pi\u00f9 facilmente layout complessi costruendo un plugin Gutenberg per migliorare le funzionalit\u00e0 dell&#039;editor a blocchi.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Come costruire un plugin Gutenberg per aggiungere funzionalit\u00e0 all&#039;editor a blocchi\" \/>\n<meta property=\"og:description\" content=\"Scopri come creare pi\u00f9 facilmente layout complessi costruendo un plugin Gutenberg per migliorare le funzionalit\u00e0 dell&#039;editor a blocchi.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-20T08:21:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-20T11:24:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2025\/01\/how-to-build-a-gutenberg-plugin-to-add-functionality-to-the-block-editor.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1470\" \/>\n\t<meta property=\"og:image:height\" content=\"735\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Carlo Daniele\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Scopri come creare pi\u00f9 facilmente layout complessi costruendo un plugin Gutenberg per migliorare le funzionalit\u00e0 dell&#039;editor a blocchi.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2025\/01\/how-to-build-a-gutenberg-plugin-to-add-functionality-to-the-block-editor-1024x512.png\" \/>\n<meta name=\"twitter:creator\" content=\"@carlodaniele\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlo Daniele\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/\"},\"author\":{\"name\":\"Carlo Daniele\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\"},\"headline\":\"Come costruire un plugin Gutenberg per aggiungere funzionalit\u00e0 all&#8217;editor a blocchi\",\"datePublished\":\"2025-01-20T08:21:00+00:00\",\"dateModified\":\"2025-01-20T11:24:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/\"},\"wordCount\":2163,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2025\/01\/how-to-build-a-gutenberg-plugin-to-add-functionality-to-the-block-editor.png\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/\",\"name\":\"Come costruire un plugin Gutenberg per estendere le funzionalit\u00e0 dell'editor\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2025\/01\/how-to-build-a-gutenberg-plugin-to-add-functionality-to-the-block-editor.png\",\"datePublished\":\"2025-01-20T08:21:00+00:00\",\"dateModified\":\"2025-01-20T11:24:34+00:00\",\"description\":\"Scopri come creare pi\u00f9 facilmente layout complessi costruendo un plugin Gutenberg per migliorare le funzionalit\u00e0 dell'editor a blocchi.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2025\/01\/how-to-build-a-gutenberg-plugin-to-add-functionality-to-the-block-editor.png\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2025\/01\/how-to-build-a-gutenberg-plugin-to-add-functionality-to-the-block-editor.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sviluppo di WordPress\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/sviluppo-wordpress\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Come costruire un plugin Gutenberg per aggiungere funzionalit\u00e0 all&#8217;editor a blocchi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63\",\"name\":\"Carlo Daniele\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g\",\"caption\":\"Carlo Daniele\"},\"description\":\"Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.\",\"sameAs\":[\"https:\/\/frammentidicodice.com\/\",\"https:\/\/x.com\/carlodaniele\"],\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/carlodaniele\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Come costruire un plugin Gutenberg per estendere le funzionalit\u00e0 dell'editor","description":"Scopri come creare pi\u00f9 facilmente layout complessi costruendo un plugin Gutenberg per migliorare le funzionalit\u00e0 dell'editor a blocchi.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/","og_locale":"it_IT","og_type":"article","og_title":"Come costruire un plugin Gutenberg per aggiungere funzionalit\u00e0 all'editor a blocchi","og_description":"Scopri come creare pi\u00f9 facilmente layout complessi costruendo un plugin Gutenberg per migliorare le funzionalit\u00e0 dell'editor a blocchi.","og_url":"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2025-01-20T08:21:00+00:00","article_modified_time":"2025-01-20T11:24:34+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2025\/01\/how-to-build-a-gutenberg-plugin-to-add-functionality-to-the-block-editor.png","type":"image\/png"}],"author":"Carlo Daniele","twitter_card":"summary_large_image","twitter_description":"Scopri come creare pi\u00f9 facilmente layout complessi costruendo un plugin Gutenberg per migliorare le funzionalit\u00e0 dell'editor a blocchi.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2025\/01\/how-to-build-a-gutenberg-plugin-to-add-functionality-to-the-block-editor-1024x512.png","twitter_creator":"@carlodaniele","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Carlo Daniele","Tempo di lettura stimato":"18 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/"},"author":{"name":"Carlo Daniele","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63"},"headline":"Come costruire un plugin Gutenberg per aggiungere funzionalit\u00e0 all&#8217;editor a blocchi","datePublished":"2025-01-20T08:21:00+00:00","dateModified":"2025-01-20T11:24:34+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/"},"wordCount":2163,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2025\/01\/how-to-build-a-gutenberg-plugin-to-add-functionality-to-the-block-editor.png","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/","url":"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/","name":"Come costruire un plugin Gutenberg per estendere le funzionalit\u00e0 dell'editor","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2025\/01\/how-to-build-a-gutenberg-plugin-to-add-functionality-to-the-block-editor.png","datePublished":"2025-01-20T08:21:00+00:00","dateModified":"2025-01-20T11:24:34+00:00","description":"Scopri come creare pi\u00f9 facilmente layout complessi costruendo un plugin Gutenberg per migliorare le funzionalit\u00e0 dell'editor a blocchi.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2025\/01\/how-to-build-a-gutenberg-plugin-to-add-functionality-to-the-block-editor.png","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2025\/01\/how-to-build-a-gutenberg-plugin-to-add-functionality-to-the-block-editor.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/plugin-gutenberg\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Sviluppo di WordPress","item":"https:\/\/kinsta.com\/it\/argomenti\/sviluppo-wordpress\/"},{"@type":"ListItem","position":3,"name":"Come costruire un plugin Gutenberg per aggiungere funzionalit\u00e0 all&#8217;editor a blocchi"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/962dde02ea6f5df089b5d8d0853bbc63","name":"Carlo Daniele","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/429e5568f88110fd9a409b84cb22197e?s=96&d=mm&r=g","caption":"Carlo Daniele"},"description":"Carlo is a passionate lover of webdesign and front-end development. He has been playing with WordPress for more than 20 years, also in collaboration with Italian and European universities and educational institutions. He has written hundreds of articles and guides about WordPress, published both on Italian and international websites, as well as on printed magazines. You can find him on LinkedIn.","sameAs":["https:\/\/frammentidicodice.com\/","https:\/\/x.com\/carlodaniele"],"url":"https:\/\/kinsta.com\/it\/blog\/author\/carlodaniele\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/80203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=80203"}],"version-history":[{"count":5,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/80203\/revisions"}],"predecessor-version":[{"id":80209,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/80203\/revisions\/80209"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/80203\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/80203\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/80203\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/80203\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/80203\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/80203\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/80203\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/80203\/translations\/es"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/80203\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/80204"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=80203"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=80203"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=80203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}