{"id":233659,"date":"2023-02-19T20:42:00","date_gmt":"2023-02-19T17:42:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233659"},"modified":"2022-11-11T03:18:19","modified_gmt":"2022-11-11T00:18:19","slug":"kuidas-php-ga-gutenbergi-plokkidele-juurde-paeaeseda-ja-neid-analueuesida","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/kuidas-php-ga-gutenbergi-plokkidele-juurde-paeaeseda-ja-neid-analueuesida\/","title":{"rendered":"Kuidas PHP-ga Gutenbergi plokkidele juurde p\u00e4\u00e4seda ja neid anal\u00fc\u00fcsida"},"content":{"rendered":"\n<p>Selles postituses vaatleme, kuidas s\u00f5eluda postituse Gutenbergi plokke ja ekstraheerida konkreetseid plokke, et teha midagi muud. Vaatleme WordPressi PHP funktsioone valitud plokkide s\u00f5elumiseks, ekstraktimiseks ja renderdamiseks.<\/p>\n<p>WordPressi uue Gutenbergi redaktori \u00fcks eeliseid on postitussisu struktureeritumad andmed. Vanasti salvestati k\u00f5ike HTML-ina ja konkreetseid sisul\u00f5ike ei olnud v\u00f5imalik ilma v\u00e4ga keerukate regulaaravaldisteta v\u00e4lja v\u00f5tta. Kuid Gutenbergi puhul on iga sisuosa, olgu see l\u00f5ik, pealkiri, pilt, video, nupp v\u00f5i veerg, mille sees on muid plokke, salvestatud teabega, mis \u00fctleb meile, mis see sisu on.<\/p>\n<p>Sisseehitatud WordPressi funktsioonide abil on v\u00e4ga lihtne tuua k\u00f5ik postituse sisu plokid massiivina koos kogu nende teabega. See avab teemaarendajatele palju kasulikke funktsioone. Lihtsalt mainides m\u00f5nda ideed:<\/p>\n<ul>\n<li>Looge d\u00fcnaamiliselt sisukord, hankides k\u00f5ik pealkirjad (\u00f5petus allpool).<\/li>\n<li>Hankige k\u00f5ik postitustes kasutatud videod, pildid v\u00f5i tsitaadid, et need k\u00f5ik kokku koguda ja teisele lehele loetleda.<\/li>\n<li>Tehke postituse esimene l\u00f5ik v\u00e4lja ja kasutage seda arhiivis v\u00e4ljav\u00f5ttena (\u00f5petus allpool).<\/li>\n<li>Saate \u00fclevaate konkreetsete klotside kasutamisest ja nende asukohast. Oletame n\u00e4iteks, et teil on kohandatud reklaamiplokk ja peate teadma, kui sageli seda teie postitustes kasutatakse ja kui kaugele sisus need ilmuvad.<\/li>\n<li>Renderdage postituse plokid, kuid v\u00e4listage teatud plokit\u00fc\u00fcbid.<\/li>\n<li>Kontrollige, kas postituse sisu algab videoga, ja kasutage seda videot arhiivis esiletoodud pildi asemel.<\/li>\n<li>Kui kasutate kohandatud plokki, mis sisaldab toodete tehnilisi andmeid, saate h\u00f5lpsalt luua lehe, mis kuvab ja v\u00f5rdleb tootepostituste tehnilisi n\u00e4itajaid.<\/li>\n<li>Koguge d\u00fcnaamiliselt kokku k\u00f5ik postituses kasutatud \u00fcksikud pildid ja looge nendest l\u00f5pus v\u00f5i mujal galerii.<\/li>\n<\/ul>\n<p>H\u00fcppame otse sellesse!<\/p>\n<h2>Parsi postituse plokke<\/h2>\n<p>Plokkide s\u00f5elumiseks kasutame WordPressi funktsiooni <code>[parse_blocks](https:\/\/developer.wordpress.org\/reference\/functions\/parse_blocks\/)()<\/code>. Parameetrina peate sisestama postituse sisu stringi. Kui olete ts\u00fcklis v\u00f5i teil on juurdep\u00e4\u00e4s postitusobjektile, esitage lihtsalt <code>$post-&gt;post_content<\/code>funktsiooni parameetrina.<\/p>\n<pre><code>$post_id = 1;\n$post = get_post($post_id);\n$blocks = parse_blocks($post-&gt;post_content);<\/code><\/pre>\n<p>Tagasitulek <code>parse_blocks()<\/code>on massiiv, kus iga massiivi element on plokk. Iga ploki elemendi kohta on teil teave, n\u00e4iteks ploki t\u00fc\u00fcp (v\u00f5ti &#8216; <code>blockName<\/code>&#8216;), ploki atribuudid (v\u00f5ti &#8216; <code>attrs<\/code>&#8216;), sisemised plokid pesastatud plokkide jaoks, nagu veerud (v\u00f5ti &#8216; <code>innerBlocks<\/code>&#8216;) ja kaks elementi tegeliku ploki sisu jaoks (v\u00f5tmed &#8216; <code>innerHTML<\/code>&#8216; ja &#8216; <code>innerContent<\/code>&#8216;). Element <code>innerHTML<\/code>on HTML-i sisu string, samas <code>innerContent<\/code>kui HTML-stringide massiiv.<\/p>\n<p>Ja see on k\u00f5ik! <code>parse_blocks()<\/code>Oma asjade tegemiseks sirvige l\u00e4bi tagastatud massiivi alates. Vaatame selle postituse allpool rohkem koodin\u00e4iteid.<\/p>\n<h2>M\u00e4rkus klassikaliste (mitte-Gutenbergi) postituste kohta<\/h2>\n<p>V\u00f5imalik, et t\u00f6\u00f6tate vanemal WordPressi saidil, mis on loonud postitusi enne Gutenbergi versioonile \u00fcleminekut (v\u00f5i kasutanud Gutenbergi keelamise pistikprogrammi). Sel juhul ei ole nendel postitustel postituse struktureeritud sisu, vaid kogu postituse sisu on plokis \u201eKlassikaline redaktor&quot;.<\/p>\n<p>Funktsioonist tagastatud massiiv tagastab <code>parse_blocks()<\/code>sellistel postitustel \u00fche plokimassiivi elemendi, mille v\u00e4\u00e4rtus <code>blockName<\/code>on <code>null<\/code>. Postituse t\u00e4ielik HTML-sisu on selle elemendi <code>innerHTML<\/code>stringis.<\/p>\n<p>V\u00f5ime julgelt eeldada, et kui postituse tootlusel <code>parse_blocks()<\/code>on \u00fcks element ja see <code>blockName<\/code>on <code>null<\/code>, siis on tegemist &#8220;Gutenbergi-eelse&#8221; postitusega. Muidu <code>blockName<\/code>on alati asustatud. Seda on hea meeles pidada, kui kirjutate postituste plokkide s\u00f5elumiseks koodi ja soovite k\u00e4sitleda vanemat WordPressi sisu.<\/p>\n<h2>Renderda plokk<\/h2>\n<p>WordPress pakub ka funktsiooni konkreetse ploki renderdamiseks <code>[render_block](https:\/\/developer.wordpress.org\/reference\/functions\/render_block\/)()<\/code>. Parameetrina peate andma ploki jaoks massiivi, t\u00e4pselt nagu \u00fche <code>parse_blocks()<\/code>\u00fclalt tagastatud massiivi. Funktsioon tagastab renderdatud HTML-i stringi, mida saate lihtsalt otse v\u00e4lja tuua.<\/p>\n<pre><code>$post_id = 1;\n$post = get_post($post_id);\n$blocks = parse_blocks($post-&gt;post_content);\nforeach ($blocks as $block) {\n    echo render_block($block);\n}<\/code><\/pre>\n<p>\u00dclaltoodud kood renderdab k\u00f5ik postituse plokid, t\u00e4pselt nagu tavaliselt postituse sisu renderdamisel. L\u00f5bus osa tuleb siis, kui hakkame lisama koodi, et v\u00e4listada v\u00f5i kaasata konkreetsed meid huvitavad plokid.<\/p>\n<p>N\u00e4iteks prindib allolev kood v\u00e4lja ainult postituse l\u00f5iguplokid:<\/p>\n<pre><code>foreach ($blocks as $block) {\n    if ($block['blockName'] == 'core\/paragraph') {\n        echo render_block($block);\n    }\n}<\/code><\/pre>\n<p>Ja see renderdab k\u00f5ik plokid, kuid v\u00e4listab k\u00f5ik l\u00fchikoodiplokid:<\/p>\n<pre><code>foreach ($blocks as $block) {\n    if ($block['blockName'] != 'core\/shortcode') {\n        echo render_block($block);\n    }\n}<\/code><\/pre>\n<h2>Blokeeri nimed<\/h2>\n<p>Postituse plokkide s\u00f5elumisel peate t\u00f5en\u00e4oliselt kontrollima ploki t\u00fc\u00fcpi. Neid on \u00fcsna lihtne \u00e4ra arvata. N\u00e4iteks l\u00f5iguplokk on, h\u00e4sti arvasite \u00e4ra, <code>paragraph<\/code>. Kuid pidage meeles, et WordPressis on k\u00f5ikidel Gutenbergi plokkidel eesliide nimeruumiga. WordPressi p\u00f5hiplokkide (vaike) puhul on nende eesliide &quot; <code>core\/<\/code>&quot;. Erandiks on manustamisplokid, mille eesliide on &quot; <code>core-embed\/<\/code>&quot;. N\u00e4iteks l\u00f5iguplokil on ploki nimi <code>core\/paragraph<\/code>.<\/p>\n<p>Metsikute oletuste v\u00e4ltimiseks on siin \u00fclevaade WordPressi pakutavatest vaikeplokkidest (selle kirjutamise ajal):<\/p>\n<h3>\u00dchised plokid<\/h3>\n<ul>\n<li>L\u00f5ik:<code>core\/paragraph<\/code><\/li>\n<li>Pilt:<code>core\/image<\/code><\/li>\n<li>Pealkiri:<code>core\/heading<\/code><\/li>\n<li>Galerii:<code>core\/gallery<\/code><\/li>\n<li>Loetelu:<code>core\/list<\/code><\/li>\n<li>Tsitaat:<code>core\/quote<\/code><\/li>\n<li>Heli:<code>core\/audio<\/code><\/li>\n<li>Kaas:<code>core\/cover<\/code><\/li>\n<li>Fail:<code>core\/file<\/code><\/li>\n<li>Video:<code>core\/video<\/code><\/li>\n<\/ul>\n<h3>Vormindamine<\/h3>\n<ul>\n<li>Eelvormindatud:<code>core\/preformatted<\/code><\/li>\n<li>Kood:<code>core\/code<\/code><\/li>\n<li>Klassikaline: <code>core\/freeform<\/code><br \/>\n(kuid mitte-Gutenbergi postituste puhul on see <code>null<\/code>, vt m\u00e4rkust mitte-Gutenbergi postituste kohta)<\/li>\n<li>Kohandatud HTML:<code>core\/html<\/code><\/li>\n<li>Tsitaat:<code>core\/pullquote<\/code><\/li>\n<li>Tabel:<code>core\/table<\/code><\/li>\n<li>Salm:<code>core\/verse<\/code><\/li>\n<\/ul>\n<h3>Paigutus<\/h3>\n<ul>\n<li>Nupp:<code>core\/button<\/code><\/li>\n<li>Veerud:<code>core\/columns<\/code><\/li>\n<li>Veel:<code>core\/more<\/code><\/li>\n<li>Lehek\u00fclje paus:<code>core\/nextpage<\/code><\/li>\n<li>Eraldaja:<code>core\/separator<\/code><\/li>\n<li>Vahem\u00e4rk:<code>core\/spacer<\/code><\/li>\n<li>Meedia ja tekst:<code>core\/media-text<\/code><\/li>\n<\/ul>\n<h3>Vidinad<\/h3>\n<ul>\n<li>L\u00fchikood:<code>core\/shortcode<\/code><\/li>\n<li>Arhiivid:<code>core\/archives<\/code><\/li>\n<li>Kategooriad:<code>core\/categories<\/code><\/li>\n<li>Viimased kommentaarid:<code>core\/latest-omments<\/code><\/li>\n<li>Viimased postitused:<code>core\/latest-posts<\/code><\/li>\n<\/ul>\n<h3>Manustatakse<\/h3>\n<ul>\n<li>\n<p>Manusta:<code>core\/embed<\/code><\/p>\n<\/li>\n<li>\n<p>Twitter:<code>core-embed\/twitter<\/code><\/p>\n<\/li>\n<li>\n<p>Youtube:<code>core-embed\/youtube<\/code><\/p>\n<\/li>\n<li>\n<p>Facebook:<code>core-embed\/facebook<\/code><\/p>\n<\/li>\n<li>\n<p>Instagram:<code>core-embed\/instagram<\/code><\/p>\n<\/li>\n<li>\n<p>WordPress:<code>core-embed\/wordpress<\/code><\/p>\n<\/li>\n<li>\n<p>SoundCloud:<code>core-embed\/soundcloud<\/code><\/p>\n<\/li>\n<li>\n<p>Spotify:<code>core-embed\/spotify<\/code><\/p>\n<\/li>\n<li>\n<p>Flickr:<code>core-embed\/flickr<\/code><\/p>\n<\/li>\n<li>\n<p>Vimeo:<code>core-embed\/vimeo<\/code><\/p>\n<\/li>\n<li>\n<p>Animoto:<code>core-embed\/animoto<\/code><\/p>\n<\/li>\n<li>\n<p>Pilv:<code>core-embed\/cloudup<\/code><\/p>\n<\/li>\n<li>\n<p>Rahvahulga signaal:<code>core-embed\/crowdsignal<\/code><\/p>\n<\/li>\n<li>\n<p>Igap\u00e4evane liikumine:<code>core-embed\/dailymotion<\/code><\/p>\n<\/li>\n<li>\n<p>Hulu:<code>core-embed\/hulu<\/code><\/p>\n<\/li>\n<li>\n<p>Pilt:<code>core-embed\/imgur<\/code><\/p>\n<\/li>\n<li>\n<p>Probleem:<code>core-embed\/issuu<\/code><\/p>\n<\/li>\n<li>\n<p>Kickstarter:<code>core-embed\/kickstarter<\/code><\/p>\n<\/li>\n<li>\n<p>Meetup.com:<code>core-embed\/meetup-com<\/code><\/p>\n<\/li>\n<li>\n<p>Mixcloud:<code>core-embed\/mixcloud<\/code><\/p>\n<\/li>\n<li>\n<p>Reddit:<code>core-embed\/reddit<\/code><\/p>\n<\/li>\n<li>\n<p>ReverbNation:<code>core-embed\/reverbnation<\/code><\/p>\n<\/li>\n<li>\n<p>Ekraanisaade:<code>core-embed\/screencast<\/code><\/p>\n<\/li>\n<li>\n<p>Scribd:<code>core-embed\/scribd<\/code><\/p>\n<\/li>\n<li>\n<p>Slaidide jagamine:<code>core-embed\/slideshare<\/code><\/p>\n<\/li>\n<li>\n<p>SmugMug:<code>core-embed\/smugmug<\/code><\/p>\n<\/li>\n<li>\n<p>K\u00f5larid:<code>core-embed\/speaker<\/code><\/p>\n<\/li>\n<li>\n<p>TED:<code>core-embed\/ted<\/code><\/p>\n<\/li>\n<li>\n<p>Tumblr:<code>core-embed\/tumblr<\/code><\/p>\n<\/li>\n<li>\n<p>VideoPress:<code>core-embed\/videopress<\/code><\/p>\n<\/li>\n<li>\n<p>wordpress.tv:<code>core-embed\/wordpress-tv<\/code><\/p>\n<\/li>\n<li>\n<p>Amazon Kindle:<code>core-embed\/amazon-kindle<\/code><\/p>\n<\/li>\n<\/ul>\n<h2>Koodi n\u00e4ide: tooge postituse esimene l\u00f5ik v\u00e4ljav\u00f5ttena<\/h2>\n<p>H\u00e4sti kirjutatud postitus peaks algama l\u00f5iguga, mis tutvustab postituse sisu ja ahvatleb inimesi lugema. Need sobivad suurep\u00e4raselt kasutamiseks v\u00e4ljav\u00f5tetena, selle asemel, et toetuda WordPressi automaatsele v\u00e4ljav\u00f5tte funktsioonile!<\/p>\n<p>See on funktsioon, mille saate oma teemale lisada ja <code>functions.php<\/code>mis tagastab postituse esimese l\u00f5igu. Kui postitust ei esitatud, viitab see globaalsele postitusobjektile. See mahutab ka mitte-Gutenbergi postitusi, tagastades nende jaoks tegeliku WordPressi v\u00e4ljav\u00f5tte.<\/p>\n<pre><code>function awp_get_excerpt($post=false) {\n    if (!$post) { \n        global $post;\n    }\n    if (!$post) { return ''; }\n    $excerpt = '';\n    $blocks = parse_blocks($post-&gt;post_content);\n    if (count($blocks) == 1 &amp;&amp; $blocks[0]['blockName'] == null) {  \/\/ Non-Gutenberg posts\n        $excerpt = get_the_excerpt($post-&gt;ID);\n    } else {\n        foreach ($blocks as $block) {\n            if ($block['blockName'] == 'core\/paragraph') {\n                $excerpt = strip_tags($block['innerHTML']);\n                break;\n            }\n        }\n    }\n    return \"&lt;div class='excerpt'&gt;$excerpt&lt;\/div&gt;\";\n}<\/code><\/pre>\n<p>P\u00e4rast funktsiooni <code>parse_blocks()<\/code>kutsumist kontrollime, kas postitusel on kehtetuid plokiandmeid (postitus loodi enne Gutenbergi) ja tagastame postituse v\u00e4ljav\u00f5tte, kui see nii on. Vastasel juhul vaatame l\u00e4bi postituse plokid, leiame esimese l\u00f5iguploki ja tagastame selle <code>innerHTML<\/code>. P\u00e4ris l\u00f5pus tagastame stringi, mille <code>&lt;div&gt;<\/code>\u00fcmber on (see on valikuline) a.<\/p>\n<p>Selle funktsiooni kasutamiseks peate helistama:<\/p>\n<pre><code>echo awp_get_excerpt();<\/code><\/pre>\n<p>Eeldades, et funktsioonikutse paigutatakse kuskile, kus on globaalne <code>$post<\/code>objekt, n\u00e4iteks ts\u00fckli sees. Kui soovite m\u00e4\u00e4rata postituse, sisestage funktsioonikutse parameetrina postitusobjekt:<\/p>\n<pre><code>$post_id = 1;\n$post = get_post($post_id);\necho awp_get_excerpt($post);<\/code><\/pre>\n<h2>N\u00e4ide: looge postituse pealkirjadest sisukord<\/h2>\n<p>Saate automaatselt ja d\u00fcnaamiliselt luua sisukorra, mis p\u00f5hineb postituse pealkirjaplokkidel. Protsess on piisavalt lihtne; s\u00f5eluge postituse plokke ja leidke k\u00f5ik plokid <code>core\/heading<\/code>. Kuid me saame astuda sammu edasi ja kaasata tasemed; <code>h3<\/code>nt alampealkirja alla panemine <code>h2<\/code>ja nii edasi.<\/p>\n<p>Pealkirjaplokk sisaldab teavet selle taseme kohta atribuudimassiivi elemendis (v\u00f5ti &#8216; <code>attrs<\/code>&#8216;). Massiivi sees <code>attrs<\/code>oleks see massiivi element v\u00f5tmega &#8216; <code>level<\/code>&#8216; ja taset t\u00e4histava t\u00e4isarvuga. A- l <code>h3<\/code>oleks &#8216; <code>level<\/code>&#8216; v\u00e4\u00e4rtus <code>3<\/code>, <code>h4<\/code>a&#8217;l oleks &#8216; <code>level<\/code>&#8216; <code>4<\/code>ja nii edasi.<\/p>\n<p>Arvestage siiski, et <code>attrs<\/code>pealkirjade plokid v\u00f5ivad olla t\u00fchjad! See juhtub siis, kui autor ei ole muutnud pealkirja t\u00fc\u00fcpi ploki s\u00e4tetes vaikeseadetest k\u00f5rvale. Selle \u00fcmberk\u00e4imiseks peame tegema m\u00f5ned eeldused. Vaikimisi on pealkirjad <code>h2<\/code>(kui te pole seda oma teemas muutnud). Seega v\u00f5ime eeldada, et kui pealkirjaplokil pole taseme atribuuti, on see <code>h2<\/code>. Vastasel juhul saame tasemeteabe atribuutidest.<\/p>\n<p>Kui olete v\u00e4ljakutsega t\u00f5esti valmis, kutsun teid \u00fcles t\u00e4iustama allolevat koodi. \u00d5ige struktureeritud <code>ol<\/code>loendi loomise probleem seisneb selles, et me ei saa kontrollida, kuidas autor oma pealkirju struktureerib. Nad v\u00f5ivad v\u00e4ga h\u00e4sti hulluks minna ja alustada <code>h4<\/code>pealkirjaga ja h\u00fcpata <code>h2<\/code>kohe p\u00e4rast seda. Ja \u00e4kki segavad nad <code>h1<\/code>keskele a. Minu lahendus h\u00f5lmab seet\u00f5ttu kindla <code>ol<\/code>loendi genereerimist ja tasemeteabe esitamist loendi\u00fcksuse klassides. Seej\u00e4rel saate m\u00f5ne nutika CSS-i abil loendi \u00fcksused vastavalt taandada, kasutades vasakpoolset polsterdust.<\/p>\n<h3>Kood<\/h3>\n<p>Siin on sisukorra funktsioon:<\/p>\n<pre><code>function awp_table_of_contents($post=false) {\n    if (!$post) {\n        global $post;\n    }\n    if (!$post) { return ''; }\n    $headings = [];\n    $blocks = parse_blocks($post-&gt;post_content);\n    if (count($blocks) == 1 &amp;&amp; $blocks[0]['blockName'] == null) {  \/\/ Non-Gutenberg posts\n        return '';\n    } else {\n        foreach ($blocks as $block) {\n            if ($block['blockName'] == 'core\/heading') {\n                $level = (isset($block['attrs']['level']))? $block['attrs']['level']: 2;  \/\/ h2 as default\n                $headings[] = ['title' =&gt; wp_strip_all_tags($block['innerHTML']), 'level' =&gt; $level];\n            }\n        }\n    }\n\u00a0\n    if (empty($headings)) {  \/\/ No headings found in post\n        return '';\n    }\n\u00a0\n    $toc = '&lt;ol class=\"table-of-contents\"&gt;';\n    foreach ($headings as $heading) {\n        $toc .= '&lt;li class=\"heading-level-'. $heading['level']. '\"&gt;'. $heading['title']. '&lt;\/li&gt;';\n    }\n    $toc .= '&lt;\/ol&gt;';\n    return $toc;\n}<\/code><\/pre>\n<p>Funktsioon algab postituse k\u00e4sitlemisest ja selle plokkide s\u00f5elumisest. Liinil <code>#9<\/code>majutame mitte-Gutenbergi ametikohti. Funktsioon j\u00e4tkab k\u00f5igi plokkide l\u00e4bimist ja kui ta leiab pealkirjaploki, lisatakse see meie <code>$headings<\/code>massiivi. Kasutame <code>[wp_strip_all_tags](https:\/\/developer.wordpress.org\/reference\/functions\/wp_strip_all_tags\/)()<\/code>pealkirjadest HTML-m\u00e4rgendite eemaldamiseks. Lisame ka tasemeteabe oma massiivi, kus vaikimisi seatakse <code>2<\/code>kui atribuudid on t\u00fchjad.<\/p>\n<p>P\u00e4rast plokits\u00fcklit <code>$headings<\/code>peaks massiiv sisaldama k\u00f5iki postituse pealkirju, j\u00e4rjekorras. Seej\u00e4rel saame lihtsalt genereerida HTML-stringi ja v\u00e4ljastada selle sisu. Nagu mainitud, genereerin igale elemendile klassi nime, mis sisaldab teavet pealkirja taseme kohta, et saaksime luua CSS-i abil illusiooni struktureeritud loendist.<\/p>\n<p>Sarnaselt \u00fclaltoodud v\u00e4ljav\u00f5tte funktsiooniga saame seda funktsiooni kutsuda, kui oleme ts\u00fckli sees:<\/p>\n<pre><code>echo awp_table_of_contents();<\/code><\/pre>\n<p>V\u00f5i kui oleme v\u00e4ljaspool ahelat v\u00f5i tahame postitust t\u00e4psustada;<\/p>\n<pre><code>$post_id = 1;\n$post = get_post($post_id);\necho awp_table_of_contents($post);<\/code><\/pre>\n<p>See loob loendi, mis n\u00e4eb v\u00e4lja umbes selline:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152586-61e4e13930788.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-152586-61e4e13930788.png\" alt=\"Kuidas PHP-ga Gutenbergi plokkidele juurde p\u00e4\u00e4seda ja neid anal\u00fc\u00fcsida\" ><\/a><\/p>\n<h2>J\u00e4reldus<\/h2>\n<p>Nagu oleme n\u00e4inud Gutenbergi abil tehtud struktureeritud rikkaliku postitussisu puhul, saame v\u00e4ga h\u00f5lpsalt leida ja v\u00e4lja v\u00f5tta postituste sisu teatud osad. Vaadake tagasi n\u00e4idete loendit, mida mainisin postituse alguses. Teie kui teemaarendaja v\u00f5imalustele pole piiranguid. See s\u00f5ltub lihtsalt sellest, mida teie teema v\u00f5i WordPressi sait vajab (v\u00f5i mis oleks lihtsalt lahe).<\/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>\u00dcksikasjalik \u00fclevaade postituse plokkide s\u00f5elumisest WordPressi PHP funktsioonide abil konkreetsete plokkide s\u00f5elumiseks, filtreerimiseks ja renderdamiseks.<\/p>\n","protected":false},"author":1,"featured_media":152587,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,894,718,937,937,894,1110,842,812,812,842,863,863],"tags":[1165],"class_list":{"0":"post-233659","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","13":"category-n-a","14":"category-opetused","15":"category-pistikprogrammid","18":"category-wordpress-4","20":"tag-affiai-et"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233659","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=233659"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/233659\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/152587"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=233659"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=233659"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=233659"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}