{"id":234013,"date":"2023-02-27T13:22:00","date_gmt":"2023-02-27T10:22:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234013"},"modified":"2022-11-11T13:53:13","modified_gmt":"2022-11-11T10:53:13","slug":"crea-un-blocco-gutenberg-personalizzato-parte-4-attributi","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/crea-un-blocco-gutenberg-personalizzato-parte-4-attributi\/","title":{"rendered":"Crea un blocco Gutenberg personalizzato &#8211; Parte 4: Attributi"},"content":{"rendered":"\n<p>In questa parte vedremo come definire gli attributi, recuperare i loro valori e aggiornarli. Con gli attributi possiamo accettare l&#8217;input dall&#8217;editor, salvarlo ed emetterlo come vogliamo. Nel <a href=\"https:\/\/awhitepixel.com\/blog\/wordpress-gutenberg-create-custom-blocks-part-3-props-wordpress-components\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">passaggio precedente<\/a> abbiamo esaminato i componenti di WordPress, dove trovarli e come implementarli. In questo post aggiungeremo gli oggetti di scena per effettuare la connessione agli attributi: i dati salvati.<\/p>\n<h2>Definizione degli attributi<\/h2>\n<p>Gli attributi vengono aggiunti come oggetti in una matrice alla <code>attributes<\/code>propriet\u00e0 in <code>registerBlockType()<\/code>. La chiave di ogni attributo \u00e8 il nome dell&#8217;attributo e devi avere almeno la propriet\u00e0 <code>type<\/code>.<\/p>\n<p>La <code>type<\/code>propriet\u00e0 pu\u00f2 essere una delle seguenti; <code>null<\/code>, <code>boolean<\/code>, <code>object<\/code>, <code>array<\/code>, <code>number<\/code>, <code>string<\/code>, o <code>integer<\/code>.<\/p>\n<p>Puoi facoltativamente fornire la propriet\u00e0 <code>default<\/code>per definire il valore iniziale del tuo attributo. Se non fornisci un valore predefinito, l&#8217;attributo verr\u00e0 impostato automaticamente su <code>null<\/code>.<\/p>\n<p>Un&#8217;altra propriet\u00e0 dell&#8217;attributo \u00e8 <code>source<\/code>che funziona insieme alla <code>selector<\/code>propriet\u00e0, ma queste sono cose delicate che esamineremo in dettaglio pi\u00f9 in basso.<\/p>\n<p>Ad esempio, definendo due attributi; <code>exampleText<\/code>come stringa e <code>postIds<\/code>come array, sarebbe simile a questo:<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\nregisterBlockType('awp\/firstblock', {\n    title: 'My first block',\n    category: 'common',\n    attributes: {\n        exampleText: {\n            type: 'string',\n            default: ''\n        },\n        postIds: {\n            type: 'array'\n            default: []\n        }\n    },\n    edit: (props) =&gt; { \n    ...<\/code><\/pre>\n<p><strong>Tutto ci\u00f2 di cui hai bisogno salvato per il tuo blocco (input dall&#8217;utente\/editor) richiede un attributo<\/strong>. Sta a te decidere come strutturare i tuoi dati, definendo attributi separati per ciascuno o raggruppandoli tutti in un oggetto. Sar\u00e0 solo una differenza nel modo in cui recuperi i loro dati e come li aggiorni.<\/p>\n<h2>Ottenere i valori degli attributi<\/h2>\n<p>Gli attributi sono disponibili come supporto per i blocchi <code>edit<\/code>e le <code>save<\/code>funzioni. Se hai seguito questa serie dal <a href=\"https:\/\/awhitepixel.com\/blog\/wordpress-gutenberg-create-custom-blocks-part-3-props-wordpress-components\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">passaggio precedente<\/a>, ricorda che abbiamo aggiornato le funzioni per passare props come parametro.<\/p>\n<p>\u00c8 comune <strong>destrutturare<\/strong> gli attributi dagli oggetti di scena poich\u00e9 di solito ti riferisci spesso a loro. Ad esempio, l&#8217;output di un attributo chiamato <code>exampleText<\/code>sarebbe simile a questo:<\/p>\n<pre><code>edit: (props) =&gt; { \n    const { attributes } = props;\n    return &lt;div&gt;{attributes.exampleText}&lt;\/div&gt;\n},<\/code><\/pre>\n<h2>Aggiornamento dei valori degli attributi<\/h2>\n<p>Per aggiornare gli attributi abbiamo un metodo disponibile in props, chiamato <code>setAttributes()<\/code>. Questa funzione accetta un oggetto in cui puoi aggiungere qualsiasi attributo che desideri aggiornare. Puoi aggiornare solo un attributo, pi\u00f9 o tutti in una volta. Se sono stati definiti pi\u00f9 attributi e si chiama <code>setAttributes()<\/code>per aggiornarne solo uno, gli altri non vengono toccati.<\/p>\n<p>Se hai esperienza con React, probabilmente riconoscerai immediatamente le somiglianze tra <code>setAttributes()<\/code>e <code>setState()<\/code>. Funzionano esattamente allo stesso modo, ma la differenza \u00e8 che lo stato in React \u00e8 solo qualcosa memorizzato localmente in quel componente e gli attributi vengono effettivamente salvati come dati all&#8217;esterno del componente.<\/p>\n<p>Per aggiornare un attributo, di solito distruggi la funzione dagli oggetti di scena e la chiami in questo modo: Di seguito aggiorniamo <code>exampleText<\/code>l&#8217;attributo in modo che sia &quot;Ciao&quot;.<\/p>\n<pre><code>const { setAttributes } = props;\nsetAttributes({ exampleText: 'Hi' });<\/code><\/pre>\n<p>Naturalmente eseguiresti <code>setAttributes()<\/code>dall&#8217;interno di qualche azione. Un esempio comune \u00e8 all&#8217;interno del <code>onChange<\/code>prop su una sorta di campo di input utilizzato per memorizzare il valore <code>exampleText<\/code>dell&#8217;attributo.<\/p>\n<p>Assicurati di salvare gli attributi nel tipo che hai definito nell&#8217;attributo. Ad esempio, non avrai fortuna a provare a salvare oggetti in un attributo di stringa.<\/p>\n<p>Proviamolo in pratica! Inizia <code>npm run start<\/code>se non l&#8217;hai gi\u00e0 fatto.<\/p>\n<h2>Visualizzazione di un attributo in un input di testo personalizzato e aggiornamento del valore dell&#8217;attributo<\/h2>\n<p>Nel passaggio precedente abbiamo aggiunto alcuni componenti in <code>edit<\/code>, ad esempio un input di testo, ma non \u00e8 stato memorizzato nulla. Aggiungiamo un attributo e un input di testo per esso nel nostro blocco. Ci assicureremo entrambi che l&#8217;input di testo mostri il valore corrente e ogni volta che l&#8217;input viene modificato aggiorniamo l&#8217;attributo.<\/p>\n<h3>Aggiunta dell&#8217;input di testo e del suo <code>onChange<\/code>prop<\/h3>\n<pre><code>const { registerBlockType } = wp.blocks;\nconst { TextControl } = wp.components;\n\u00a0\nregisterBlockType('awp\/firstblock', {\n    title: 'My first block',\n    category: 'common',\n    attributes: {\n        exampleText: {\n            type: 'string',\n            default: ''\n        }\n    },\n    edit: (props) =&gt; { \n        const { attributes, setAttributes } = props;\n        return (&lt;div&gt;\n                &lt;TextControl \n                    value={attributes.exampleText}\n                    onChange={(newtext) =&gt; setAttributes({ exampleText: newtext })}\n                \/&gt; \n            &lt;\/div&gt;\n        );\n    },\n    save:() =&gt; { \n        return &lt;div&gt;:)&lt;\/div&gt; \n    }\n});<\/code><\/pre>\n<p>Destrutturiamo <code>attributes<\/code>e <code>setAttributes<\/code>da <code>props<\/code>come useremo entrambi. Quindi utilizziamo un componente dal pacchetto <code>TextControl<\/code>di WordPress. <code>wp.components<\/code>Gli passiamo due puntelli; <code>value<\/code>imposter\u00e0 il valore dell&#8217;input (sia inizialmente che durante la digitazione) e un&#8217;azione sull&#8217;evento dell&#8217;input <code>onChange<\/code>.<\/p>\n<p>In <code>value<\/code>lo impostiamo sul valore del nostro attributo; <code>attributes.exampleText<\/code>. Nel <code>onChange<\/code>caso in cui eseguiamo una funzione, passando il valore digitato del nostro input come parametro, <code>newtext<\/code>(il valore di input \u00e8 un prop che viene restituito dal componente). In quella funzione chiamiamo <code>setAttributes()<\/code>e aggiorniamo l&#8217;attributo <code>exampleText<\/code>a ci\u00f2 che \u00e8 stato digitato nell&#8217;input.<\/p>\n<p>Questo \u00e8 React di base, a parte il fatto che lavoriamo con gli attributi e non con lo stato. Se quanto sopra ti ha confuso, ti consiglio di guardare un breve tutorial in React, poich\u00e9 questi probabilmente spiegheranno in questo modo meglio di me!<\/p>\n<p>Aggiorna il tuo editor e guarda come funziona il blocco! Dovresti ottenere un input di testo standard per digitare le cose e verr\u00e0 salvato ogni volta che premi Salva\/Aggiorna nella modifica del post.<\/p>\n<h3>Il risultato nel frontend e nel database<\/h3>\n<p>Se visualizzi il tuo post nel frontend, dovrebbe comunque fare eco a un div con &quot;:)&quot; perch\u00e9 \u00e8 quello che abbiamo ancora nella nostra <code>save<\/code>funzione. Ma qualcosa \u00e8 successo dietro le quinte! Il blocco dei commenti del nostro blocco ora contiene il valore del nostro attributo in JSON.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151357-61e4ca89cf1d2.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-151357-61e4ca89cf1d2.png\" alt=\"Crea un blocco Gutenberg personalizzato - Parte 4: Attributi\" ><\/a><\/p>\n<p>Non puoi vedere i blocchi di commenti in un modello che esegue una <code>the_content()<\/code>chiamata normale. Per vedere i blocchi di commenti hai due opzioni. O guarda <code>post_content<\/code>nella tabella del database dei post. Oppure aggiungi <code>echo get_the_content()<\/code>il modello e guardalo nello strumento Ispeziona\/debug.<\/p>\n<p>Ovviamente abbiamo accesso anche agli attributi <code>save<\/code>, dagli oggetti di scena.<\/p>\n<h3>Visualizzazione del valore dell&#8217;input in<code>save<\/code><\/h3>\n<p>Mostriamo il valore dell&#8217;attributo all&#8217;interno di un div nella nostra <code>save<\/code>funzione:<\/p>\n<pre><code>save: (props) =&gt; { \n    const { attributes } = props;\n    return &lt;div&gt;{attributes.exampleText}&lt;\/div&gt;\n}<\/code><\/pre>\n<p>Nota: dopo aver apportato questa modifica, riceverai un blocco rotto nel post a cui hai gi\u00e0 aggiunto questo blocco. Ci\u00f2 accade perch\u00e9 l&#8217;editor incontra un output diverso <code>save<\/code>da quello che abbiamo definito ora. Rimuovere il blocco e aggiungerlo nuovamente. Inserisci qualcosa nel tuo input di testo, aggiorna il post e visualizzalo nel frontend.<\/p>\n<p>E questo \u00e8 il succo della cosa in realt\u00e0. Decidi tu quali attributi ti servono per salvare ci\u00f2 che vuoi nel tuo blocco. In <code>edit<\/code>verr\u00e0 eseguito il rendering dei modi per l&#8217;immissione dell&#8217;utente, facendo attenzione che i valori correnti vengano visualizzati e aggiornandoli ogni volta che cambiano. E in <code>save<\/code>estrai gli attributi salvati e esegui il rendering dell&#8217;output come desideri.<\/p>\n<p>Toccheremo componenti e attributi molto pi\u00f9 diversi mentre andiamo in questa serie di tutorial. Ma diamo un&#8217;occhiata a un altro componente in questo post per vedere di cosa tratta la propriet\u00e0 dell&#8217;attributo <code>source<\/code>.<\/p>\n<h2>RichText e la propriet\u00e0 dell&#8217;attributo<code>source<\/code><\/h2>\n<p>Il componente di WordPress <code>RichText<\/code>ti offre un&#8217;area di testo &quot;senza bordi&quot; con supporto per la formattazione del testo. Potresti preferire usare questo invece di un (brutto?) input di testo standard o textarea. Ma tieni presente che <code>RichText<\/code>deve essere gestito in modo leggermente diverso poich\u00e9 ci sono diversi oggetti di cui devi essere consapevole e c&#8217;\u00e8 una differenza nel modo in cui otteniamo il valore nella nostra <code>save<\/code>funzione.<\/p>\n<h3>Aggiunta di un <code>RichText<\/code>componente<\/h3>\n<p>La forma pi\u00f9 semplice <code>RichText<\/code>\u00e8 implementarlo come faresti con un input di testo:<\/p>\n<pre><code>const { registerBlockType } = wp.blocks;\nconst { RichText } = wp.blockEditor;\n\u00a0\nregisterBlockType('awp\/firstblock', {\n    ...\n    attributes: {\n        myRichText: {\n            type: 'string',\n            default: ''\n        }\n    },\n    edit: (props) =&gt; { \n        const { attributes, setAttributes } = props;\n        return (&lt;div&gt;\n                &lt;RichText \n                    value={attributes.myRichText}\n                    onChange={(newtext) =&gt; setAttributes({ myRichText: newtext })}\n                \/&gt; \n            &lt;\/div&gt;\n        );\n    },\n    ...<\/code><\/pre>\n<p>Destrutturiamo il <code>RichText<\/code>componente dal <code>wp.blockEditor<\/code>pacchetto, ma per il resto quanto sopra \u00e8 identico a quello che abbiamo fatto con l&#8217;input di testo standard.<\/p>\n<h3>Gestire <code>save<\/code>con<code>RichText<\/code><\/h3>\n<p>Tuttavia nella <code>save<\/code>funzione \u00e8 necessario utilizzare <code>RichText<\/code>nuovamente il componente per ottenere il valore dell&#8217;attributo. Chiamiamo <code>RichText.Content<\/code>e impostiamo l&#8217;elica <code>value<\/code>sul nostro attributo:<\/p>\n<pre><code>save: (props) =&gt; { \n    const { attributes } = props;\n    return (&lt;div&gt;\n            &lt;RichText.Content \n                value={attributes.myRichText}\n            \/&gt;\n        &lt;\/div&gt;\n    );\n}<\/code><\/pre>\n<p>Questo produrr\u00e0 tutto ci\u00f2 che \u00e8 stato digitato <code>RichText<\/code>nell&#8217;editor direttamente senza alcun HTML avvolto.<\/p>\n<p>Quando lavori con <code>RichText<\/code>te molto probabilmente vuoi controllare il wrapper HTML attorno al testo, ad esempio a <code>&lt;p&gt;<\/code>o a <code>&lt;h2&gt;<\/code>, sia nel frontend che nell&#8217;editor. Per questo possiamo usare un oggetto chiamato <code>tagName<\/code>.<\/p>\n<p>Il componente <code>RichText<\/code>consente anche molti altri oggetti di scena. Puoi definire un testo segnaposto che viene mostrato (sbiadito) quando \u00e8 vuoto con l&#8217; <code>placeholder<\/code>elica. Il componente consente inoltre di controllare quali opzioni di formattazione consente il campo (quali pulsanti mostra nella barra degli strumenti).<\/p>\n<h3><code>RichText<\/code>insieme a<code>tagName<\/code><\/h3>\n<p>Con il prop <code>tagName<\/code>puoi predefinire in quale tag HTML viene racchiuso il suo output. Quando lo usi <code>tagName<\/code>dovresti usare lo stesso <code>tagName<\/code>prop e lo stesso valore in entrambi <code>edit<\/code>e <code>save<\/code>.<\/p>\n<p>Supponiamo di voler inserire il valore del tuo attributo in a <code>&lt;h2&gt;<\/code>, che nell&#8217;editor forzer\u00e0 qualsiasi input a essere un h2. In <code>edit<\/code>puoi fare:<\/p>\n<pre><code>&lt;RichText \n    tagName=\"h2\"\n    placeholder=\"Write your heading here\"\n    value={attributes.myRichText}\n    onChange={(newtext) =&gt; setAttributes({ myRichText: newtext })}\n\/&gt;<\/code><\/pre>\n<p>E in <code>save<\/code>:<\/p>\n<pre><code>&lt;RichText.Content \n    tagName=\"h2\"\n    value={attributes.myRichText}\n\/&gt;<\/code><\/pre>\n<p>Quanto sopra ora produrr\u00e0 tutto ci\u00f2 che \u00e8 stato digitato <code>RichText<\/code>nell&#8217;area all&#8217;interno di un <code>&lt;h2&gt;<\/code>tag.<\/p>\n<h3>Usando<code>source<\/code><\/h3>\n<p>Ovviamente puoi combinare pi\u00f9 richtext per un blocco, ad esempio uno per l&#8217;intestazione e uno per un paragrafo. Ricorda solo che ognuno avr\u00e0 bisogno del proprio attributo. Per esempio:<\/p>\n<pre><code>attributes: {\n    myRichHeading: {\n        type: 'string'\n    },\n    myRichText: {\n        type: 'string'\n    }\n},\nedit: (props) =&gt; { \n    const { attributes, setAttributes } = props;\n    return (&lt;div&gt;\n            &lt;RichText \n                tagName=\"h2\"\n                placeholder=\"Write your heading here\"\n                value={attributes.myRichHeading}\n                onChange={(newtext) =&gt; setAttributes({ myRichHeading: newtext })}\n            \/&gt;\n            &lt;RichText\n                tagName=\"p\"\n                placeholder=\"Write your paragraph here\"\n                value={attributes.myRichText}\n                onChange={(newtext) =&gt; setAttributes({ myRichText: newtext })}\n            \/&gt;\n        &lt;\/div&gt;\n    );\n},\nsave: (props) =&gt; { \n    const { attributes } = props;\n    return (&lt;div&gt;\n            &lt;RichText.Content \n                tagName=\"h2\"\n                value={attributes.myRichHeading}\n            \/&gt;\n            &lt;RichText.Content \n                tagName=\"p\"\n                value={attributes.myRichText}\n            \/&gt;\n        &lt;\/div&gt;\n    );\n}<\/code><\/pre>\n<p>Tuttavia, a questo punto inizierai a riscontrare alcuni problemi. Anche se puoi eseguire la formattazione del testo nell&#8217;editor, nulla (o parte) della tua formattazione non verr\u00e0 salvato. Quando visualizzi il post nel frontend, uscir\u00e0 semplicemente come <code>h2<\/code>e un <code>p<\/code>, senza alcuna formattazione che hai fatto (corsivo, grassetto, link). Nemmeno il blocco commenti per il tuo blocco contiene la formattazione. Questa \u00e8 la cosa difficile con <code>RichText<\/code>. Per risolvere questo problema, dobbiamo lavorare con la propriet\u00e0 dell&#8217;attributo <code>source<\/code>.<\/p>\n<p>La <code>source<\/code>propriet\u00e0 che consente a WordPress di estrarre e interpretare il contenuto direttamente dal contenuto del post. Se un attributo non ha <code>source<\/code>set, verr\u00e0 salvato ed estratto dal blocco commenti HTML.<\/p>\n<p>Quando si lavora con <code>RichText<\/code>di solito si imposta <code>source<\/code>su <code>html<\/code>, che utilizza la libreria di WordPress per analizzare il markup HTML. La propriet\u00e0 <code>source<\/code>funziona insieme a un&#8217;altra propriet\u00e0 dell&#8217;attributo; <code>selector<\/code>che definisce da quale tag HTML deve essere estratto.<\/p>\n<p>Ad esempio, impostiamo <code>source<\/code>come <code>html<\/code>nel nostro paragrafo <code>RichText<\/code>e impostiamo <code>selector<\/code>come <code>p<\/code>(altrimenti il \u200b\u200bvalore predefinito \u00e8 root of block the block).<\/p>\n<pre><code>attributes: {\n    ...\n    myRichText: {\n        type: 'string',\n        source: 'html',\n        selector: 'p'\n    }\n},<\/code><\/pre>\n<p>Ora il nostro secondo <code>RichText<\/code>dovrebbe salvare con successo tutta la sua formattazione del testo. Noterai anche che il blocco dei commenti ora mostra solo l&#8217; <code>myRichHeading<\/code>attributo in JSON. L&#8217;attributo <code>myRichText<\/code>\u00e8 completamente scomparso dal blocco commenti. Questo perch\u00e9 con <code>source<\/code>WordPress ora analizza il contenuto del post anzich\u00e9 il blocco dei commenti per il valore dell&#8217;attributo.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151357-61e4ca8ab1967.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-151357-61e4ca8ab1967.png\" alt=\"Crea un blocco Gutenberg personalizzato - Parte 4: Attributi\" ><\/a><\/p>\n<p>Ad essere assolutamente onesto, non ho lavorato molto con l&#8217; <code>source<\/code>attributo e consiglierei di evitarlo se possibile. La documentazione di WordPress spiega qualcosa in pi\u00f9 <a href=\"https:\/\/developer.wordpress.org\/block-editor\/developers\/block-api\/block-attributes\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sull&#8217;origine e sugli attributi<\/a> di cui si desidera verificare di persona.<\/p>\n<p>In questo post abbiamo appreso le nozioni di base sugli attributi; come definirli, aggiornarli ed emettere i loro valori. Nei passaggi successivi esamineremo componenti pi\u00f9 diversi e come aggiungere impostazioni al di fuori del contenuto del blocco stesso; nella barra degli strumenti e nella barra laterale dell&#8217;editor (denominata Inspector).<\/p>\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>In questa lezione di Gutenberg per principianti vedremo come definire gli attributi, recuperarne i valori e aggiornarli.<\/p>\n","protected":false},"author":1,"featured_media":151358,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[939,939,1110,814,814,844,844,865,865],"tags":[1168],"class_list":["post-234013","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gutenberg-6","category-n-a","category-plugin-2","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/234013","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=234013"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/234013\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/151358"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=234013"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=234013"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=234013"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}