{"id":233642,"date":"2023-02-19T18:16:00","date_gmt":"2023-02-19T15:16:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233642"},"modified":"2022-11-11T00:47:42","modified_gmt":"2022-11-10T21:47:42","slug":"looge-kohandatud-gutenbergi-plokk-9-osa-duenaamilised-plokid-ja-php-renderdus","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/looge-kohandatud-gutenbergi-plokk-9-osa-duenaamilised-plokid-ja-php-renderdus\/","title":{"rendered":"Looge kohandatud Gutenbergi plokk \u2013 9. osa: d\u00fcnaamilised plokid ja PHP renderdus"},"content":{"rendered":"\n<p>Siiani oleme renderdanud ploki v\u00e4ljundi Javascriptis. D\u00fcnaamilise sisu puhul, nagu hiljutised postitused v\u00f5i postituse kuvamine, peame aga ploki v\u00e4ljundi PHP-s renderdama. Sellest postitusest \u00f5pime, kuidas ja miks.<\/p>\n<h2>Miks peame d\u00fcnaamilisi plokke erinevalt k\u00e4sitlema?<\/h2>\n<p>M\u00f5ned n\u00e4ited on ilmsed; plokk, mis kuvab kategooria viimaseid postitusi, on d\u00fcnaamiline, kuna postitused muutuvad aja jooksul. Te ei vali ploki postitusi; selle asemel on teil t\u00f5en\u00e4oliselt seaded kategooria valimiseks, iga postituse kohta kuvatava teabe, postituste arvu, veergude arvu jne jaoks. Iga kord, kui WordPress laadib selle plokiga postituse, peab ta sel ajal WordPressist uusimate postituste jaoks p\u00e4ringu tegema. Sama postituse vaatamine j\u00e4rgmisel kuul v\u00f5ib anda teistsuguseid tulemusi, kuigi blokiga postitust pole v\u00e4rskendatud.<\/p>\n<p>Kuid d\u00fcnaamiliste plokkide vajadus pole m\u00f5nikord nii ilmne. V\u00f5ite ette kujutada, et esiletoodud postituste plokk, kus valite selle kuvamiseks \u00fche kindla postituse, ei pruugi olla d\u00fcnaamiline. Aga see v\u00f5ib olla \u2013 ja peaks olema. Pidage meeles, et valitud postitus v\u00f5ib oma pealkirja, v\u00e4ljav\u00f5tet v\u00f5i esiletoodud pilti igal ajal v\u00e4rskendada \u2013 ja see peaks kajastuma seda postitust sisaldavates plokkides.<\/p>\n<p>\u00dche postituse kuvamiseks mitted\u00fcnaamilise ploki loomiseks peate ploki atribuutidesse salvestama postituse ID, selle URL-i, esiletoodud pildi URL-i, v\u00e4ljav\u00f5tte stringi v\u00f5i muu, mida vajate postituse eelvaate kuvamiseks. Ja siin peitubki probleem. Kui v\u00e4rskendate valitud postituse esiletoodud pilti, ei v\u00e4rskenda esilet\u00f5stetud postituse plokiga postitus automaatselt selle atribuute. See salvestatakse koos vana esiletoodud pildi URL-iga. Ainult siis, kui muudate postitust plokiga ja veenduge, et see salvestab atribuudid koos v\u00e4rskendatud teabega uuesti, kuvatakse plokis \u00f5ige v\u00e4rskendatud teave.<\/p>\n<p>Nii et kui k\u00e4sitleme d\u00fcnaamilist sisu \u2013 postitusi, kategooriaid v\u00f5i k\u00f5ike, mis v\u00f5ib aja jooksul muutuda \u2013, on tegemist d\u00fcnaamiliste plokkidega. Ja d\u00fcnaamiliste plokkide jaoks peame oma ploki renderdamiseks kasutama PHP-d \u2013 serveripoolset koodi \u2013 tagamaks, et see hangib v\u00e4rskendatud teabe iga kord, kui see renderdab.<\/p>\n<h2>D\u00fcnaamiliste plokkide olemus redaktoris<\/h2>\n<p>Kui hakkate d\u00fcnaamilisi plokke arendama, muutub teie ploki olemus redaktoris. Teie ploki <code>edit<\/code>funktsioon peab sageli olema ka d\u00fcnaamiline. N\u00e4iteks esilet\u00f5stetud postituste ploki jaoks peate hankima postitused, mille hulgast valida, v\u00f5i viimaste uudisteploki jaoks peate hankima kategooriate loendi, mille vahel kasutaja saab valida.<\/p>\n<p>T\u00e4ielikult on v\u00f5imalik WordPressist teavet p\u00e4rida redaktorist, tehes AJAX p\u00e4ringuid \u2013 kas pakette ja komponente kasutades v\u00f5i k\u00e4sitsi <a href=\"https:\/\/developer.wordpress.org\/rest-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress REST API<\/a> -ga teostades. Olenemata sellest, millist meetodit kasutate, peab plokk k\u00e4sitlema as\u00fcnkroonitud sisendvoogu \u2013 vastust ootama j\u00e4\u00e4vat ajavahemikku.<\/p>\n<p>Gutenbergi jaoks d\u00fcnaamilise ploki loomiseks on mitu meetodit ja mustrit. Enamasti kasutate Reacti mustrit, mida nimetatakse <a href=\"https:\/\/reactjs.org\/docs\/higher-order-components.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">k\u00f5rgema j\u00e4rgu komponentideks<\/a>, mille jaoks WordPress pakub palju funktsioone ja komponente.<\/p>\n<p>J\u00e4rgmises \u00f5petuse osas vaatame, kuidas postitusi tuua ja kategooriaid meie plokis tuua. Praegu peame \u00f5ppima, kuidas panna PHP meie plokki renderdama.<\/p>\n<h2>Meie ploki valmistamine PHP renderdamiseks<\/h2>\n<p>Peamine osa, mida peame Javascriptis tegema, on ploki <code>save<\/code>funktsiooni tagastamine <code>null<\/code>. V\u00f5ite originaalv\u00e4ljundi alles j\u00e4tta, kuid kui me \u00fctleme WordPressile, et ta kasutaks ploki renderdamiseks PHP-d, siis seda ignoreeritakse. Et teha endale ja teistele selgeks, et ploki v\u00e4ljundit Javascriptis ei k\u00e4sitleta, muudame <code>save<\/code>funktsiooni.<\/p>\n<pre><code>registerBlockType('awp\/firstblock', {\n    title: __('My first block', 'awhitepixel'), \n    category: 'common',\n    ...\n    edit: FirstBlockEdit,\n    save:() =&gt; { return null }\n});<\/code><\/pre>\n<p>\u00c4rge unustage, et salvestamisfunktsiooni muutmine muudab k\u00f5ik olemasolevad plokid katki. Lisage plokk uuesti. Plokk peaks t\u00f6\u00f6tama nagu varem; seadete ja atribuutide v\u00e4rskendamisega. N\u00fc\u00fcd lihtsalt ei v\u00e4ljasta see eess\u00fcsteemis midagi. Kommentaariplokk on seal, salvestades k\u00f5ik JSON-i atribuudid, kuid n\u00e4htavat HTML-i ei renderdata.<\/p>\n<p>Kuid; kui m\u00f5ni teie atribuutidest kasutab seda <code>source<\/code>atribuuti, peate seda muutma. Seda ei toetata PHP-ga renderdatud plokkide puhul, kuna need s\u00f5elutakse otse salvestuse v\u00e4ljundist \u2013 mille me n\u00fc\u00fcd tagasi p\u00f6\u00f6rdume <code>null<\/code>. Kasutame <code>RichText<\/code>oma ploki teises allikas \u2013 l\u00f5igu jaoks. Sel hetkel ei salvesta toimetaja seda, mida te sellesse panite <code>RichText<\/code>.<\/p>\n<p>Seega, kui kasutate endiselt <code>source<\/code>atribuuti <code>myRichText<\/code>, peame eemaldama atribuudid <code>source<\/code>ja <code>selector<\/code>tagamaks, et atribuudid salvestatakse ja neid ei s\u00f5eluda <code>save<\/code>funktsioonist:<\/p>\n<pre><code>attributes: {\n    ...\n    myRichText: {\n        type: 'string',\n    },\n    ...<\/code><\/pre>\n<p>P\u00e4rast seda on meie plokk PHP-s renderdamiseks valmis. Javascripti failid saame j\u00e4tta (\u00e4rge unustage seda ehitada) ja \u00fclej\u00e4\u00e4nu tehakse PHP-s.<\/p>\n<h2>Plokkide renderdamine PHP-s<\/h2>\n<p>Selleks, et k\u00e4skida WordPressil ploki v\u00e4ljund PHP-s renderdada, lisame funktsioonile uue argumendi <code>register_block_type()<\/code>. Peame <code>render_callback<\/code>massiivile lisama v\u00f5tme koos selle funktsiooni v\u00e4\u00e4rtusega, mida see peaks k\u00e4ivitama.<\/p>\n<pre><code>add_action('init', function() {\n    register_block_type('awp\/firstblock', [\n        'editor_script' =&gt; 'awp-myfirstblock-js',\n        'render_callback' =&gt; 'awp_myfirstblock_render'\n    ]);\n});<\/code><\/pre>\n<h3>PHP renderdusfunktsioon<\/h3>\n<p>M\u00e4\u00e4ratleme funktsiooni <code>awp_myfirstblock_render<\/code>allpool <code>functions.php<\/code>(v\u00f5i kuhu iganes olete oma PHP-koodi pannud). Meie funktsioon saab kaks parameetrit; me helistame neile <code>$attr<\/code>ja <code>$content<\/code>.<\/p>\n<pre><code>function awp_myfirstblock_render($attr, $content) {\n    \/\/ return the block's output here\n}<\/code><\/pre>\n<p>Parameeter <code>$attr<\/code>on assotsiatiivne massiiv koos k\u00f5igi salvestatud atribuutidega. Teine parameeter, <code>$content<\/code>on meie ploki sees olevate plokkide jaoks. See kehtib ainult nende plokkide puhul, mis toetavad pesastatud plokke \u2013 mida n\u00e4iteks veerud v\u00f5i kaaned teevad.<\/p>\n<p>Funktsioon ei tohiks kunagi <code>echo<\/code>midagi v\u00e4lja kukkuda. Kogu v\u00e4ljund tuleb tagastada, nii et peate koostama stringi ja tagastama selle l\u00f5pus.<\/p>\n<p>Midagi olulist atribuutide puhul meeles pidada on see, et funktsiooni esimeses parameetris kuvatakse ainult salvestatud atribuudid. Kui atribuuti tegelikult kunagi ei muudetud ega salvestatud \u2013 st lihtsalt tuginedes selle <code>default<\/code>, siis seda atribuuti meie PHP funktsiooni jaoks \u00fcldse ei kaasata.<\/p>\n<p>Peate seda probleemi lahendama kas alati kontrollides <code>if (isset($attr['...']))<\/code>v\u00f5i eelistatud viisil: m\u00e4\u00e4ratledes meie <code>register_block_type()<\/code>k\u00f5nes olevad atribuudid. Saame anda teise v\u00f5tme <code>attributes<\/code>ja m\u00e4\u00e4rata selle v\u00e4\u00e4rtuse massiivile, millel on k\u00f5ik atribuudid, mida soovime oma plokist eraldada. Struktuur peaks olema identne Javascriptis m\u00e4\u00e4ratletuga, kuid Javascripti objekti asemel vajate seda PHP massiivi. Samade atribuutide uuesti m\u00e4\u00e4ratlemine v\u00f5ib olla pisut t\u00fclikas, kuid nutika koodiredaktoriga peaks selle kopeerimine+kleepimine ja mitmerealine muutmine PHP-sse \u00fcsna kiire.<\/p>\n<h3>Meie renderdusfunktsiooni atribuutide lisamine<\/h3>\n<p>Lisame uue <code>attributes<\/code>elemendi <code>register_block_type()<\/code>ja kleepime t\u00e4pselt samadele atribuutidele, mille m\u00e4\u00e4ratlesime oma Javascripti failis:<\/p>\n<pre><code>add_action('init', function() {\n    register_block_type('awp\/firstblock', [\n        'editor_script' =&gt; 'awp-myfirstblock-js',\n        'render_callback' =&gt; 'awp_myfirstblock_render',\n        'attributes' =&gt; [\n            'myRichHeading' =&gt; [\n                'type' =&gt; 'string'\n            ],\n            'myRichText' =&gt; [\n                'type' =&gt; 'string'\n            ],\n            'textAlignment' =&gt; [\n                'type' =&gt; 'string',\n            ],\n            'toggle' =&gt; [\n                'type' =&gt; 'boolean',\n                'default' =&gt; true\n            ],\n            'favoriteAnimal' =&gt; [\n                'type' =&gt; 'string',\n                'default' =&gt; 'dogs'\n            ],\n            'favoriteColor' ==&gt; [\n                'type' =&gt; 'string',\n                'default' =&gt; '#DDDDDD'\n            ],\n            'activateLasers' =&gt; [\n                'type' =&gt; 'boolean',\n                'default' =&gt; false\n            ],\n        ]\n    ]);\n});\n\u00a0\nfunction awp_myfirstblock_render($attr, $content) {\n    return '&lt;div&gt;'.$attr['favoriteColor'].'&lt;\/div&gt;';\n}<\/code><\/pre>\n<p>Pidage meeles, et kui m\u00e4\u00e4rate a <code>default<\/code>k\u00f5igi atribuutide jaoks, <code>$attr<\/code>peaks teie funktsiooni parameeter alati sisaldama k\u00f5iki atribuute. N\u00e4iteks <code>textAlignment<\/code>\u00fclaltoodud atribuut eksisteerib ainult siis, <code>$attr<\/code>kui seda muudeti \u2013 ja peate kontrollima <code>isset($attr['textAlignment'])<\/code>.<\/p>\n<p>Kahjuks on praegu kaks asja, <strong>millest te PHP-ploki renderdamisega aru ei saa<\/strong>. \u00dcks on <code>className<\/code>rekvisiit \u2013 seega tuleb \u00fcmbrisklass (kui soovite) ise ehitada. Teine on <code>support<\/code>plokkide joondamise omadus. Hetkel WordPress seda atribuuti d\u00fcnaamilistes plokkides ei toeta. Me ei saa valitud ploki joonduse v\u00e4\u00e4rtust k\u00e4tte, kui me ei muuda seda atribuudiks ja k\u00e4sitleme seda k\u00e4sitsi Javascriptis.<\/p>\n<p>Funktsiooni HTML-v\u00e4ljundi osas on see t\u00e4ielikult teie otsustada!<\/p>\n<h2>PHP renderduse taotlemine sisemisest redaktorist<\/h2>\n<p>Redaktori sees on v\u00f5imalik taotleda meie ploki PHP-renderdust. See on kasulik, kui soovite n\u00e4ha redaktoris ploki v\u00e4ljundi eelvaadet. Seda saame teha paketist kutsutud <code>ServerSideRender<\/code>komponendiga <code>wp.editor<\/code>.<\/p>\n<p>Rekvisiidina <code>ServerSideRender<\/code>peate m\u00e4\u00e4ratlema k\u00f5ik atribuudid, mida soovite edasi anda. Peate rekvisiidile esitama v\u00e4hemalt ploki nime <code>block<\/code>, et WordPress teaks, millist renderdamismeetodit otsida. See on teile <code>props.name<\/code>funktsioonis saadaval <code>edit<\/code>. Samuti peate rekvisiidis esitama k\u00f5ik vajalikud atribuudid <code>attributes<\/code>. Soovi korral saate siia lisada ka atribuutide v\u00e4liseid kohandatud muutujaid. Pidage lihtsalt meeles, et see toimib ainult siseredaktoris, mitte kasutajaliideses.<\/p>\n<p>Te ei saa kasutada <code>ServerSideRender<\/code>ploki <code>save<\/code>funktsioonis. Teie <code>save<\/code>funktsioon peab siiski tagastama <code>null<\/code>.<\/p>\n<p>Rakendame <code>ServerSideRender<\/code>oma plokis, et seda praktikas n\u00e4ha.<\/p>\n<h3>ServerSideRenderi kasutamine plokkide eelvaate\/redigeerimisre\u017eiimi jaoks<\/h3>\n<p>Kui j\u00e4rgisite eelmist sammu, kus tegime oma ploki jaoks eelvaate\/redigeerimisre\u017eiimi l\u00fcliti, saame n\u00fc\u00fcd kasutada <code>ServerSideRender<\/code>eelvaatere\u017eiimi l\u00fclitumisel PHP-st ploki eelvaate renderdamist.<\/p>\n<p>K\u00f5igepealt peame meeles pidama <code>ServerSideRender<\/code>\u00fclaosas destruktureerimist:<\/p>\n<pre><code>const { ServerSideRender } = wp.editor;<\/code><\/pre>\n<p>Kui m\u00e4letate eelmisest sammust, kasutasime komponente <code>Disabled<\/code>ja\/v\u00f5i <code>Placeholder<\/code>eelvaate hoidmiseks. Kasutamise probleem <code>Placeholder<\/code>seisneb selles, et meie v\u00e4ljundile rakendatakse soovimatut stiili. Asendame. <code>Placeholder<\/code>_ <code>ServerSideRender<\/code>Saate valida <code>Disabled<\/code>komponendi allesj\u00e4tmise tagamaks, et selle sisu pole kl\u00f5psatav ega lohistatav.<\/p>\n<p>Koodi juures ploki renderdamiseks, kui atribuut <code>editMode<\/code>on vale, teeme j\u00e4rgmist:<\/p>\n<pre><code>...\n{!this.state.editMode &amp;&amp; \n    &lt;ServerSideRender\n        block={this.props.name}\n        attributes={{ \n            myRichHeading: attributes.myRichHeading, \n            myRichText: attributes.myRichText, \n            textAlignment: attributes.textAlignment, \n            toggle: attributes.toggle, \n            favoriteAnimal: attributes.favoriteAnimal, \n            favoriteColor: attributes.favoriteColor,\n            activateLasers: attributes.activateLasers\n        }}\n    \/&gt;\n}\n...<\/code><\/pre>\n<p>N\u00fc\u00fcd renderdab meie kohandatud nupp t\u00f6\u00f6riistaribal PHP v\u00e4ljundi, kui l\u00fclitame eelvaatere\u017eiimi. V\u00e4ljund peaks olema identne, kui vaatate postitust esik\u00fcljel. See on hea komme tagada, et v\u00e4ljund oleks nii redaktoris kui ka kasutajaliideses identne.<\/p>\n<h2>N\u00e4ide: d\u00fcnaamiline plokk, mis n\u00e4itab valitud postitust<\/h2>\n<p>Teie PHP renderdusfunktsiooni v\u00e4ljund v\u00f5ib olla \u00fcksk\u00f5ik milline ja teil on t\u00e4ielik juurdep\u00e4\u00e4s k\u00f5igile WordPressi funktsioonidele. Oletame plokki, kus postituse ID salvestatakse atribuudis. PHP funktsioonis <code>render_callback<\/code>saate ID-st postitust p\u00e4rida ja selle teavet v\u00e4ljastada. See peaks olema \u00fcsna iseenesestm\u00f5istetav, kuidas seda teha, kuid siin on kiire n\u00e4ide.<\/p>\n<p><strong>NB!<\/strong> Selles n\u00e4ites lisame lihtsalt redaktorisse tekstisisestuse postituse ID k\u00e4sitsi sisestamiseks. See ei ole v\u00e4ga intuitiivne ja kasutajas\u00f5bralik lahendus postituse valimiseks \u2013 aga seda \u00f5pime j\u00e4rgmises etapis. Siin keskendutakse valitud postituse renderdamise PHP osale.<\/p>\n<p>Lisame atribuudi <code>selectedPostId<\/code>t\u00fc\u00fcbi number:<\/p>\n<pre><code>attributes: {\n    selectedPostId: {\n        type: 'number'\n    }\n}<\/code><\/pre>\n<p>Ja kuskil meie ploki <code>edit<\/code>funktsiooni sees lisame <code>TextControl<\/code>komponendi. See v\u00f5ib olla kus iganes soovite \u2013 plokis v\u00f5i Inspektoris.<\/p>\n<pre><code>&lt;TextControl \n    label={__(\"Type in post ID\", 'awhitepixel')}\n    type=\"number\"\n    value={attributes.selectedPostId}\n    onChange={(newval) =&gt; setAttributes({ selectedPostId: parseInt(newval) })}\n\/&gt;<\/code><\/pre>\n<p>Pange t\u00e4hele, et hoolitsen selle eest, et sisend salvestaks atribuudi \u00f5igesti numbrina, teisendades selle t\u00e4isarvuks <code>parseInt()<\/code>. Kuigi m\u00e4\u00e4rasime numbrisisendi renderdamiseks t\u00fc\u00fcbi prop <code>type<\/code>v\u00e4\u00e4rtusele <code>number<\/code>, t\u00f5lgendatakse muudetud v\u00e4\u00e4rtust ikkagi stringina. WordPress ei salvesta teie atribuuti, kui see on vales vormingus.<\/p>\n<p>\u00c4rge unustage lisada oma <code>ServerSideRender<\/code>komponendile uut atribuuti, kui teil see on:<\/p>\n<pre><code>&lt;ServerSideRender\n    block={this.props.name}\n    attributes={{ \n        selectedPostId: attributes.selectedPostId,\n        ...<\/code><\/pre>\n<h3>PHP osa<\/h3>\n<p>See oleks pidanud hoolitsema Javascripti osa eest. Liigume edasi PHP juurde. K\u00f5igepealt peame massiivile <code>selectedPostId<\/code>lisama uue atribuudi :<code>attributes``register_block_type()<\/code><\/p>\n<pre><code>register_block_type('awp\/firstblock', [\n    'editor_script' =&gt; 'awp-myfirstblock-js',\n    'render_callback' =&gt; 'awp_myfirstblock_render',\n    'attributes' =&gt; [\n        'selectedPostId' =&gt; [\n            'type' =&gt; 'number',\n            'default' =&gt; 0\n        ],\n        ...\n    ]\n]);<\/code><\/pre>\n<p>Funktsioonis <code>render_callback<\/code>p\u00e4\u00e4seme n\u00fc\u00fcd postituse ID-le juurde <code>$attr['selectedPostId']<\/code>. Sellega saame teha lihtsa <code>get_post()<\/code>ja v\u00e4ljastada postituse andmed; selle link ja pealkiri:<\/p>\n<pre><code>function awp_myfirstblock_render($attr, $content) {\n    $str = '';\n    if ($attr['selectedPostId'] &gt; 0) {\n        $post = get_post($attr['selectedPostId']);\n        if (!$post) {\n            return $str;\n        }\n        $str = '&lt;div class=\"awp-myfirstblock\"&gt;';\n        $str .= '&lt;a href=\"'. get_the_permalink($post). '\"&gt;';\n        $str .= '&lt;h3&gt;'. get_the_title($post). '&lt;\/h3&gt;';\n        $str .= '&lt;\/a&gt;';\n        $str .= '&lt;\/div&gt;';\n    }\n    return $str;\n}<\/code><\/pre>\n<p>See on v\u00e4ga lihtne n\u00e4ide, mis on m\u00f5eldud h\u00fcppelauaks t\u00e4psema ja kohandatud koodi kirjutamiseks.<\/p>\n<p>N\u00fc\u00fcd, kui teame, kuidas d\u00fcnaamiliste plokkide renderdamist k\u00e4sitleda, on j\u00e4rgmine samm \u00f5ppida, kuidas muuta ka redaktori osa intuitiivsemaks. J\u00e4rgmises etapis keskendume sellele, kuidas teha postitusi plokiredaktorist p\u00e4ringuid ja pakkuda kasutajale paremat viisi postituse valimiseks.<\/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>D\u00fcnaamilise ploki sisu puhul, nagu hiljutised postitused v\u00f5i postituse kuvamine, peame ploki v\u00e4ljundi PHP-s renderdama. Sellest postitusest \u00f5pime, kuidas ja miks.<\/p>\n","protected":false},"author":1,"featured_media":152680,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[894,937,937,894,1110,842,802,802,842,863,863],"tags":[1165],"class_list":{"0":"post-233642","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-kood","8":"category-gutenberg-4","11":"category-n-a","12":"category-opetused","13":"category-php-4","16":"category-wordpress-4","18":"tag-affiai-et"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233642","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=233642"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233642\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/152680"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=233642"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=233642"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=233642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}