{"id":233981,"date":"2023-02-27T12:46:00","date_gmt":"2023-02-27T09:46:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233981"},"modified":"2022-11-11T13:33:12","modified_gmt":"2022-11-11T10:33:12","slug":"kohandatud-gutenbergi-ploki-loomine-4-osa-atribuudid","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/kohandatud-gutenbergi-ploki-loomine-4-osa-atribuudid\/","title":{"rendered":"Kohandatud Gutenbergi ploki loomine \u2013 4. osa: atribuudid"},"content":{"rendered":"\n<p>Selles osas vaatleme, kuidas atribuute m\u00e4\u00e4ratleda, nende v\u00e4\u00e4rtusi hankida ja v\u00e4rskendada. Atribuutide abil saame vastu v\u00f5tta redaktori sisendit, salvestada selle ja v\u00e4ljastada, kuidas me valime. Eelmises <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\">etapis<\/a> vaatasime WordPressi komponente, kust neid leida ja kuidas neid juurutada. Selles postituses lisame rekvisiidid atribuutidega \u00fchenduse loomiseks \u2013 salvestatud andmetega.<\/p>\n<h2>Atribuutide m\u00e4\u00e4ratlemine<\/h2>\n<p>Atribuudid lisatakse objektidena massiivi <code>attributes<\/code>atribuudile asukohas <code>registerBlockType()<\/code>. Iga atribuudi v\u00f5ti on atribuudi nimi ja atribuut peab olema <code>type<\/code>v\u00e4hemalt.<\/p>\n<p>Vara <code>type<\/code>v\u00f5ib olla \u00fcks j\u00e4rgmistest; <code>null<\/code>, <code>boolean<\/code>, <code>object<\/code>, <code>array<\/code>, <code>number<\/code>, <code>string<\/code>, v\u00f5i <code>integer<\/code>.<\/p>\n<p>Soovi korral saate <code>default<\/code>oma atribuudi algv\u00e4\u00e4rtuse m\u00e4\u00e4ratlemiseks m\u00e4\u00e4rata atribuudi. Kui te vaikeseadet ei anna, on atribuudiks vaikimisi <code>null<\/code>.<\/p>\n<p>Teine atribuudi atribuut on <code>source<\/code>see, mis t\u00f6\u00f6tab atribuudiga koos <code>selector<\/code>, kuid need on peened asjad, mida me allpool \u00fcksikasjalikumalt vaatleme.<\/p>\n<p>N\u00e4iteks kahe atribuudi m\u00e4\u00e4ratlemine; <code>exampleText<\/code>stringina ja <code>postIds<\/code>massiivina n\u00e4eks v\u00e4lja selline:<\/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>K\u00f5ik, mida vajate oma ploki jaoks salvestamiseks (kasutaja\/redaktori sisend) n\u00f5uab atribuuti<\/strong>. Teie otsustate, kuidas oma andmeid struktureerite, m\u00e4\u00e4rates iga\u00fche jaoks eraldi atribuudid v\u00f5i koondades need k\u00f5ik \u00fchte objekti. Vahe on lihtsalt selles, kuidas te nende andmeid hankite ja kuidas neid v\u00e4rskendate.<\/p>\n<h2>Atribuutide v\u00e4\u00e4rtuste hankimine<\/h2>\n<p>Atribuudid on saadaval teie ploki <code>edit<\/code>ja <code>save<\/code>funktsioonide rekvisiididena. Kui olete j\u00e4rginud seda seeriat <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\">eelmisest etapist<\/a>, pidage meeles, et v\u00e4rskendasime funktsioone, et edastada parameetrina rekvisiidid.<\/p>\n<p>On tavaline, et atribuute <strong>h\u00e4vitatakse<\/strong> rekvisiitidest, nagu tavaliselt neile sageli viitate. N\u00e4iteks <code>exampleText<\/code>n\u00e4eks atribuudi v\u00e4ljastamine v\u00e4lja selline:<\/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>Atribuutide v\u00e4\u00e4rtuste v\u00e4rskendamine<\/h2>\n<p>Atribuutide v\u00e4rskendamiseks on meil rekvisiitides saadaval meetod nimega <code>setAttributes()<\/code>. See funktsioon aktsepteerib objekti, kuhu saate lisada mis tahes atribuudi, mida soovite v\u00e4rskendada. Saate v\u00e4rskendada ainult \u00fchte atribuuti, rohkem v\u00f5i k\u00f5iki korraga. Kui teil on m\u00e4\u00e4ratletud mitu atribuuti ja helistate <code>setAttributes()<\/code>ainult \u00fche neist v\u00e4rskendamiseks, siis teisi ei puudutata.<\/p>\n<p>Kui teil on Reactiga kogemusi, tunnete t\u00f5en\u00e4oliselt kohe \u00e4ra sarnasused <code>setAttributes()<\/code>ja vahel <code>setState()<\/code>. Need t\u00f6\u00f6tavad t\u00e4pselt samamoodi, kuid erinevus seisneb selles, et Reacti olek on lihtsalt selles komponendis lokaalselt salvestatud ja atribuudid salvestatakse tegelikult andmetena v\u00e4ljaspool komponenti.<\/p>\n<p>Atribuudi v\u00e4rskendamiseks peate tavaliselt funktsiooni rekvisiidist h\u00e4vitama ja nimetama seda nii: allpool v\u00e4rskendame <code>exampleText<\/code>atribuuti &quot;Tere&quot;.<\/p>\n<pre><code>const { setAttributes } = props;\nsetAttributes({ exampleText: 'Hi' });<\/code><\/pre>\n<p>Loomulikult k\u00e4ivitaksite <code>setAttributes()<\/code>m\u00f5ne toimingu seestpoolt. Tavaline n\u00e4ide on <code>onChange<\/code>rekvisiidi sees mingil sisendv\u00e4ljal, mida kasutatakse <code>exampleText<\/code>atribuudi v\u00e4\u00e4rtuse salvestamiseks.<\/p>\n<p>Salvestage atribuudid kindlasti atribuudis m\u00e4\u00e4ratletud t\u00fc\u00fcbis. Teil ei \u00f5nnestu n\u00e4iteks objekte stringatribuuti salvestada.<\/p>\n<p>Proovime seda praktikas! Algatage <code>npm run start<\/code>, kui te pole seda juba teinud.<\/p>\n<h2>Atribuudi kuvamine kohandatud tekstisisendis ja atribuudi v\u00e4\u00e4rtuse v\u00e4rskendamine<\/h2>\n<p>Eelmises etapis lisasime m\u00f5ned komponendid <code>edit<\/code>, nt tekstisisestus, kuid midagi ei salvestatud. Lisame oma plokki selle jaoks atribuudi ja \u00fche tekstisisestuse. M\u00f5lemad tagame, et tekstisisend n\u00e4itab praegust v\u00e4\u00e4rtust, ja kui sisendit muudetakse, v\u00e4rskendame atribuuti.<\/p>\n<h3>Tekstisisestuse ja selle <code>onChange<\/code>rekvisiidi lisamine<\/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>Destruktureerime <code>attributes<\/code>ja <code>setAttributes<\/code>alates <code>props<\/code>kuna kasutame m\u00f5lemat. Seej\u00e4rel kasutame <code>TextControl<\/code>komponenti WordPressi <code>wp.components<\/code>paketist. Anname sellele kaks rekvisiiti; <code>value<\/code>m\u00e4\u00e4rab sisendi v\u00e4\u00e4rtuse (nii algselt kui ka tippimise ajal) ja toimingu sisendi s\u00fcndmusele <code>onChange<\/code>.<\/p>\n<p>Seadistame <code>value<\/code>selle oma atribuudi v\u00e4\u00e4rtusele; <code>attributes.exampleText<\/code>. Juhul, kui <code>onChange<\/code>k\u00e4ivitame funktsiooni, edastades parameetrina meie sisendi tr\u00fckitud v\u00e4\u00e4rtuse <code>newtext<\/code>(sisendv\u00e4\u00e4rtus on komponendilt tagastatav rekvisiit). Selles funktsioonis kutsume <code>setAttributes()<\/code>v\u00e4lja ja v\u00e4rskendame atribuuti <code>exampleText<\/code>vastavalt sellele, mis sisestati sisendisse.<\/p>\n<p>See on p\u00f5hiline React \u2013 peale selle, et me t\u00f6\u00f6tame atribuutidega, mitte olekuga. Kui \u00fclaltoodu ajas teid segadusse, soovitan vaadata Reacti kiir\u00f5petust, kuna see selgitab seda t\u00f5en\u00e4oliselt paremini kui mina!<\/p>\n<p>V\u00e4rskendage oma redaktorit ja vaadake, kuidas plokk t\u00f6\u00f6tab! Asjade sisestamiseks peaksite hankima standardse tekstisisestuse ja see salvestatakse alati, kui vajutate postituse redigeerimisel nuppu Salvesta\/v\u00e4rskenda.<\/p>\n<h3>Tulemus frontendis ja andmebaasis<\/h3>\n<p>Kui vaatate oma postitust esiotsas, peaks see siiski kajama div-ga, millel on &quot;:)&quot;, sest see on meie <code>save<\/code>funktsioonis endiselt olemas. Aga lava taga on midagi juhtunud! Meie ploki kommentaariplokk sisaldab n\u00fc\u00fcd meie JSON-i atribuudi v\u00e4\u00e4rtust.<\/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=\"Kohandatud Gutenbergi ploki loomine \u2013 4. osa: atribuudid\" ><\/a><\/p>\n<p>Te ei n\u00e4e kommentaaride plokke mallis, mis teeb tavalist <code>the_content()<\/code>k\u00f5net. Kommentaariplokkide n\u00e4gemiseks on teil kaks v\u00f5imalust. Vaadake kas <code>post_content<\/code>postituste andmebaasi tabelit. V\u00f5i lisage <code>echo get_the_content()<\/code>mall ja vaadake seda kontrolli-\/silumist\u00f6\u00f6riistas.<\/p>\n<p>Ilmselgelt on meil juurdep\u00e4\u00e4s ka atribuutidele <code>save<\/code>, alates rekvisiitidest.<\/p>\n<h3>Sisendv\u00e4\u00e4rtuse kuvamine<code>save<\/code><\/h3>\n<p>Kuvame atribuudi v\u00e4\u00e4rtuse meie <code>save<\/code>funktsioonis div sees:<\/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>M\u00e4rkus. P\u00e4rast selle muudatuse tegemist kuvatakse postituses katkine plokk, kuhu olete selle ploki juba lisanud. See juhtub seet\u00f5ttu, et redaktor puutub kokku erineva v\u00e4ljundiga <code>save<\/code>kui see, mida oleme praegu m\u00e4\u00e4ratlenud. Eemaldage plokk ja lisage see uuesti. Sisestage midagi oma tekstisisestusse, v\u00e4rskendage postitust ja vaadake seda kasutajaliideses.<\/p>\n<p>Ja see on tegelikult asja tuum. Teie otsustate, milliseid atribuute vajate, et soovitud plokki salvestada. Te <code>edit<\/code>saate kasutajale sisestusviise, hoolitsedes selle eest, et kuvatakse praegused v\u00e4\u00e4rtused, ja v\u00e4rskendate neid alati, kui need muutuvad. Ja <code>save<\/code>ekstraheerite salvestatud atribuudid ja renderdate v\u00e4ljundi nii, nagu soovite.<\/p>\n<p>Selles \u00f5petusesarjas k\u00e4sitleme palju rohkem erinevaid komponente ja atribuute. Kuid vaatame veel \u00fcht selle postituse komponenti, et n\u00e4ha, mida atribuudi atribuut endast <code>source<\/code>kujutab.<\/p>\n<h2>RichText ja atribuudi atribuut<code>source<\/code><\/h2>\n<p>WordPressi <code>RichText<\/code>komponent annab teile &quot;\u00e4\u00e4risteta&quot; tekstiala koos tekstivormingu toega. V\u00f5ib-olla eelistaksite seda kasutada (inetu?) standardse tekstisisestuse v\u00f5i tekstiala asemel. Kuid pidage meeles, et seda <code>RichText<\/code>tuleb k\u00e4sitleda veidi erinevalt, kuna on mitmeid rekvisiite, millest peate teadma, ja see, kuidas me oma <code>save<\/code>funktsiooni v\u00e4\u00e4rtust saavutame, on erinev.<\/p>\n<h3><code>RichText<\/code>Komponendi lisamine<\/h3>\n<p>Lihtsaim vorm <code>RichText<\/code>on selle rakendamine nagu tekstisisestuse korral:<\/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>Destruktureerime <code>RichText<\/code>komponendi <code>wp.blockEditor<\/code>paketist, kuid muidu on \u00fclaltoodu identne sellega, mida tegime standardse tekstisisestuse puhul.<\/p>\n<h3>K\u00e4sitsemine <code>save<\/code>koos<code>RichText<\/code><\/h3>\n<p>Kuid <code>save<\/code>funktsioonis peate <code>RichText<\/code>atribuudi v\u00e4\u00e4rtuse saamiseks komponenti uuesti kasutama. Helistame <code>RichText.Content<\/code>ja seadistame rekvisiidi <code>value<\/code>oma atribuudile:<\/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>See v\u00e4ljastab k\u00f5ik, mis redaktorisse sisestati, <code>RichText<\/code>otse ilma HTML-i \u00fcmbritsemata.<\/p>\n<p>Kui t\u00f6\u00f6tate koos <code>RichText<\/code>teiega, soovite suure t\u00f5en\u00e4osusega juhtida teksti \u00fcmber olevat HTML-i \u00fcmbrist, n\u00e4iteks a <code>&lt;p&gt;<\/code>v\u00f5i a <code>&lt;h2&gt;<\/code>, nii kasutajaliideses kui ka redaktoris. Selleks saame kasutada rekvisiiti nimega <code>tagName<\/code>.<\/p>\n<p>Komponent <code>RichText<\/code>v\u00f5imaldab ka mitmeid muid rekvisiite. Saate m\u00e4\u00e4rata kohat\u00e4ideteksti, mida kuvatakse (kaotakse), kui see on t\u00fchi koos <code>placeholder<\/code>rekvisiidiga. Samuti v\u00f5imaldab komponent juhtida, milliseid vormindamisvalikuid v\u00e4li lubab (millisi nuppe see t\u00f6\u00f6riistaribal n\u00e4itab).<\/p>\n<h3><code>RichText<\/code>koos<code>tagName<\/code><\/h3>\n<p>Rekvisiidiga <code>tagName<\/code>saate eelm\u00e4\u00e4ratleda, millisesse HTML-i m\u00e4rgendisse selle v\u00e4ljund m\u00e4hitakse. Kasutamisel <code>tagName<\/code>peaksite kasutama sama <code>tagName<\/code>rekvisiidi ja v\u00e4\u00e4rtust m\u00f5lemas <code>edit<\/code>ja <code>save<\/code>.<\/p>\n<p>Oletame, et soovite oma atribuudi v\u00e4\u00e4rtuse panna <code>&lt;h2&gt;<\/code>, mis muudab redaktoris iga sisendi v\u00e4\u00e4rtuseks h2. Siin <code>edit<\/code>saate teha:<\/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>Ja sisse <code>save<\/code>:<\/p>\n<pre><code>&lt;RichText.Content \n    tagName=\"h2\"\n    value={attributes.myRichText}\n\/&gt;<\/code><\/pre>\n<p>\u00dclaltoodud v\u00e4ljastab n\u00fc\u00fcd k\u00f5ik, mis on kirjutatud sildi <code>RichText<\/code>sees olevasse piirkonda .<code>&lt;h2&gt;<\/code><\/p>\n<h3>Kasutades<code>source<\/code><\/h3>\n<p>Ilmselgelt saate ploki jaoks kombineerida mitu rikasteksti, n\u00e4iteks \u00fche pealkirja ja teise l\u00f5igu jaoks. Pidage meeles, et iga\u00fcks vajab oma atribuuti. N\u00e4iteks:<\/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>Kuid n\u00fc\u00fcdseks hakkate tekkima m\u00f5ningaid probleeme. Kuigi saate redigeerijas teksti vormindada, ei salvestata midagi (v\u00f5i m\u00f5nda vormingust). Kui vaatate postitust esiservas, kuvatakse see lihtsalt kujul <code>h2<\/code>ja <code>p<\/code>, ilma et oleksite vormindanud (kaldkiri, paksus kirjas, link). Isegi teie ploki kommentaariplokk ei sisalda vormingut. See on keeruline asi <code>RichText<\/code>. Selle lahendamiseks peame t\u00f6\u00f6tama atribuudi atribuudiga <code>source<\/code>.<\/p>\n<p>Atribuut <code>source<\/code>, mis v\u00f5imaldab WordPressil sisu otse postituse sisust v\u00e4lja v\u00f5tta ja t\u00f5lgendada. Kui atribuuti pole <code>source<\/code>m\u00e4\u00e4ratud, salvestatakse see HTML-i kommentaariplokki ja ekstraheeritakse see sealt.<\/p>\n<p>T\u00f6\u00f6tades <code>RichText<\/code>me tavaliselt m\u00e4\u00e4rame <code>source<\/code>, <code>html<\/code>mis kasutab HTML-m\u00e4rgistuse s\u00f5elumiseks WordPressi teeki. Atribuut <code>source<\/code>t\u00f6\u00f6tab koos teise atribuudi atribuudiga; <code>selector<\/code>mis m\u00e4\u00e4rab, millisest HTML-i m\u00e4rgendist see peaks ekstraktima.<\/p>\n<p>N\u00e4itena m\u00e4\u00e4rame <code>source<\/code>oma <code>html<\/code>l\u00f5igule asendi <code>RichText<\/code>ja m\u00e4\u00e4rame <code>selector<\/code>kui <code>p<\/code>(muidu vaikimisi on see ploki juur).<\/p>\n<pre><code>attributes: {\n    ...\n    myRichText: {\n        type: 'string',\n        source: 'html',\n        selector: 'p'\n    }\n},<\/code><\/pre>\n<p>N\u00fc\u00fcd <code>RichText<\/code>peaks meie teine \u200b\u200b\u200b\u200bkogu tekstivormingu edukalt salvestama. Samuti m\u00e4rkate, et kommentaariplokk kuvab n\u00fc\u00fcd ainult <code>myRichHeading<\/code>JSON-i atribuuti. Atribuut <code>myRichText<\/code>on kommentaariplokist t\u00e4ielikult kadunud. Selle p\u00f5hjuseks on asjaolu, et <code>source<\/code>WordPress anal\u00fc\u00fcsib n\u00fc\u00fcd atribuudi v\u00e4\u00e4rtuse kommentaariploki asemel postituse sisu.<\/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=\"Kohandatud Gutenbergi ploki loomine \u2013 4. osa: atribuudid\" ><\/a><\/p>\n<p>Kui aus olla, ei ole ma selle <code>source<\/code>atribuudiga \u00fcldse nii palju t\u00f6\u00f6tanud ja soovitan v\u00f5imalusel seda v\u00e4ltida. WordPressi dokumentatsioon selgitab m\u00f5nev\u00f5rra rohkem <a href=\"https:\/\/developer.wordpress.org\/block-editor\/developers\/block-api\/block-attributes\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">allika ja atribuutide<\/a> kohta, mida soovite ise kontrollida.<\/p>\n<p>Selles postituses oleme \u00f5ppinud atribuutide p\u00f5hit\u00f5desid; kuidas neid defineerida, v\u00e4rskendada ja nende v\u00e4\u00e4rtusi v\u00e4ljastada. J\u00e4rgmistes sammudes vaatame rohkem erinevaid komponente ja seda, kuidas lisada s\u00e4tteid v\u00e4ljaspool ploki sisu; t\u00f6\u00f6riistaribal ja redaktori k\u00fclgribal (nimega Inspector).<\/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 algajatele m\u00f5eldud Gutenbergi ploki \u00f5ppet\u00fckis vaatleme, kuidas atribuute m\u00e4\u00e4ratleda, nende v\u00e4\u00e4rtusi hankida ja v\u00e4rskendada.<\/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":[937,937,1110,842,812,812,842,863,863],"tags":[1165],"class_list":["post-233981","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gutenberg-4","category-n-a","category-opetused","category-pistikprogrammid","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233981","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=233981"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233981\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/151358"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=233981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=233981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=233981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}