{"id":233684,"date":"2023-02-20T10:40:00","date_gmt":"2023-02-20T07:40:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233684"},"modified":"2023-02-26T12:08:18","modified_gmt":"2023-02-26T09:08:18","slug":"lisaeae-mukautettuja-asetuksia-olemassa-oleviin-wordpressin-gutenberg-lohkoihin","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/lisaeae-mukautettuja-asetuksia-olemassa-oleviin-wordpressin-gutenberg-lohkoihin\/","title":{"rendered":"Lis\u00e4\u00e4 mukautettuja asetuksia olemassa oleviin WordPressin Gutenberg-lohkoihin"},"content":{"rendered":"\n<p>Oletko koskaan joutunut tilanteeseen, jossa haluat lis\u00e4t\u00e4 mukautetut asetuksesi WordPressin Gutenberg-lohkoihin? T\u00e4ss\u00e4 viestiss\u00e4 k\u00e4ymme yksityiskohtaisesti kuinka se tehd\u00e4\u00e4n. L\u00f6yd\u00e4t kaksi esimerkkikoodia tosiel\u00e4m\u00e4n k\u00e4ytt\u00f6tapauksista, joissa mukautettuja asetuksia lis\u00e4t\u00e4\u00e4n WordPressin lohkoihin.<\/p>\n<p>Muista, ett\u00e4 koska Gutenberg-lohkot ovat Javascripti\u00e4, niiden muokkaaminen edellytt\u00e4\u00e4 koodin kirjoittamista Javascriptill\u00e4. Aivan kuten WordPressin PHP-koodissa on koukkuja ja suodattimia, joiden avulla teeman tai laajennuksen kehitt\u00e4j\u00e4t voivat muokata sen koodia, my\u00f6s WordPressin Javascript-koodissa on suodattimia. PHP:n <code>[add_filter](https:\/\/developer.wordpress.org\/reference\/functions\/add_filter\/)()<\/code>funktion tapaan meill\u00e4 on Javascript-toiminto <code>[addFilter](https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-hooks\/#api-usage)()<\/code>.<\/p>\n<p>Kirjoitan koodin Javascript ES6 -syntaksilla, joka vaatii k\u00e4\u00e4nt\u00e4j\u00e4n sen muuttamiseksi. Voit kirjoittaa ES5-syntaksilla, mutta suosittelen k\u00e4ytt\u00e4m\u00e4\u00e4n ES6\/ESNexti\u00e4. Minulla on <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/taeydellinen-opas-kehitysympaeristoen-luomiseen-gutenbergille\/\" title=\"viesti, joka selitt\u00e4\u00e4 muuntajan asettamisen ES6\/ESNextille\">viesti, joka selitt\u00e4\u00e4 muuntajan asettamisen ES6\/ESNextille<\/a>. Oletan my\u00f6s, ett\u00e4 sinulla on jonkin verran kokemusta React\/JSX:st\u00e4, mahdollisesti kokemusta <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/kuinka-luoda-mukautettu-wordpress-gutenberg-lohko-opetusohjelmasarja\/\" title=\"omien mukautettujen Gutenberg-lohkojen luomisesta\">omien mukautettujen Gutenberg-lohkojen luomisesta<\/a>.<\/p>\n<h2>Mit\u00e4 voit suodattaa Gutenberg-lohkoilla<\/h2>\n<p>Saatavilla olevissa Gutenberg-koukuissa ja -suodattimissa ei ole paljon dokumentaatiota. Mutta tarkoitus on lis\u00e4t\u00e4 mukautettuja asetuksia ja jollakin tavalla soveltaa niit\u00e4 olemassa oleviin lohkoihin; t\u00e4m\u00e4n olen l\u00f6yt\u00e4nyt t\u00e4h\u00e4n menness\u00e4. Olen keskittynyt yksinkertaisten asetusten lis\u00e4\u00e4miseen \u2013 en toimintoihin, jotka edellytt\u00e4v\u00e4t rajuja komponenttien muutoksia tai monimutkaista k\u00e4ytt\u00e4ytymist\u00e4.<\/p>\n<p>Mukautettujen asetusten lis\u00e4\u00e4minen olemassa oleviin lohkoihin on kolme vaihetta:<\/p>\n<ul>\n<li>Lis\u00e4\u00e4mme suodattimen olemassa olevan lohkon <code>[registerBlockType](https:\/\/developer.wordpress.org\/block-editor\/developers\/block-api\/block-registration\/#registerblocktype)<\/code>asetustaulukkoon. N\u00e4in voimme lis\u00e4t\u00e4 uusia attribuutteja <code>attributes<\/code>taulukkoon, jolloin voimme tallentaa lis\u00e4tietoa lohkoon. Meid\u00e4n on tallennettava mukautettu asetus jonnekin.<\/li>\n<li>Kiinnit\u00e4 lohkon <code>edit<\/code>komponentti (komponentti, joka vastaa lohkon hahmontamisesta editorissa). T\u00e4ss\u00e4 koukussa voimme kiinnitt\u00e4\u00e4 Inspectoriin (sivupalkkiin) ja lis\u00e4t\u00e4 omia komponenttejamme. Voimme joko lis\u00e4t\u00e4 uuden osion\/paneelin tai kytkeyty\u00e4 &quot;Advanced&quot;-osioon, joka on aina l\u00e4sn\u00e4 kaikissa lohkoissa. Sitten on meid\u00e4n teht\u00e4v\u00e4mme render\u00f6id\u00e4 asetussy\u00f6tteet, kuten tekstisy\u00f6tteet, valintaruudut tai mit\u00e4 muuta.<\/li>\n<li>Suodata lohkon <code>save<\/code>rekvisiitta. Voimme s\u00e4\u00e4t\u00e4\u00e4 tallennuksen rekvisiitta, joka vastaa sek\u00e4 lohkon tallentamisesta ett\u00e4 sen render\u00f6imisest\u00e4 k\u00e4ytt\u00f6liittym\u00e4ss\u00e4 (editorin ulkopuolella). Meid\u00e4n tapauksessamme haluamme lis\u00e4t\u00e4 luokan tai rivin tyylin.<\/li>\n<\/ul>\n<p>Voimme kohdistaa tiettyihin lohkoihin tai kaikkiin. Meill\u00e4 on aina p\u00e4\u00e4sy siihen, mink\u00e4 tyyppisess\u00e4 lohkossa olemme.<\/p>\n<p>Toisin sanoen: Lis\u00e4\u00e4mme joitain mukautettuja asetuksia Inspectoriin ja tallennamme ne mukautetuiksi m\u00e4\u00e4ritteiksi, jotka olemme lis\u00e4nneet lohkoon. Voimme sitten vaikuttaa lohkon luokan nimeen tai rivin tyyliin (joissain tapauksissa) tallennettujen attribuuttien mukaan. Mukautettujen luokkanimien avulla voimme helposti lis\u00e4t\u00e4 mukautettuja CSS-sy\u00f6tteit\u00e4, jotka visuaalisesti antavat asetuksillemme tehosteen.<\/p>\n<h2>Mit\u00e4 emme voi tehd\u00e4 (toistaiseksi?)<\/h2>\n<p>Valitettavasti joitakin asioita emme voi k\u00e4ytt\u00e4\u00e4 olemassa olevien lohkojen suodattimilla. Mit\u00e4 tulee yksinkertaisten mukautettujen asetusten lis\u00e4\u00e4miseen lohkoihin, n\u00e4m\u00e4 ovat yleisi\u00e4 asioita, joihin emme voi vaikuttaa.<\/p>\n<h3>Ei p\u00e4\u00e4sy\u00e4 lohkon rivityyliin editorin sis\u00e4ll\u00e4<\/h3>\n<p>Tapauksissa, joissa asetukset vaikuttavat lohkon suunnitteluun, meid\u00e4n on lis\u00e4tt\u00e4v\u00e4 rivin tyyli lohkon rivityssolmuun. Pelkk\u00e4 luokan nimi ei kelpaa. Jos esimerkiksi lis\u00e4\u00e4t mukautetun v\u00e4riasetuksen ja k\u00e4ytt\u00e4j\u00e4 valitsee mukautetun v\u00e4rin (colorpickerist\u00e4), et voi ratkaista t\u00e4t\u00e4 lis\u00e4\u00e4m\u00e4ll\u00e4 luokkaa \u2013 tarvitset sis\u00e4\u00e4nrakennetun tyylin.<\/p>\n<p>Valitettavasti n\u00e4ytt\u00e4\u00e4 silt\u00e4, \u200b\u200b\u200b\u200bett\u00e4 WordPressin oletuslohkot k\u00e4sittelev\u00e4t tekstin sis\u00e4ist\u00e4 tyyli\u00e4 editorissa t\u00e4ysin itsen\u00e4isesti ilman suodatus- tai &quot;kiinnitysvaihtoehtoa&quot;. N\u00e4yt\u00e4n tavan kiert\u00e4\u00e4 t\u00e4m\u00e4 alla olevassa viimeisess\u00e4 esimerkiss\u00e4, mutta se ei ole ihanteellinen kaikissa tapauksissa.<\/p>\n<p>Miksi v\u00e4litt\u00e4\u00e4 siit\u00e4, ett\u00e4 lohko n\u00e4ytt\u00e4\u00e4 erilaiselta editorissa verrattuna k\u00e4ytt\u00f6liittym\u00e4\u00e4n, saatat kysy\u00e4? Gutenbergin koko idea on toteuttaa visuaalinen tapa muokata sis\u00e4lt\u00f6\u00e4, jossa se, mit\u00e4 n\u00e4emme, on todella sit\u00e4, mit\u00e4 saamme. Haluamme saavuttaa saman visuaalisen ilmeen sek\u00e4 editorissa ett\u00e4 k\u00e4ytt\u00f6liittym\u00e4ss\u00e4.<\/p>\n<h3>Jotkut lohkot eiv\u00e4t sis\u00e4ll\u00e4 luokan nime\u00e4 editorissa<\/h3>\n<p>Kuten edell\u00e4 mainittiin, voimme suodattaa lohkon rivitysluokan nimen, koska t\u00e4m\u00e4 on rekvisiitta, joka v\u00e4litet\u00e4\u00e4n kaikille Gutenberg-lohkoille. Mutta valitettavasti on joitain lohkoja, jotka eiv\u00e4t k\u00e4yt\u00e4 lohkon luokkaa ollenkaan <code>edit<\/code>. Yksi esimerkki on kansilohko. Olen pelannut paljon k\u00e4ytt\u00e4m\u00e4ll\u00e4 Cover-lohkoja etusivujen &quot;osioina&quot; ja t\u00f6rm\u00e4nnyt jatkuvasti ongelmiin, koska Cover-lohko rakentaa oman luokkansa sis\u00e4\u00e4n <code>edit<\/code>. Se ohittaa kokonaan mukaan lukien lohkon &quot;globaalin&quot; luokan (johon meill\u00e4 on p\u00e4\u00e4sy suodattimien kautta).<\/p>\n<p>Mutta ainakin voimme olla varmoja siit\u00e4, ett\u00e4 suodatettuja luokkien nimi\u00e4 k\u00e4ytet\u00e4\u00e4n aina <code>save<\/code>(frontend). T\u00e4m\u00e4 tapahtuu automaattisesti kunkin lohkon koodin ulkopuolella.<\/p>\n<p>Jos olen v\u00e4\u00e4r\u00e4ss\u00e4 jonkin edell\u00e4 mainitun suhteen, ilmoita minulle alla olevissa kommenteissa! Opin jatkuvasti Gutenbergi\u00e4, ja samalla my\u00f6s Gutenberg kehittyy. Toivon, ett\u00e4 jossain vaiheessa yll\u00e4 oleva on mahdollista jossain vaiheessa tai ett\u00e4 se on mahdollista, mutta minulta puuttuu vain olennainen tieto!<\/p>\n<p>Kun se on poissa tielt\u00e4, aletaan tutkia jotain koodia.<\/p>\n<h2>Esimerkki 1: Lis\u00e4\u00e4 vaihtokentt\u00e4 piilottaaksesi kansilohkon mobiililaitteessa<\/h2>\n<p>Oletetaan, ett\u00e4 kehit\u00e4mme teemaa, jossa kansilohkoja k\u00e4ytet\u00e4\u00e4n etusivun &quot;osioissa&quot;. Ja haluamme tarjota k\u00e4ytt\u00e4j\u00e4lle mahdollisuuden piilottaa tietty osio mobiilista. T\u00e4m\u00e4n ratkaisemiseksi voimme lis\u00e4t\u00e4 vaihtokent\u00e4n &quot;Lis\u00e4asetukset&quot;-osioon Cover block&#8217;s Inspectorissa. Jos kentt\u00e4 on p\u00e4\u00e4ll\u00e4, Cover-lohko saa ylim\u00e4\u00e4r\u00e4isen mukautetun luokan, johon voimme kohdistaa CSS- ja mediakyselyill\u00e4.<\/p>\n<p>Muuten: T\u00e4m\u00e4 on tapaus, jossa ongelma Cover-lohkosta, joka ei k\u00e4yt\u00e4 mukautettuja luokkanimi\u00e4mme editorissa, on itse asiassa etu! Kuvittele, jos olisi; silloin k\u00e4ytt\u00e4j\u00e4n olisi mahdotonta muokata lohkoa editorissa, jos h\u00e4nell\u00e4 on pieni n\u00e4ytt\u00f6!<\/p>\n<p>Kuten aiemmin mainittiin, meid\u00e4n on koodattava kolme vaihetta. Meid\u00e4n on my\u00f6s lis\u00e4tt\u00e4v\u00e4 jonkin verran PHP:t\u00e4 jonoon Javascript-tiedostomme editoriin. Tehd\u00e4\u00e4n se ensin.<\/p>\n<h3>Lis\u00e4\u00e4mme skriptimme editoriin<\/h3>\n<p>Yhdist\u00e4mme toimintaan funktion <code>[enqueue_block_editor_assets](https:\/\/developer.wordpress.org\/reference\/hooks\/enqueue_block_editor_assets\/)<\/code>. Toimintomme sis\u00e4ll\u00e4 laitamme skriptin jonoon, aivan kuten tavallisesti teemme <code>wp_enqueue_scripts<\/code>hookissa.<\/p>\n<pre><code>add_action('enqueue_block_editor_assets', function() {\n    wp_enqueue_script('awp-gutenberg-filters', get_template_directory_uri(). '\/assets\/js\/gutenberg-filters.js', ['wp-edit-post']);\n});<\/code><\/pre>\n<p>Muista s\u00e4\u00e4t\u00e4\u00e4 polku siihen, miss\u00e4 skripti on! Huomautus: Jos kirjoitat ES6:ssa webpackilla, joka k\u00e4\u00e4nt\u00e4\u00e4 Javascripti\u00e4, muista asettaa skriptin koontipolku, ei l\u00e4hdett\u00e4.<\/p>\n<p>Haluan lis\u00e4t\u00e4 <code>wp-edit-post<\/code>komentosarjan riippuvuudeksi merkin, jotta se latautuu riitt\u00e4v\u00e4n my\u00f6h\u00e4\u00e4n.<\/p>\n<p>Siin\u00e4 kaikki PHP, joka meid\u00e4n on teht\u00e4v\u00e4. Loput on kirjoitettu Javascript-tiedostoomme.<\/p>\n<h3>Lis\u00e4\u00e4 mukautettu attribuutti<\/h3>\n<p>Ensimm\u00e4inen suodatin, jota k\u00e4yt\u00e4mme, on <code>blocks.registerBlockType<\/code>suodattimen <code>registerBlockType<\/code>asetusobjekti.<\/p>\n<p>Mutta ensin v\u00e4h\u00e4n suodattimien lis\u00e4\u00e4misest\u00e4 Javascriptiin. Koska en ole l\u00f6yt\u00e4nyt t\u00e4lle mit\u00e4\u00e4n hyv\u00e4\u00e4 dokumentaatiota, selit\u00e4n sit\u00e4 hieman t\u00e4ss\u00e4. Funktio <code>addFilter<\/code>on <code>wp.hooks<\/code>nimiavaruudessa ja hyv\u00e4ksyy nelj\u00e4 argumenttia.<\/p>\n<p><code>addFilter('hookName', 'namespace', 'functionName', 'priority');<\/code><\/p>\n<p>Ensimm\u00e4inen parametri &#8217;hookName&#8217; on sen suodattimen nimi, johon haluamme liitt\u00e4\u00e4. T\u00e4m\u00e4 vastaa ensimm\u00e4ist\u00e4 parametria PHP:t\u00e4 k\u00e4ytett\u00e4ess\u00e4 <code>add_filter()<\/code>. Toinen parametri, &#8217;nimiavaruus&#8217;, on mukautettu nimiavaruus koodillesi. T\u00e4m\u00e4 on vain nimien t\u00f6rm\u00e4yksen v\u00e4ltt\u00e4miseksi. Voit asettaa t\u00e4\u00e4ll\u00e4 melkein mit\u00e4 tahansa, \u00e4l\u00e4 vain k\u00e4yt\u00e4 WordPressin nimiavaruutta (&#8217;wp&#8217;). K\u00e4yt\u00e4 nimesi tai projektin nimen lyhytt\u00e4 muotoa. Kolmas parametri, &#8217;functionName&#8217;, on koukussa oleva funktio \u2013 joka on sama kuin PHP: <code>add_filter()<\/code>n toinen argumentti. Ja lopuksi nelj\u00e4s parametri, &#8217;priority&#8217;, on valinnainen. T\u00e4m\u00e4 on j\u00e4lleen sama kuin PHP: <code>add_filter()<\/code>n kolmas argumentti.<\/p>\n<p>Suodattimien prosessi Javascriptiss\u00e4 on sama kuin PHP:ss\u00e4. M\u00e4\u00e4rittelemme funktion, jonka on palautettava suodatettu muuttuja. Joskus muuttuja on merkkijono, objekti tai komponentti. Muokkaamme muuttujaa funktion sis\u00e4ll\u00e4 parhaaksi katsomallamme tavalla.<\/p>\n<p>Meid\u00e4n tapauksessamme haluamme lis\u00e4t\u00e4 uuden attribuutin lohkon <code>attribute<\/code>objektiin. Kutsumme uutta attribuuttia <code>hideOnMobile<\/code>ja asetamme sen tyypiksi <code>boolean<\/code>. T\u00e4m\u00e4 tehd\u00e4\u00e4n n\u00e4in:<\/p>\n<pre><code>function addCoverAttribute(settings, name) {\n    if (typeof settings.attributes !== 'undefined') {\n        if (name == 'core\/cover') {\n            settings.attributes = Object.assign(settings.attributes, {\n                hideOnMobile: {\n                    type: 'boolean',\n                }\n            });\n        }\n    }\n    return settings;\n}\n\u00a0\nwp.hooks.addFilter(\n    'blocks.registerBlockType',\n    'awp\/cover-custom-attribute',\n    addCoverAttribute\n);<\/code><\/pre>\n<p>Kohdistamme rivill\u00e4 <code>#3<\/code>vain tyyppisi\u00e4 lohkoja <code>core\/cover<\/code>. Toinen <code>blocks.registerBlockType<\/code>suodatusargumentti on sopivasti lohkon nimi. Sitten lis\u00e4\u00e4mme objektiin uuden <code>settings.attributes<\/code>objektikohteen. Lopuksi varmistamme, ett\u00e4 palautamme suodatetun muuttujan, <code>settings<\/code>.<\/p>\n<p>T\u00e4ss\u00e4 vaiheessa Gutenbergiss\u00e4 visuaalisesti mik\u00e4\u00e4n ei muutu. Mutta kaikilla Cover-lohkoilla on nyt lis\u00e4attribuutti, jota voimme k\u00e4ytt\u00e4\u00e4 asetuksemme tallentamiseen.<\/p>\n<h3>Lis\u00e4\u00e4 asetus Inspectoriin (Lis\u00e4asetukset-paneeli)<\/h3>\n<p>Toista suodatinta kutsutaan <code>editor.BlockEdit<\/code>ja se suodattaa lohkon <code>edit<\/code>komponentin. T\u00e4m\u00e4 suodatin vastaanottaa alkuper\u00e4isen lohkon <code>BlockEdit<\/code>komponentin ja palauttaa uuden paketoidun komponentin. Meid\u00e4n on k\u00e4ytett\u00e4v\u00e4 <code>wp.compose.createHigherOrderComponent<\/code>k\u00e4\u00e4rityn osan palauttamiseksi.<\/p>\n<p>Komponenttimme sis\u00e4ll\u00e4 varmistamme, ett\u00e4 render\u00f6imme k\u00e4\u00e4ritty komponentti <code>BlockEdit<\/code>siit\u00e4 huolimatta. Mutta jos lohko on tyyppi\u00e4 Cover, kiinnit\u00e4mme my\u00f6s komponenttiin <code>InspectorAdvancedControls<\/code>(joka on Inspectorin &quot;Advanced&quot;-paneeli) ja lis\u00e4\u00e4mme <code>ToggleControl<\/code>. Kirjoitamme <code>ToggleControl<\/code>osoittamaan aiemmin lis\u00e4\u00e4m\u00e4mme mukautetun attribuutin arvon ja p\u00e4ivitt\u00e4m\u00e4\u00e4n sit\u00e4 <code>hideOnMobile<\/code>.<\/p>\n<pre><code>const coverAdvancedControls = wp.compose.createHigherOrderComponent((BlockEdit) =&gt; {\n    return (props) =&gt; {\n        const { Fragment } = wp.element;\n        const { ToggleControl } = wp.components;\n        const { InspectorAdvancedControls } = wp.blockEditor;\n        const { attributes, setAttributes, isSelected } = props;\n        return (&lt;Fragment&gt;\n                &lt;BlockEdit {...props} \/&gt;\n                {isSelected &amp;&amp; (props.name == 'core\/cover') &amp;&amp; \n                    &lt;InspectorAdvancedControls&gt;\n                        &lt;ToggleControl\n                            label={wp.i18n.__('Hide on mobile', 'awp')}\n                            checked={!!attributes.hideOnMobile}\n                            onChange={(newval) =&gt; setAttributes({ hideOnMobile: !attributes.hideOnMobile })}\n                        \/&gt;\n                    &lt;\/InspectorAdvancedControls&gt;\n                }\n            &lt;\/Fragment&gt;\n        );\n    };\n}, 'coverAdvancedControls');\n\u00a0\nwp.hooks.addFilter(\n    'editor.BlockEdit',\n    'awp\/cover-advanced-control',\n    coverAdvancedControls\n);<\/code><\/pre>\n<p>Muista aina palauttaa alkuper\u00e4inen <code>BlockEdit<\/code>, mink\u00e4 teemme linjalla <code>#9<\/code>. Rivill\u00e4 #10 tarkistamme, onko lohkon tyyppi Cover, ja render\u00f6imme <code>InspectorAdvancedControls<\/code>komponentin. Lis\u00e4\u00e4mme t\u00e4h\u00e4n sis\u00e4\u00e4n <code>ToggleControl<\/code>, joka on sy\u00f6tt\u00f6s\u00e4\u00e4din, joka n\u00e4kyy vaihtajana tosi tai ep\u00e4tosi v\u00e4lill\u00e4. Asetamme tunnisteen ja yhdist\u00e4mme sen arvon <code>hideOnMobile<\/code>m\u00e4\u00e4ritteeseen. Jos olet lis\u00e4nnyt asetuksia Inspectoriin aiemmin, t\u00e4m\u00e4n pit\u00e4isi olla sinulle melko suoraviivaista.<\/p>\n<p>Yll\u00e4 olevalla koodilla meid\u00e4n pit\u00e4isi nyt saada t\u00e4m\u00e4 &quot;Lis\u00e4asetukset&quot;-paneeliin Inspector on Cover blocksissa:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152421-61e4d70271f5a.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-152421-61e4d70271f5a.png\" alt=\"Lis\u00e4\u00e4 mukautettuja asetuksia olemassa oleviin WordPressin Gutenberg-lohkoihin\"><\/a><\/p>\n<p>Sy\u00f6te p\u00e4ivitt\u00e4\u00e4 nyt mukautetun m\u00e4\u00e4ritteen <code>hideOnMobile<\/code>. Viimeinen vaihe on tehd\u00e4 jotain t\u00e4m\u00e4n attribuutin arvosta riippuen. T\u00e4ll\u00e4 hetkell\u00e4 m\u00e4\u00e4rite on tallennettu, mutta se ei vaikuta varsinaisesti mihink\u00e4\u00e4n.<\/p>\n<h3>Lis\u00e4\u00e4 mukautettu luokka<\/h3>\n<p>Viimeinen vaihe on mukautetun luokan lis\u00e4\u00e4minen lohkon luokkaan. Teemme t\u00e4m\u00e4n suodattimen kanssa <code>blocks.getSaveContent.extraProps<\/code>. T\u00e4m\u00e4 suodatin vaikuttaa lohkon <code>save<\/code>komponentin tukiin. Yksi niist\u00e4 on prop <code>className<\/code>, jota k\u00e4ytet\u00e4\u00e4n aina k\u00e4ytt\u00f6liittym\u00e4ss\u00e4. Lis\u00e4\u00e4mme mukautetun luokkamme sen j\u00e4lkeen, jos m\u00e4\u00e4rite oli <code>true<\/code>, ja palautamme sen sitten. Olen p\u00e4\u00e4tt\u00e4nyt lis\u00e4t\u00e4 luokan &quot; <code>hide-on-mobile<\/code>&quot;, mutta voit kutsua sit\u00e4 miksi haluat.<\/p>\n<pre><code>function coverApplyExtraClass(extraProps, blockType, attributes) {\n    const { hideOnMobile } = attributes;\n\u00a0\n    if (typeof hideOnMobile !== 'undefined' &amp;&amp; hideOnMobile) {\n        extraProps.className = extraProps.className + ' hide-on-mobile';\n    }\n    return extraProps;\n}\n\u00a0\nwp.hooks.addFilter(\n    'blocks.getSaveContent.extraProps',\n    'awp\/cover-apply-class',\n    coverApplyExtraClass\n);<\/code><\/pre>\n<p>T\u00e4m\u00e4 koodi on melko itsest\u00e4\u00e4n selv\u00e4. Rivill\u00e4 <code>#4<\/code>tarkistamme, onko attribuutti <code>hideOnMobile<\/code>olemassa ja onko se <code>true<\/code>. Jos n\u00e4in on, lis\u00e4\u00e4mme <code>className<\/code>merkkijonoon mukautetun luokan.<\/p>\n<p>Kaikilla yll\u00e4 olevilla kolmella suodattimella meid\u00e4n pit\u00e4isi nyt saada mukautettu luokka &quot;piilota matkapuhelimessa&quot; Cover-lohkoon aina, kun asetus otetaan k\u00e4ytt\u00f6\u00f6n.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152421-61e4d70343817.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-152421-61e4d70343817.png\" alt=\"Lis\u00e4\u00e4 mukautettuja asetuksia olemassa oleviin WordPressin Gutenberg-lohkoihin\"><\/a><\/p>\n<p>J\u00e4ljelle j\u00e4\u00e4 vain CSS:n lis\u00e4\u00e4minen teemasi k\u00e4ytt\u00f6liittym\u00e4n tyylitaulukkoon. Jotain t\u00e4llaista;<\/p>\n<pre><code>.wp-block-cover.hide-on-mobile { display: none; }\n@media (min-width: 480px) {\n    .wp-block-cover.hide-on-mobile { display: block; }\n}<\/code><\/pre>\n<h2>Esimerkki 2: Lis\u00e4\u00e4 Inspector-paneeli mukautetulla taustav\u00e4riasetuksella v\u00e4likappaleelle<\/h2>\n<p>Toisessa k\u00e4ytt\u00f6tapauksessa haluamme lis\u00e4t\u00e4 mukautettuja v\u00e4riasetuksia Spacer-lohkoon. Spacer-lohkolla ei ole oletuksena muita asetuksia kuin sen korkeus. Oletetaan, ett\u00e4 haluamme lis\u00e4t\u00e4 taustav\u00e4rin, joka v\u00e4ritt\u00e4\u00e4 v\u00e4likappaleen t\u00e4yden korkeuden. N\u00e4in k\u00e4ytt\u00e4j\u00e4 voi lis\u00e4t\u00e4 tyhji\u00e4, v\u00e4rillisi\u00e4 &quot;raitoja&quot; sis\u00e4lt\u00f6\u00f6ns\u00e4. T\u00e4ss\u00e4 tapauksessa haluamme lis\u00e4t\u00e4 v\u00e4riasetukset omaan erilliseen paneeliinsa Inspectorissa tavallisen v\u00e4riasetusten odotetun k\u00e4ytt\u00e4ytymisen mukaisesti.<\/p>\n<p>Huomautus: V\u00e4rien k\u00e4sittely on hieman monimutkaisempaa, koska meid\u00e4n on k\u00e4ytett\u00e4v\u00e4 (toista) korkeamman asteen komponenttia <code>withColors<\/code>. Koska meid\u00e4n on jo otettava k\u00e4ytt\u00f6\u00f6n korkeamman asteen komponentti, <code>editor.BlockEdit<\/code>meid\u00e4n on lis\u00e4tt\u00e4v\u00e4 <code>compose<\/code>useita komponentteja. Lis\u00e4ksi jokaiselle v\u00e4riasetukselle on lis\u00e4tt\u00e4v\u00e4 kaksi attribuuttia. Yksi sis\u00e4lt\u00e4\u00e4 v\u00e4ripaletin slug ja toinen sis\u00e4lt\u00e4\u00e4 hex v\u00e4rikoodi &#8211; vain jos k\u00e4ytt\u00e4j\u00e4 on valinnut mukautetun v\u00e4rin (k\u00e4ytti v\u00e4rivalitsin). T\u00e4m\u00e4 kaikki on yleist\u00e4, kun ty\u00f6skentelet <code>withColors<\/code>. Minulla on &lt;a href=&quot;https:\/\/wordpress.mediadoma.com\/fi\/kuinka-lisaetae-vaeriasetuksia-mukautettuun-gutenberg-lohkoon\/&quot; title=&quot;viesti, joka selitt\u00e4\u00e4 v\u00e4riasetusten lis\u00e4\u00e4misen ja <code>withColors<\/code>yksityiskohtaisesti,&#8221; &gt;viesti, joka selitt\u00e4\u00e4 v\u00e4riasetusten lis\u00e4\u00e4misen ja <code>withColors<\/code>yksityiskohtaisesti,<\/a> jos olet h\u00e4mmentynyt.<\/p>\n<p>Toiseksi t\u00f6rm\u00e4\u00e4mme t\u00e4ss\u00e4 tapauksessa edell\u00e4 selostettuun asiaan; jossa emme voi lis\u00e4t\u00e4 sopivaa sis\u00e4ist\u00e4 tyyli\u00e4 editoriin. Ratkaisu, jonka olen valinnut t\u00e4ss\u00e4 tapauksessa, on k\u00e4\u00e4ri\u00e4 v\u00e4likappale <code>div<\/code>editorissa a:n sis\u00e4\u00e4n ja soveltaa rivitykseen oikeita luokkia ja rivityyli\u00e4 <code>div<\/code>. T\u00e4m\u00e4 tekee valitusta v\u00e4rist\u00e4 n\u00e4kyv\u00e4n editorissa, kun lohkoa ei ole valittu. Lohkon valinnan j\u00e4lkeen WordPress lis\u00e4\u00e4 kuitenkin oman mukautetun vaaleanharmaan taustansa lohkoon peitt\u00e4en mukautetun taustav\u00e4rimme. Yksi CSS editorille korjaa t\u00e4m\u00e4n. Selit\u00e4n lis\u00e4\u00e4 lopussa.<\/p>\n<p>Vaiheet ovat samat kuin yll\u00e4 olevassa esimerkiss\u00e4. Asetamme skriptimme ensin editoriin PHP:ll\u00e4. Sitten Javascriptiss\u00e4 <code>attributes<\/code>suodatamme objektin, Spacerin <code>edit<\/code>komponentin ja lopuksi Spacerin <code>save<\/code>komponentin.<\/p>\n<h3>Lis\u00e4\u00e4mme skriptimme editoriin<\/h3>\n<p>Yhdist\u00e4mme toimintaan funktion <code>[enqueue_block_editor_assets](https:\/\/developer.wordpress.org\/reference\/hooks\/enqueue_block_editor_assets\/)<\/code>. Toimintomme sis\u00e4ll\u00e4 laitamme skriptin jonoon, aivan kuten tavallisesti teemme <code>wp_enqueue_scripts<\/code>hookissa.<\/p>\n<pre><code>add_action('enqueue_block_editor_assets', function() {\n    wp_enqueue_script('awp-gutenberg-filters', get_template_directory_uri(). '\/assets\/js\/gutenberg-filters.js', ['wp-edit-post']);\n});<\/code><\/pre>\n<p>Muista s\u00e4\u00e4t\u00e4\u00e4 polku skriptiisi. Haluan lis\u00e4t\u00e4 <code>wp-edit-post<\/code>komentosarjan riippuvuudeksi merkin, jotta se latautuu riitt\u00e4v\u00e4n my\u00f6h\u00e4\u00e4n.<\/p>\n<p>Siin\u00e4 kaikki PHP, joka meid\u00e4n on teht\u00e4v\u00e4. Loput on kirjoitettu Javascript-tiedostoomme.<\/p>\n<h3>Lis\u00e4\u00e4 mukautettuja m\u00e4\u00e4ritteit\u00e4<\/h3>\n<p>Kuten yll\u00e4 olevassa esimerkiss\u00e4, lis\u00e4\u00e4mme suodattimen <code>blocks.registerBlockType<\/code>, jotta voimme lis\u00e4t\u00e4 objektikohteita lohkon <code>attributes<\/code>objektiin.<\/p>\n<p>Kun ty\u00f6skentelemme kanssa, <code>withColors<\/code>meid\u00e4n on lis\u00e4tt\u00e4v\u00e4 kaksi attribuuttia jokaiselle v\u00e4rille. Taustav\u00e4rim\u00e4\u00e4ritteemme nimi on <code>backgroundColor<\/code>, mik\u00e4 tarkoittaa, ett\u00e4 toinen m\u00e4\u00e4rite on nimett\u00e4v\u00e4 <code>customBackgroundColor<\/code>. T\u00e4m\u00e4 kaikki on selitetty <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/kuinka-lisaetae-vaeriasetuksia-mukautettuun-gutenberg-lohkoon\/\" title=\"viestiss\u00e4ni v\u00e4riasetusten k\u00e4sittelyst\u00e4 Gutenbergiss\u00e4\">viestiss\u00e4ni v\u00e4riasetusten k\u00e4sittelyst\u00e4 Gutenbergiss\u00e4<\/a>. Molempien tulee olla merkkijonotyyppi\u00e4, ja niit\u00e4 tulee soveltaa vain v\u00e4likappaleen tyyppisiin lohkoihin.<\/p>\n<pre><code>function addSpacerAttributes(settings, name) {\n    if (typeof settings.attributes !== 'undefined') {\n        if (name == 'core\/spacer') {\n            settings.attributes = Object.assign(settings.attributes, {\n                backgroundColor: {\n                    type: 'string',\n                },\n                customBackgroundColor: {\n                    type: 'string'\n                }\n            });\n        }\n    }\n    return settings;\n}\n\u00a0\nwp.hooks.addFilter(\n    'blocks.registerBlockType',\n    'awp\/spacer-background-attribute',\n    addSpacerAttributes\n);<\/code><\/pre>\n<h3>Lis\u00e4\u00e4 ColorSettings-paneeli Inspectoriin<\/h3>\n<p>Toinen vaihe on v\u00e4riasetuspaneelin lis\u00e4\u00e4minen Inspector for the Spacer -lohkoon suodattamalla <code>editor.BlockEdit<\/code>.<\/p>\n<pre><code>const spacerInspectorControls = wp.compose.compose(\n    wp.blockEditor.withColors({backgroundColor: 'background-color'}),\n\u00a0\n    wp.compose.createHigherOrderComponent((BlockEdit) =&gt; {\n        return (props) =&gt; {\n\u00a0\n            if (props.name !== 'core\/spacer') {\n                return(&lt;BlockEdit {...props} \/&gt;);\n            }\n\u00a0\n            const { Fragment } = wp.element;\n            const { InspectorControls, PanelColorSettings } = wp.blockEditor;\n            const { attributes, setAttributes, isSelected } = props;\n            const { backgroundColor, setBackgroundColor } = props;\n\u00a0\n            let newClassName = (attributes.className != undefined)? attributes.className: '';\n            let newStyles = {...props.style};\n            if (backgroundColor != undefined) {\n                if (backgroundColor.class == undefined) {\n                    newStyles.backgroundColor = backgroundColor.color;\n                } else {\n                    newClassName += ' ' + backgroundColor.class;\n                }\n            }\n            const newProps = {\n                ...props,\n                attributes: {\n                    ...attributes,\n                    className: newClassName\n                },\n                style: newStyles\n            }\n\u00a0\n            return (&lt;Fragment&gt;\n                    &lt;div style={newStyles} className={newClassName}&gt;\n                        &lt;BlockEdit {...newProps} \/&gt;\n                        {isSelected &amp;&amp; (props.name == 'core\/spacer') &amp;&amp; \n                            &lt;InspectorControls&gt;\n                                &lt;PanelColorSettings \n                                    title={wp.i18n.__('Color Settings', 'awp')}\n                                    colorSettings={[\n                                        {\n                                            value: backgroundColor.color,\n                                            onChange: setBackgroundColor,\n                                            label: wp.i18n.__('Background color', 'awp')\n                                        }\n                                    ]}\n                                \/&gt;\n                            &lt;\/InspectorControls&gt;\n                        }\n                    &lt;\/div&gt;\n                &lt;\/Fragment&gt;\n            );\n        };\n}, 'spacerInspectorControls'));\n\u00a0\nwp.hooks.addFilter(\n    'editor.BlockEdit',\n    'awp\/spacer-inspector-control',\n    spacerInspectorControls\n);<\/code><\/pre>\n<p>Meid\u00e4n on k\u00e4ytett\u00e4v\u00e4 <code>compose<\/code>yhdist\u00e4m\u00e4\u00e4n t\u00e4st\u00e4 suodattimesta palautettu korkeamman asteen komponentti ja <code>withColors<\/code>. Toisin sanoen yksinkertaisesti k\u00e4\u00e4rimme palautetun komponentin <code>withColors<\/code>. Parametrina <code>withColors<\/code>annamme attribuuttimme <code>backgroundColor<\/code>.<\/p>\n<p>K\u00e4\u00e4rityn komponentin sis\u00e4ll\u00e4 varmistamme, ett\u00e4 palaamme aina <code>BlockEdit<\/code>(linja <code>#9<\/code>ja <code>#39<\/code>v\u00e4likappaleille). Spacer-tyyppisille lohkoille kiinnit\u00e4mme my\u00f6s koukun <code>InspectorControls<\/code>lis\u00e4t\u00e4ksemme <code>PanelColorSettings<\/code>v\u00e4rivalintaamme. T\u00e4m\u00e4 on vakiomenettely v\u00e4riasetusten lis\u00e4\u00e4miseksi.<\/p>\n<p>Linjalla <code>#17 - 34<\/code>luomme manuaalisesti tarvittavan luokan ja\/tai rivin tyylin. Sitten riville <code>#38<\/code>lis\u00e4\u00e4mme rivitysdiv <code>BlockEdit<\/code>:n n\u00e4iden luokkien ja sis\u00e4isten tyylien kanssa.<\/p>\n<p>Tuloksena on uusi v\u00e4riasetuspaneeli Inspector for Spacer blocksissa, t\u00e4ysin toimiva.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152421-61e4d7041a66b.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-152421-61e4d7041a66b.png\" alt=\"Lis\u00e4\u00e4 mukautettuja asetuksia olemassa oleviin WordPressin Gutenberg-lohkoihin\"><\/a><\/p>\n<p>Paletin v\u00e4rin tai mukautetun v\u00e4rin valinta vaikuttaa todellakin editorin sis\u00e4ll\u00e4 olevaan k\u00e4\u00e4re-div. Mutta n\u00e4et sen vain, kun poistat v\u00e4likappaleen valinnan!<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152421-61e4d7052e0c9.gif\" 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-152421-61e4d7052e0c9.gif\" alt=\"Lis\u00e4\u00e4 mukautettuja asetuksia olemassa oleviin WordPressin Gutenberg-lohkoihin\"><\/a><\/p>\n<p>T\u00e4m\u00e4 johtuu siit\u00e4, ett\u00e4 WordPress k\u00e4ytt\u00e4\u00e4 omaa tyyli\u00e4\u00e4n valitessaan v\u00e4likappaletta. Korjaamme sen lopussa, ensin tarvitsee vain k\u00e4ytt\u00e4\u00e4 samaa luokkaa ja\/tai sis\u00e4ist\u00e4 tyyli\u00e4 my\u00f6s k\u00e4ytt\u00f6liittym\u00e4ss\u00e4.<\/p>\n<h3>Lis\u00e4\u00e4 mukautettu luokka ja upotettu tyyli tallentaaksesi<\/h3>\n<p>Lopuksi meid\u00e4n on suodatettava <code>blocks.getSaveContent.extraProps<\/code>ja k\u00e4ytett\u00e4v\u00e4 tarvittavaa luokkaa ja\/tai sis\u00e4ist\u00e4 tyyli\u00e4 k\u00e4ytt\u00f6liittym\u00e4lle. T\u00e4m\u00e4 on j\u00e4lleen hyvin samanlainen kuin mit\u00e4 teimme yll\u00e4 olevassa esimerkiss\u00e4 1. Jos valittiin paletin v\u00e4ri, meid\u00e4n on lis\u00e4tt\u00e4v\u00e4 luokan nimi, joka noudattaa WordPressin v\u00e4riasetusstandardeja (&#8221; <code>has-&lt;PALETTESLUG&gt;-background-color<\/code>&#8221;). Jos valittiin mukautettu v\u00e4ri, meid\u00e4n on lis\u00e4tt\u00e4v\u00e4 sis\u00e4\u00e4nrakennettu tyyli hex-v\u00e4rill\u00e4.<\/p>\n<p>Huomautus: Jos joudut k\u00e4sittelem\u00e4\u00e4n luokkien nimi\u00e4 paljon, suosittelen <code>classnames<\/code>kirjaston tuomista. T\u00e4t\u00e4 k\u00e4ytet\u00e4\u00e4n voimakkaasti Gutenbergiss\u00e4, koska se yksinkertaistaa oikeiden luokkanimien asettamista paljon. Alla oleva koodi olettaa, ett\u00e4 et ole, ja muodostaa luokan nimen manuaalisesti.<\/p>\n<pre><code>function applySpacerBackground(props, blockType, attributes) {\n    if (blockType.name == 'core\/spacer') {\n        const { backgroundColor, customBackgroundColor } = attributes;\n\u00a0\n        \/\/ For improved class name handling, use classnames library. Or do it manually like..\n        let className = (props.className != undefined)? props.className: '';\n        if (backgroundColor != undefined) {\n            className += ' has-' + backgroundColor + '-background-color';\n        }\n        props.className = className;\n        if (customBackgroundColor != undefined) {\n            Object.assign(props, { style: { ...props.style, backgroundColor: customBackgroundColor }});\n        }\n    }\n    return props;\n}\n\u00a0\nwp.hooks.addFilter(\n    'blocks.getSaveContent.extraProps',\n    'awp\/spacer-apply-class',\n    applySpacerBackground\n);<\/code><\/pre>\n<p>Yll\u00e4 olevalla koodilla k\u00e4ytt\u00f6liittym\u00e4 render\u00f6i nyt t\u00e4ydellisesti Spacer-lohkot mukautetulla v\u00e4rivalinnallamme!<\/p>\n<p>Lopullinen (valinnainen) korjaus on lis\u00e4t\u00e4 CSS:\u00e4\u00e4 editoriin. Sinun on lis\u00e4tt\u00e4v\u00e4 joko upotettu CSS tai muokkaustyylitaulukko. Voit esimerkiksi asettaa tyylitaulukon jonoon samaan PHP-koukkuun, jota k\u00e4ytimme Javascript-tiedostomme jonoon. En mene yksityiskohtiin siit\u00e4, miten t\u00e4m\u00e4 tehd\u00e4\u00e4n; mutta tarvitsemasi CSS on jotain alla olevan kaltaista. Se vain asettaa v\u00e4likappaleen <code>background-color<\/code>perityn v\u00e4rin (se perii k\u00e4\u00e4redivist\u00e4mme), kun lohko valitaan:<\/p>\n<pre><code>.block-library-spacer__resize-container.is-selected { \n    background-color: inherit; \n}<\/code><\/pre>\n<p>PS: Muista, ett\u00e4 t\u00e4m\u00e4 voi muuttua tulevaisuudessa. Gutenberg kehittyy edelleen voimakkaasti.<\/p>\n<h2>Johtop\u00e4\u00e4t\u00f6s<\/h2>\n<p>T\u00e4ss\u00e4 viestiss\u00e4 olemme oppineet kaksi tapaa toteuttaa mukautettuja asetuksia olemassa oleviin WordPress Gutenberg -lohkoihin. Se on t\u00e4ysin mahdollista yksinkertaisissa asetuksissa, jotka ehk\u00e4 edellytt\u00e4v\u00e4t vain luokkaa tai sis\u00e4ist\u00e4 tyyli\u00e4. Olemme tarkastelleet varoitukset, jotka toivottavasti korjataan my\u00f6hemmiss\u00e4 Gutenberg-versioissa!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>T\u00e4ss\u00e4 viestiss\u00e4 k\u00e4ymme yksityiskohtaisesti l\u00e4pi, kuinka voit lis\u00e4t\u00e4 mukautettuja asetuksiasi olemassa oleviin WordPressin Gutenberg-lohkoihin kahdella esimerkkikoodilla tosiel\u00e4m\u00e4n k\u00e4ytt\u00f6tapauksista.<\/p>\n","protected":false},"author":1,"featured_media":152422,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[895,719,938,938,719,895,1110,834,843,834,843,864,864],"tags":[1166],"class_list":{"0":"post-233684","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-koodi","8":"category-kehittaejae","9":"category-gutenberg-5","13":"category-n-a","14":"category-opas-aloittelijoille","15":"category-opetusohjelmia","18":"category-wordpress-5","20":"tag-affiai-fi"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233684","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=233684"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233684\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/152422"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=233684"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=233684"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=233684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}