{"id":233699,"date":"2023-02-20T10:17:00","date_gmt":"2023-02-20T07:17:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233699"},"modified":"2023-02-26T12:21:00","modified_gmt":"2023-02-26T09:21:00","slug":"lisage-kohandatud-saetted-olemasolevatele-wordpressi-gutenbergi-plokkidele","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/lisage-kohandatud-saetted-olemasolevatele-wordpressi-gutenbergi-plokkidele\/","title":{"rendered":"Lisage kohandatud s\u00e4tted olemasolevatele WordPressi Gutenbergi plokkidele"},"content":{"rendered":"\n<p>Kas olete kunagi leidnud end olukorrast, kus soovite lisada oma kohandatud s\u00e4tted WordPressi Gutenbergi plokkidesse? Selles postituses k\u00e4sitleme \u00fcksikasjalikult, kuidas seda teha. Leiate kaks n\u00e4idet WordPressi plokkidele kohandatud s\u00e4tete lisamise tegelikest kasutusjuhtudest.<\/p>\n<p>Pidage meeles, et kuna Gutenbergi plokid on Javascript, peate nende muutmiseks koodi kirjutama Javascriptis. Nii nagu WordPressi PHP-koodil on konksud ja filtrid, mis v\u00f5imaldavad teemade v\u00f5i pistikprogrammide arendajatel selle koodi muuta, on ka WordPressi Javascripti koodis filtreid. Sarnaselt PHP <code>[add_filter](https:\/\/developer.wordpress.org\/reference\/functions\/add_filter\/)()<\/code>funktsioonile on meil Javascripti funktsioon <code>[addFilter](https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-hooks\/#api-usage)()<\/code>.<\/p>\n<p>Kirjutan koodi Javascript ES6 s\u00fcntaksis, mille teisendamiseks on vaja kompilaatorit. Saate kirjutada ES5 s\u00fcntaksis, kuid soovitan kasutada ES6\/ESNext. Mul on <a href=\"https:\/\/wordpress.mediadoma.com\/et\/taeielik-juhend-gutenbergi-arenduskeskkonna-seadistamiseks\/\" title=\"postitus, mis selgitab ES6\/ESNexti trafo seadistamist\">postitus, mis selgitab ES6\/ESNexti trafo seadistamist<\/a>. Samuti eeldan, et tunnete Reacti\/JSX-i, v\u00f5ib-olla on teil kogemusi, <a href=\"https:\/\/wordpress.mediadoma.com\/et\/kohandatud-wordpressi-gutenbergi-ploki-loomine-opetusesari\/\" title=\"kuidas luua oma kohandatud Gutenbergi plokke\">kuidas luua oma kohandatud Gutenbergi plokke<\/a>.<\/p>\n<h2>Mida saate Gutenbergi plokkidel filtreerida<\/h2>\n<p>Saadaolevate Gutenbergi konksude ja filtrite hulgas pole palju dokumentatsiooni. Aga selleks, et lisada kohandatud s\u00e4tteid ja neid kuidagi olemasolevatele plokkidele rakendada; selle olen siiani leidnud. Olen keskendunud lihtsate s\u00e4tete lisamisele \u2013 mitte toimingutele, mis n\u00f5uavad komponentide drastilisi muudatusi v\u00f5i keerukat k\u00e4itumist.<\/p>\n<p>Olemasolevatele plokkidele kohandatud s\u00e4tete lisamiseks on kolm sammu:<\/p>\n<ul>\n<li>Lisame olemasoleva ploki <code>[registerBlockType](https:\/\/developer.wordpress.org\/block-editor\/developers\/block-api\/block-registration\/#registerblocktype)<\/code>seadete massiivi filtri. See v\u00f5imaldab meil massiivile uusi atribuute lisada <code>attributes<\/code>, v\u00f5imaldades seega plokki lisateavet salvestada. Peame oma kohandatud seaded kuhugi salvestama.<\/li>\n<li>Haakige ploki <code>edit<\/code>komponendi k\u00fclge (komponent, mis vastutab redaktoris ploki renderdamise eest). Selle konksuga saame haakuda inspektori (k\u00fcljeriba) k\u00fclge ja lisada oma komponente. Saame kas lisada uue jaotise\/paneeli v\u00f5i haakuda jaotisega &quot;T\u00e4psemalt&quot;, mis on alati k\u00f5ikides plokkides olemas. Siis on meie teha seadistussisendeid, nagu tekstisisestus, m\u00e4rkeruudud v\u00f5i muu.<\/li>\n<li>Filtreerige ploki <code>save<\/code>rekvisiidid. Saame reguleerida salvestamise rekvisiite, mis vastutavad nii ploki salvestamise kui ka renderdamise eest (v\u00e4ljaspool redaktorit). Meie puhul tahame lisada klassi v\u00f5i tekstisisese stiili.<\/li>\n<\/ul>\n<p>Saame sihtida konkreetseid plokke v\u00f5i k\u00f5iki. Meil on alati juurdep\u00e4\u00e4s sellele, millist t\u00fc\u00fcpi plokis me viibime.<\/p>\n<p>Teisis\u00f5nu \u00f6eldes: lisame Inspectoris m\u00f5ned kohandatud s\u00e4tted ja salvestame need kohandatud atribuutidesse, mille oleme plokki lisanud. Seej\u00e4rel saame m\u00f5jutada ploki klassi nime v\u00f5i tekstisisest stiili (m\u00f5nel juhul), olenevalt salvestatud atribuutidest. Kohandatud klassinimede abil saame h\u00f5lpsasti lisada kohandatud CSS-i, mis annab meie seadetele visuaalselt efekti.<\/p>\n<h2>Mida me ei saa (praegu?)<\/h2>\n<p>Kahjuks on m\u00f5ned asjad, millele me olemasolevate plokkide filtritega juurde ei p\u00e4\u00e4se. Mis puudutab lihtsate kohandatud s\u00e4tete lisamist plokkidele, siis need on tavalised asjad, mida me m\u00f5jutada ei saa.<\/p>\n<h3>Redaktoris pole juurdep\u00e4\u00e4su ploki tekstisisesele stiilile<\/h3>\n<p>Ploki kujundust m\u00f5jutavate s\u00e4tete puhul peame lisama ploki m\u00e4hkimiss\u00f5lmele tekstisisese stiili. Lihtsalt klassi nimi ei sobi. N\u00e4iteks kui lisate kohandatud v\u00e4rviseade ja kasutaja valib kohandatud v\u00e4rvi (v\u00e4rvivalija abil), ei saa te seda klassi lisamisega lahendada \u2013 vajate tekstisisese stiili.<\/p>\n<p>Kahjuks n\u00e4ib, et WordPressi vaikeplokid k\u00e4sitlevad redaktoris tekstisisest stiili t\u00e4iesti iseseisvalt, ilma filtreerimise v\u00f5i \u201ehaakimise&quot; v\u00f5imaluseta. N\u00e4itan allpool viimases n\u00e4ites viisi, kuidas sellest m\u00f6\u00f6da minna, kuid see pole k\u00f5igil juhtudel ideaalne.<\/p>\n<p>V\u00f5ite k\u00fcsida, miks hoolite sellest, et plokk n\u00e4eb redaktoris v\u00e4lja erinevalt esik\u00fcljest? Kogu Gutenbergi m\u00f5te on rakendada visuaalset viisi sisu redigeerimiseks, kus see, mida n\u00e4eme, on tegelikult see, mida me saame. Soovime saavutada sama visuaalse v\u00e4limuse nii redaktoris kui ka kasutajaliideses.<\/p>\n<h3>M\u00f5ned plokid ei sisalda redaktoris klassi nime<\/h3>\n<p>Nagu eespool mainitud, saame filtreerida ploki \u00fcmbrisklassi nime, kuna see on rekvisiit, mis edastatakse k\u00f5igile Gutenbergi plokkidele. Kuid kahjuks on m\u00f5ned plokid, mis ei rakenda ploki klassi <code>edit<\/code>. \u00dcks n\u00e4ide on katteplokk. Olen palju m\u00e4nginud, kasutades kaaneplokke esilehtede &quot;sektsioonidena&quot;, ja pidevalt tekib probleeme, kuna kaaneplokk loob oma klassi <code>edit<\/code>. See j\u00e4tab t\u00e4ielikult vahele, kaasa arvatud ploki &#8220;globaalne&#8221; klass (millele on meil juurdep\u00e4\u00e4s filtrite kaudu).<\/p>\n<p>Kuid v\u00e4hemalt saame olla kindlad, et filtreeritud klassinimesid rakendatakse alati <code>save<\/code>(frontendis). See juhtub automaatselt v\u00e4ljaspool iga ploki spetsiifilist koodi.<\/p>\n<p>Kui ma eksin m\u00f5ne \u00fclaltoodu suhtes, siis palun andke mulle allolevates kommentaarides teada! \u00d5pin pidevalt Gutenbergi ja samal ajal areneb ka Gutenberg. Loodan, et \u00fchel hetkel on \u00fclaltoodu \u00fchel hetkel v\u00f5imalik v\u00f5i et see on v\u00f5imalik, kuid mul on lihtsalt puudu oluline teave!<\/p>\n<p>Kui see on k\u00f5rvale j\u00e4\u00e4nud, hakkame m\u00f5nda koodi uurima.<\/p>\n<h2>N\u00e4ide 1: lisage l\u00fclitusv\u00e4li, et peita mobiilis kaaneplokk<\/h2>\n<p>Oletame, et t\u00f6\u00f6tame v\u00e4lja teema, mille puhul kaaneplokke kasutatakse esilehel olevate jaotiste jaoks. Ja me tahame anda kasutajale v\u00f5imaluse teatud osa mobiili eest peita. Selle lahendamiseks saame kaaneploki inspektori jaotisesse &quot;T\u00e4psemalt&quot; lisada l\u00fclitusv\u00e4lja. Kui v\u00e4li on sisse l\u00fclitatud, saab kaaneplokk t\u00e4iendava kohandatud klassi, mida saame sihtida CSS-i ja meediap\u00e4ringute abil.<\/p>\n<p>Muide: see on juhtum, kus kaaneploki probleem, mis ei rakenda meie kohandatud klassinimesid redaktoris, on tegelikult kasuks! Kujutage ette, kui oleks; siis poleks kasutajal v\u00f5imalik plokki redigeerijas redigeerida, kui tal on v\u00e4ike ekraan!<\/p>\n<p>Nagu varem mainitud, peame kodeerima kolme sammu. Peame lisama ka PHP, et oma Javascripti fail redaktorisse j\u00e4rjekorda panna. Teeme seda k\u00f5igepealt.<\/p>\n<h3>Meie skripti lisamine redaktorisse<\/h3>\n<p>Me \u00fchendame funktsiooni toimingu k\u00fclge <code>[enqueue_block_editor_assets](https:\/\/developer.wordpress.org\/reference\/hooks\/enqueue_block_editor_assets\/)<\/code>. Oma funktsiooni sees paneme skripti j\u00e4rjekorda, nagu tavaliselt <code>wp_enqueue_scripts<\/code>konksu puhul.<\/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>\u00c4rge unustage kohandada teed sinna, kus teie skript asub! M\u00e4rkus. Kui kirjutate ES6-s ja Javascripti kompileerib veebipakett, \u00e4rge unustage m\u00e4\u00e4rata skripti j\u00e4rgu tee, mitte allika.<\/p>\n<p>Mulle meeldib lisada <code>wp-edit-post<\/code>skriptile s\u00f5ltuvusena, et tagada selle laadimine piisavalt hilja.<\/p>\n<p>See on k\u00f5ik PHP, mida me tegema peame. \u00dclej\u00e4\u00e4nu on kirjutatud meie Javascripti faili.<\/p>\n<h3>Lisage kohandatud atribuut<\/h3>\n<p>Esimene filter, mida kasutame, on see, <code>blocks.registerBlockType<\/code>millise filtri <code>registerBlockType<\/code>seadete objekt.<\/p>\n<p>Aga k\u00f5igepealt natuke Javascripti filtrite lisamisest. Kuna ma pole selle kohta \u00fchtegi head dokumentatsiooni leidnud, siis selgitan seda siin veidi. Funktsioon <code>addFilter<\/code>asub <code>wp.hooks<\/code>nimeruumis ja aktsepteerib nelja argumenti.<\/p>\n<p><code>addFilter('hookName', 'namespace', 'functionName', 'priority');<\/code><\/p>\n<p>Esimene parameeter &#8216;hookName&#8217; on filtri nimi, mille k\u00fclge tahame \u00fchendada. See on samav\u00e4\u00e4rne esimese parameetriga PHP-de kasutamisel <code>add_filter()<\/code>. Teine parameeter &quot;nimeruum&quot; on teie koodi kohandatud nimeruumi nimi. See on lihtsalt selleks, et v\u00e4ltida nimede kokkup\u00f5rkeid. Siin saate m\u00e4\u00e4rata peaaegu k\u00f5ike, mida soovite, lihtsalt \u00e4rge kasutage WordPressi nimeruumi (&#8216;wp&#8217;). Kasutage oma nime v\u00f5i projekti nime l\u00fchivormi. Kolmas parameeter &quot;functionName&quot; on konksuga funktsioon \u2013 mis on sama mis PHP <code>add_filter()<\/code>teine \u200b\u200bargument. Ja l\u00f5puks neljas parameeter &quot;prioriteet&quot; on valikuline. J\u00e4llegi, see on sama, mis PHP <code>add_filter()<\/code>kolmas argument.<\/p>\n<p>Javascripti filtrite protsess on sama, mis PHP-s. M\u00e4\u00e4ratleme funktsiooni, mis peab tagastama filtreeritud muutuja. M\u00f5nikord on muutujaks string, objekt v\u00f5i komponent. Funktsiooni sees muudame muutujat oma \u00e4ran\u00e4gemise j\u00e4rgi.<\/p>\n<p>Meie puhul tahame ploki <code>attribute<\/code>objektile lisada uue atribuudi. Kutsume v\u00e4lja uue atribuudi <code>hideOnMobile<\/code>ja m\u00e4\u00e4rame selle t\u00fc\u00fcbiks <code>boolean<\/code>. Seda tehakse j\u00e4rgmiselt:<\/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>Reas sihime <code>#3<\/code>kindlasti ainult plokke, mille t\u00fc\u00fcp on \u201e <code>core\/cover<\/code>&#8220;. Teiseks <code>blocks.registerBlockType<\/code>filtreerimisargumendiks piisab mugavalt ploki nimest. Seej\u00e4rel lisame objektile uue <code>settings.attributes<\/code>objektielemendi. L\u00f5puks tagame kindlasti filtreeritud muutuja <code>settings<\/code>.<\/p>\n<p>Praegu ei ole Gutenbergis visuaalselt midagi muutunud. Kuid k\u00f5igil kaaneplokkidel on n\u00fc\u00fcd t\u00e4iendav atribuut, mida saame kasutada oma seadete salvestamiseks.<\/p>\n<h3>Seade lisamine inspektorisse (t\u00e4psem paneel)<\/h3>\n<p>Teist filtrit kutsutakse <code>editor.BlockEdit<\/code>ja see filtreerib ploki <code>edit<\/code>komponendi. See filter v\u00f5tab vastu algse ploki <code>BlockEdit<\/code>komponendi ja tagastab uue pakitud komponendi. <code>wp.compose.createHigherOrderComponent<\/code>Pakitud komponendi tagastamiseks peame kasutama .<\/p>\n<p><code>BlockEdit<\/code>Meie komponendi sees renderdame sellest hoolimata kindlasti pakitud komponendi. Kui aga plokk on t\u00fc\u00fcpi Cover, \u00fchendame me ka komponendi k\u00fclge <code>InspectorAdvancedControls<\/code>(mis on Inspectori paneel Advanced) ja lisame <code>ToggleControl<\/code>. Kirjutame, <code>ToggleControl<\/code>et n\u00e4idata varem lisatud kohandatud atribuudi v\u00e4\u00e4rtust ja v\u00e4rskendada seda <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>\u00c4rge unustage alati originaali tagastada <code>BlockEdit<\/code>, mida teeme real <code>#9<\/code>. Real #10 kontrollime, kas ploki t\u00fc\u00fcp on Cover, ja renderdame <code>InspectorAdvancedControls<\/code>komponendi. Siia sisse lisame <code>ToggleControl<\/code>, mis on sisendi juhtelement, mis kuvatakse t\u00f5ese v\u00f5i vale vahel. M\u00e4\u00e4rame sildi ja \u00fchendame selle v\u00e4\u00e4rtuse <code>hideOnMobile<\/code>atribuudiga. Kui olete varem Inspectori seadeid lisanud, peaks see olema teile \u00fcsna lihtne.<\/p>\n<p>\u00dclaltoodud koodiga peaksime selle n\u00fc\u00fcd saama kaaneplokkide inspektori paneelil &quot;T\u00e4psemalt&quot;:<\/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=\"Lisage kohandatud s\u00e4tted olemasolevatele WordPressi Gutenbergi plokkidele\"><\/a><\/p>\n<p>Sisend v\u00e4rskendab n\u00fc\u00fcd meie kohandatud atribuuti <code>hideOnMobile<\/code>. Viimane samm on teha midagi s\u00f5ltuvalt selle atribuudi v\u00e4\u00e4rtusest. Praeguse seisuga on atribuut salvestatud, kuid see ei m\u00f5juta tegelikult midagi.<\/p>\n<h3>Lisage kohandatud klass<\/h3>\n<p>Viimane samm on kohandatud klassi lisamine ploki klassi. Teeme seda filtriga <code>blocks.getSaveContent.extraProps<\/code>. See filter m\u00f5jutab ploki <code>save<\/code>komponendi tugipunkte. \u00dcks neist on prop <code>className<\/code>, mida rakendatakse alati esiservas. Kui atribuut oli, lisame selle j\u00e4rele oma kohandatud klassi <code>true<\/code>ja tagastame selle. Otsustasin lisada klassi \u201e <code>hide-on-mobile<\/code>&#8220;, kuid v\u00f5ite seda nimetada kuidas iganes soovite.<\/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>See kood on \u00fcsna iseenesestm\u00f5istetav. Real <code>#4<\/code>kontrollime, kas atribuut <code>hideOnMobile<\/code>on olemas ja on <code>true<\/code>. <code>className<\/code>Kui jah, siis lisame stringile kohandatud klassi .<\/p>\n<p>K\u00f5igi \u00fclaltoodud kolme filtriga peaksime n\u00fc\u00fcd saama kohandatud klassi \u201epeida mobiilis&#8221;, kui seade on sisse l\u00fclitatud, meie kaaneplokile rakendatud.<\/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=\"Lisage kohandatud s\u00e4tted olemasolevatele WordPressi Gutenbergi plokkidele\"><\/a><\/p>\n<p>J\u00e4\u00e4b \u00fcle vaid lisada oma teema kasutajaliidese stiililehele CSS-i. Midagi sellist;<\/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>N\u00e4ide 2: Lisage vaheploki jaoks kohandatud taustav\u00e4rvi s\u00e4ttega Inspektori paneel<\/h2>\n<p>Teisel kasutusjuhul tahame lisada v\u00e4liplokile kohandatud v\u00e4rvis\u00e4tteid. Vaikimisi pole spaceri plokil muid seadistusi peale selle k\u00f5rguse. Oletame, et tahame lisada taustav\u00e4rvi, mis v\u00e4rvib spaceri ploki t\u00e4isk\u00f5rguse. See v\u00f5imaldab kasutajal lisada sisu sisse t\u00fchje v\u00e4rvilisi triipe. Sel juhul tahame lisada v\u00e4rvis\u00e4tted Inspectori eraldi paneelile, nagu tavaliselt v\u00e4rvis\u00e4tete puhul oodatakse.<\/p>\n<p>M\u00e4rkus. V\u00e4rvide k\u00e4sitlemine on veidi keerulisem, kuna peame kasutama (muud) k\u00f5rgemat j\u00e4rku komponenti <code>withColors<\/code>. Kuna me peame juba rakendama k\u00f5rgemat j\u00e4rku komponenti, <code>editor.BlockEdit<\/code>peame kasutama <code>compose<\/code>mitut komponenti. Lisaks peame iga v\u00e4rviseade jaoks lisama kaks atribuuti. \u00dcks sisaldab v\u00e4rvipaleti n\u00e4ppu ja teine \u200b\u200bhex-v\u00e4rvikoodi \u2013 ainult siis, kui kasutaja on valinud kohandatud v\u00e4rvi (kasutas v\u00e4rvivalijat). See k\u00f5ik on tavaline k\u00e4itumine rakendusega t\u00f6\u00f6tamisel <code>withColors<\/code>. Mul on &lt;a href=&quot;https:\/\/wordpress.mediadoma.com\/et\/kuidas-lisada-kohandatud-gutenbergi-plokki-vaervisaetteid\/&quot; title=&quot;postitus, mis selgitab v\u00e4rviseadete lisamist ja <code>withColors<\/code>\u00fcksikasjalikult,&#8221; &gt;postitus, mis selgitab v\u00e4rviseadete lisamist ja <code>withColors<\/code>\u00fcksikasjalikult,<\/a> kui j\u00e4\u00e4te segadusse.<\/p>\n<p>Teiseks puutume sel juhul kokku \u00fclaltoodud probleemiga; kus me ei saa redaktorisse sobivat tekstisisest stiili lisada. Lahendus, mille olen sel juhul valinud, on m\u00e4hkida <code>div<\/code>redaktoris spacer plokk a sisse ja rakendada m\u00e4histamisele \u00f5iged klassid ja tekstisisese stiili <code>div<\/code>. See muudab valitud v\u00e4rvi redaktoris n\u00e4htavaks, kui plokk on t\u00fchistatud. Ploki valimisel lisab WordPress aga plokile oma kohandatud helehalli tausta, mis katab meie kohandatud taustav\u00e4rvi. \u00dcks CSS redaktorile parandab selle. L\u00f5pus selgitan t\u00e4psemalt.<\/p>\n<p>Toimingud on samad, mis \u00fclaltoodud n\u00e4ites. Esmalt paneme oma skripti PHP-redaktorisse j\u00e4rjekorda. Seej\u00e4rel filtreerime Javascriptis <code>attributes<\/code>objekti, spaceri <code>edit<\/code>komponendi ja l\u00f5puks spaceri <code>save<\/code>komponendi.<\/p>\n<h3>Meie skripti lisamine redaktorisse<\/h3>\n<p>Me \u00fchendame funktsiooni toimingu k\u00fclge <code>[enqueue_block_editor_assets](https:\/\/developer.wordpress.org\/reference\/hooks\/enqueue_block_editor_assets\/)<\/code>. Oma funktsiooni sees paneme skripti j\u00e4rjekorda, nagu tavaliselt <code>wp_enqueue_scripts<\/code>konksu puhul.<\/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>\u00c4rge unustage kohandada oma skripti teed. Mulle meeldib lisada <code>wp-edit-post<\/code>skriptile s\u00f5ltuvusena, et tagada selle laadimine piisavalt hilja.<\/p>\n<p>See on k\u00f5ik PHP, mida me tegema peame. \u00dclej\u00e4\u00e4nu on kirjutatud meie Javascripti faili.<\/p>\n<h3>Lisage kohandatud atribuudid<\/h3>\n<p>Nagu \u00fclaltoodud n\u00e4ites, lisame sisse filtri <code>blocks.registerBlockType<\/code>, et lisada ploki <code>attributes<\/code>objektile t\u00e4iendavaid objekte.<\/p>\n<p>Sellega t\u00f6\u00f6tades <code>withColors<\/code>peame iga v\u00e4rvi jaoks lisama kaks atribuuti. Meie taustav\u00e4rvi atribuudi nimi on <code>backgroundColor<\/code>, mis t\u00e4hendab, et teisele atribuudile tuleb anda nimi <code>customBackgroundColor<\/code>. Seda k\u00f5ike selgitatakse <a href=\"https:\/\/wordpress.mediadoma.com\/et\/kuidas-lisada-kohandatud-gutenbergi-plokki-vaervisaetteid\/\" title=\"minu postituses v\u00e4rviseadete k\u00e4sitlemise kohta Gutenbergis\">minu postituses v\u00e4rviseadete k\u00e4sitlemise kohta Gutenbergis<\/a>. M\u00f5lemad peaksid olema stringi t\u00fc\u00fcpi ja neid tuleks rakendada ainult spacer t\u00fc\u00fcpi plokkidele.<\/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>Lisage inspektorisse ColorSettings paneel<\/h3>\n<p>Teine samm on v\u00e4rviseadete paneeli lisamine ploki Inspector for the Spacer jaoks filtreerimise teel <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>Peame kasutama <code>compose<\/code>, et kombineerida sellest filtrist tagastatud k\u00f5rgemat j\u00e4rku komponenti ja <code>withColors<\/code>. Teisis\u00f5nu m\u00e4hkime tagastatud komponendi lihtsalt <code>withColors<\/code>. Parameetrina <code>withColors<\/code>anname oma atribuudi <code>backgroundColor<\/code>.<\/p>\n<p>Pakitud komponendi sees tagame alati tagasituleku <code>BlockEdit<\/code>(joon <code>#9<\/code>ja <code>#39<\/code>vaheplokkide puhul). Spaceri t\u00fc\u00fcpi plokkide puhul \u00fchendame ka selle k\u00fclge <code>InspectorControls<\/code>, et lisada <code>PanelColorSettings<\/code>oma v\u00e4rvivaliku jaoks a. See on v\u00e4rviseadete lisamise standardprotseduur.<\/p>\n<p>Real <code>#17 - 34<\/code>genereerime k\u00e4sitsi vajaliku klassi ja\/v\u00f5i tekstisisese stiili. Seej\u00e4rel <code>#38<\/code>lisame reale <code>BlockEdit<\/code>nende klasside ja tekstisiseste stiilidega \u00fcmbrislause.<\/p>\n<p>Tulemuseks on Inspector for Spacer blocks uus v\u00e4rviseadete paneel, mis on t\u00e4iesti t\u00f6\u00f6korras.<\/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=\"Lisage kohandatud s\u00e4tted olemasolevatele WordPressi Gutenbergi plokkidele\"><\/a><\/p>\n<p>Paleti v\u00e4rvi v\u00f5i kohandatud v\u00e4rvi valimist m\u00f5jutab redaktoris t\u00f5epoolest \u00fcmbris. Kuid n\u00e4ete seda ainult siis, kui t\u00fchistate spaceri ploki valiku!<\/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=\"Lisage kohandatud s\u00e4tted olemasolevatele WordPressi Gutenbergi plokkidele\"><\/a><\/p>\n<p>See juhtub seet\u00f5ttu, et WordPress rakendab vaheploki valimisel oma stiili. Me parandame selle l\u00f5pus, k\u00f5igepealt peame lihtsalt kasutama sama klassi ja\/v\u00f5i sisemist stiili ka frontendis.<\/p>\n<h3>Salvestamiseks lisage kohandatud klass ja tekstisisene stiil<\/h3>\n<p>L\u00f5puks peame filtreerima <code>blocks.getSaveContent.extraProps<\/code>ja rakendama kasutajaliidese jaoks vajaliku klassi ja\/v\u00f5i tekstisisese stiili. See on j\u00e4llegi v\u00e4ga sarnane sellega, mida tegime \u00fclaltoodud n\u00e4ites 1. Kui valiti paleti v\u00e4rv, peame lisama klassi nime, mis j\u00e4rgib WordPressi v\u00e4rviseadete standardeid (&#8221; <code>has-&lt;PALETTESLUG&gt;-background-color<\/code>&#8220;). Kui valiti kohandatud v\u00e4rv, peame lisama sisemise stiili kuuskantv\u00e4rviga.<\/p>\n<p>M\u00e4rkus. Kui teil on vaja palju klassinimesid k\u00e4sitleda, soovitan <code>classnames<\/code>teeki importida. Seda kasutatakse Gutenbergis palju, kuna see lihtsustab \u00f5igete klassinimede m\u00e4\u00e4ramist palju. Allolev kood eeldab, et te pole seda teinud, ja koostab klassi nime k\u00e4sitsi.<\/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>\u00dclaltoodud koodiga renderdab kasutajaliides n\u00fc\u00fcd suurep\u00e4raselt meie kohandatud v\u00e4rvivalikuga Spaceri plokke!<\/p>\n<p>Viimane (valikuline) parandus on CSS-i lisamine redaktorisse. Peate lisama tekstisisese CSS-i v\u00f5i redaktori laaditabeli. N\u00e4iteks saate laaditabeli j\u00e4rjekorda panna samasse PHP-konksu, mida kasutasime oma Javascripti faili j\u00e4rjekorda seadmiseks. Ma ei hakka \u00fcksikasjalikult kirjeldama, kuidas seda teha; kuid vajalik CSS on midagi sellist nagu allpool. Kui plokk on valitud, seab see ainult vahet\u00fcki <code>background-color<\/code>p\u00e4rilikule v\u00e4rvile (see p\u00e4rib meie \u00fcmbrisdivist):<\/p>\n<pre><code>.block-library-spacer__resize-container.is-selected { \n    background-color: inherit; \n}<\/code><\/pre>\n<p>PS: Pidage meeles, et see v\u00f5ib tulevikus muutuda. Gutenberg areneb endiselt tugevalt.<\/p>\n<h2>J\u00e4reldus<\/h2>\n<p>Selles postituses \u00f5ppisime kahte meetodit kohandatud s\u00e4tete rakendamiseks olemasolevatele WordPressi Gutenbergi plokkidele. See on t\u00e4iesti v\u00f5imalik lihtsate seadistuste puhul, mis n\u00f5uavad v\u00f5ib-olla ainult klassi v\u00f5i tekstisisest stiili. Vaatasime hoiatusi, mis loodetavasti parandatakse hilisemates Gutenbergi versioonides!<\/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>Selles postituses k\u00e4sitleme \u00fcksikasjalikult, kuidas lisada kohandatud s\u00e4tteid olemasolevatele WordPressi Gutenbergi plokkidele, kasutades kahte reaalse elu kasutusjuhtumite koodi n\u00e4idet.<\/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":[718,894,718,937,937,833,894,1110,842,833,842,863,863],"tags":[1165],"class_list":{"0":"post-233699","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-arendaja","8":"category-kood","10":"category-gutenberg-4","12":"category-juhend-algajatele","14":"category-n-a","15":"category-opetused","18":"category-wordpress-4","20":"tag-affiai-et"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=233699"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233699\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/152422"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=233699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=233699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=233699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}