{"id":230732,"date":"2022-12-17T15:16:00","date_gmt":"2022-12-17T12:16:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230732"},"modified":"2022-12-17T15:19:02","modified_gmt":"2022-12-17T12:19:02","slug":"wordpressi-vidinad-uembertoeoetamine-3-osa","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-vidinad-uembertoeoetamine-3-osa\/","title":{"rendered":"WordPressi vidinad: \u00fcmbert\u00f6\u00f6tamine, 3. osa"},"content":{"rendered":"\n<p>WordPress Widget Boilerplate&#8217;i v\u00e4rskendamisel (mida k\u00f5ike j\u00e4lgitakse arendusharus <a href=\"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\/tree\/develop\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">)<\/a> oleme selle korralduse \u00fcmberkujundamise osas kaugele j\u00f5udnud.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161272-61e71e5eea22f.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-161272-61e71e5eea22f.png\" alt=\"WordPressi vidinad: \u00fcmbert\u00f6\u00f6tamine, 3. osa\"><\/a><\/p>\n<p>Siiani oleme:<\/p>\n<ul>\n<li>vaatas, kuidas <a href=\"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-vidinad-objektorienteeritud-laehenemisviis\/\" title=\"WordPressi vidina API pakub n\u00e4idet\">WordPressi vidina API pakub n\u00e4idet<\/a> objektorienteeritud programmeerimisest,<\/li>\n<li>kuidas saame seda API -d kasutada <a href=\"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-vidinad-objektorienteeritud-programmeerimise-tuvastamine\/\" title=\"objektorienteeritud programmeerimise\">objektorienteeritud programmeerimise<\/a> m\u00e4\u00e4ramiseks WordPressi muudes valdkondades,<\/li>\n<li>installitud <a href=\"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-vidinad-alustades-standarditest\/\" title=\"t\u00f6\u00f6riistad, mis aitavad meil\">t\u00f6\u00f6riistad, mis aitavad meil<\/a> koodi kvaliteeti hinnata,<\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-vidinad-uembertoeoetamine-1-osa\/\" title=\"leidnud vead, mis praeguste programmeerimisstandardite kohaselt koodis eksisteerivad\">leidnud vead, mis praeguste programmeerimisstandardite kohaselt koodis eksisteerivad<\/a> ,<\/li>\n<li>ja alustas koodibaasi \u00fcmberkorraldamist, et see sobiks <a href=\"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-vidinad-uembertoeoetamine-2-osa\/\" title=\"kaasaegsemate tavadega\">kaasaegsemate tavadega<\/a>.<\/li>\n<\/ul>\n<p>N\u00fc\u00fcd oleme valmis alustama selle koodi \u00fcmberkujundamist palju rohkem objektorienteeritud viisil.<\/p>\n<p>Nii et kui te pole veel eelmiste postitustega (m\u00f5negi neist) j\u00e4rele j\u00f5udnud, soovitan seda teha, sest selle ajakohastamiseks kulub veidi aega. Selgitamiseks on palju koodi.<\/p>\n<p>Alustame.<\/p>\n<h2>WordPressi vidina katlaplaat: \u00fcmberkujundamine, 3. osa<\/h2>\n<p>V\u00e4idetavalt on Boilerplate&#8217;i suurim probleem see, et k\u00f5ik on kapseldatud \u00fchte klassi.<\/p>\n<p>Muidugi on m\u00f5ned toredad asjad, nagu meie vaadete eraldamine serveripoolsest loogikast, kuid see on umbes nii kaugele, kui see l\u00e4heb.<\/p>\n<p>Muud probleemid, mis ilmnevad ainult koodi vaatamisest, on j\u00e4rgmised:<\/p>\n<ul>\n<li>toimingute ja filtrite lisamine konstruktorisse,<\/li>\n<li>meetodid, mis teevad rohkem kui \u00fchte asja,<\/li>\n<li>klasside puudumine, mis vastutavad selliste asjade rakendamise eest nagu s\u00f5ltuvuste registreerimine,<\/li>\n<li>ja nii edasi.<\/li>\n<\/ul>\n<p>Selles postituses alustame abstraktsioonide loomise protsessi, mida l\u00f5puks rakendame, et purustada Boilerplate&#8217;i jumalaklassilaadne olemus praegusel kujul.<\/p>\n<p>See jagatakse mitmeks postituseks, et saaksin anda kindla selgituse selle kohta, miks me teatud asju teeme, ja selgitada selle taga olevaid n\u00e4iteid.<\/p>\n<p>Kui ma teen seda muul viisil, j\u00e4tab seeria v\u00e4lja liiga palju v\u00e4\u00e4rtuslikku teavet, mis on kohaldatav muude objektorienteeritud programmeerimistavade jaoks.<\/p>\n<h3>Mis on tellija?<\/h3>\n<p>WordPressi konksus\u00fcsteem \u2013 see t\u00e4hendab meil saadaolevad toimingud ja filtrid \u2013 p\u00f5hineb s\u00fcndmustep\u00f5hisel disainimustril. See t\u00e4hendab, et kui midagi juhtub, s\u00fcndmus, k\u00e4ivitab WordPress mis tahes muu koodi, mis on selle s\u00fcndmuse tellinud.<\/p>\n<p>Nii et kui registreerime funktsiooni konksuga, <strong>siis<\/strong> liitume <strong>s\u00fcndmusega<\/strong>. Sel eesm\u00e4rgil olen f\u00e4nn, kes loob tellijaid igale konkreetsele konksule, mida me vajame.<\/p>\n<p>Lisaks j\u00e4rgivad abonendid \u00fcldiselt \u00fchtset vormingut. See t\u00e4hendab, et on v\u00e4ga lihtne luua abstraktset klassi, mis rakendab m\u00f5nda \u00fchtset funktsionaalsust ja v\u00f5imaldab seej\u00e4rel abstraktset klassi rakendaval klassil keskenduda ainult \u00e4riloogikale.<\/p>\n<p>\u00dcks lihtsamaid viise selle demonstreerimiseks on CSS-failide ja JavaScript-failide tellija, kuna need on kaks k\u00f5ige levinumat asja, mida me pistikprogrammide loomisel kasutame.<\/p>\n<h3>Abstraktse klassi loomine<\/h3>\n<p>Enne abstraktse klassi rakendamist kirjeldame t\u00e4pselt, mida me selle loomiseks tegema hakkame.<\/p>\n<ol>\n<li>Vajame atribuuti, mis esindab s\u00fcndmust, mida me tellime.<\/li>\n<li>Vajame funktsiooni, mis k\u00e4ivitaks alati, kui WordPress konksu v\u00e4lja laseb. Teine m\u00f5tteviis on see, et vajame funktsiooni, mida rakendada alati, kui WordPress k\u00e4ivitab teatud toimingu v\u00f5i filtri.<\/li>\n<li>Abstraktsiooni rakendamiseks vajame klasse.<\/li>\n<\/ol>\n<p>Esiteks m\u00e4\u00e4ratleme abstraktsed klassid. <a href=\"https:\/\/secure.php.net\/manual\/en\/language.oop5.abstract.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Otse PHP k\u00e4siraamatust<\/a> loeme:<\/p>\n<blockquote>\n<p>Abstraktsetena m\u00e4\u00e4ratletud klasse ei tohi instantseerida ja iga klass, mis sisaldab v\u00e4hemalt \u00fchte abstraktset meetodit, peab samuti olema abstraktne. Abstraktsetena m\u00e4\u00e4ratletud meetodid deklareerivad lihtsalt meetodi allkirja \u2013 nad ei saa defineerida rakendamist.<\/p>\n<\/blockquote>\n<p>L\u00fchidalt t\u00e4hendab see, et me ei saa tegelikult luua abstraktse klassi eksemplari. Me saame luua ainult klassid, mis m\u00e4\u00e4ratlevad teostuse.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161272-61e71e62f02d2.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-161272-61e71e62f02d2.png\" alt=\"WordPressi vidinad: \u00fcmbert\u00f6\u00f6tamine, 3. osa\"><\/a><\/p>\n<p>See aga ei t\u00e4henda, et abstraktne klass ei saaks rakendada konkreetseid asju (n\u00e4iteks konksu m\u00e4\u00e4ratlus). Kuid see t\u00e4hendab, et on teatud meetodeid, mida ei rakendata.<\/p>\n<p>Muidu j\u00e4\u00e4b meile lihtsalt p\u00f5hiklass.<\/p>\n<p>On loogiline? Heidame pilgu peale.<\/p>\n<h3>Abstraktse klassi loomine<\/h3>\n<p>Selle postituse jaoks loome abstraktse klassi spetsiaalselt CSS-failide ja JavaScripti jaoks.<\/p>\n<p>Pidage meeles, et kuna see on abstraktne klass, v\u00f5ib konkreetseid tellijaid nimetada millekski, mis tuvastab, mida nad teevad (st nad v\u00f5ivad nimetada end k\u00f5igeks, mis esindab nende eesm\u00e4rki). Ja me j\u00f5uame selleni.<\/p>\n<p>Aga k\u00f5igepealt <a href=\"https:\/\/gist.github.com\/tommcfarlin\/9cf10f4aadbe54f2fc2e87b619a33bcc#file-00-abstract-subscriber-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">abstraktne klass.<\/a> Jagan koodi ja selgitan t\u00e4pselt, mis sellega toimub:<\/p>\n<pre><code>&lt;?php\n\n\/*\n * This file is part of the WordPress Widget Boilerplate\n *\n * (c) Tom McFarlin &lt;tom@tommcfarlin.com&gt;\n *\n * This source file is subject to the GPL license that is bundled\n * with this source code in the file LICENSE.\n *\/\n\nnamespace WordPressWidgetBoilerplateSubscriber;\n\n\/**\n * An abstract implementation of a subscriber that requires a hook and the ability to\n * start the class.\n *\/\nabstract class AbstractSubscriber\n{\n    \/**\n     * @var string a reference to the hook to which the subscriber should be registered\n     *\/\n    protected $hook;\n\n    \/**\n     * @param string $hook the hook to which the subscriber is registered\n     *\/\n    public function __construct(string $hook)\n    {\n        $this-&gt;hook = $hook;\n    }\n\n    \/**\n     * @return string the hook to which the subscriber is registered\n     *\/\n    public function getHook(): string\n    {\n        return $this-&gt;hook;\n    }\n\n    \/**\n     * Implements the domain logic for the concrete class implementating this subcriber.\n     *\/\n    abstract public function load();\n}\n<\/code><\/pre>\n<ol>\n<li>Pange t\u00e4hele, et meie loodud vara on <strong>kaitstud<\/strong>. Seda selleks, et rakendusklassid p\u00e4\u00e4seksid sellele juurde, kuid miski v\u00e4ljaspool seda ei saa.<\/li>\n<li>Olen loonud funktsiooni konksu k\u00e4ttesaamiseks, mis selgub hiljem. Tavaliselt ma vihkan selliste funktsioonide rakendamist, mis pole kohe ilmsed, kuid see on oluline, v\u00f5ttes arvesse, kuhu me teel oleme.<\/li>\n<li>On olemas abstraktne funktsioon, mida nimetatakse <strong>koormuseks<\/strong>. See on koht, kus iga klass, mis seda funktsiooni rakendab, sisaldab oma \u00e4riloogikat, nagu n\u00e4eme kohe.<\/li>\n<li>Mulle meeldib vajadusel dokumenteerida funktsioonide otstarve, et need oleksid \u00fches kohas ja seej\u00e4rel lasen rakendusklassidel esitada dokumentatsiooni, mida nad peavad oma juurutamisel esitama. N\u00e4ete seda ka kohe.<\/li>\n<\/ol>\n<p>N\u00fc\u00fcd, kui abstraktne klass on paigas, on viimane asi, mida peame tegema, et veenduda, et see on paigutatud \u00f5igesse kataloogi ja nimeruumi. Kui olete eelmise postitusega alustanud, olete t\u00f5en\u00e4oliselt suutnud koodis oleva nimeruumi p\u00f5hjal arvata, kus see asub.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161272-61e71e66e7d4a.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-161272-61e71e66e7d4a.png\" alt=\"WordPressi vidinad: \u00fcmbert\u00f6\u00f6tamine, 3. osa\"><\/a><\/p>\n<p>Ja kui ei, siis \u00e4rge muretsege. Nimeruumide ja muu v\u00e4ljam\u00f5tlemine v\u00f5ib v\u00f5tta veidi aega. Nii et nende liikmepostituste ja n\u00e4idete kaudu loodan, et see saab aja jooksul selgeks.<\/p>\n<h3>Betooniklasside loomine<\/h3>\n<p>N\u00fc\u00fcd rakendame seda konkreetset klassi, et lisada nii meil olevad stiilitabelid kui ka JavaScripti allikad. Mida te m\u00e4rkate, on see, et need on v\u00e4ga sarnased.<\/p>\n<p>Ainus asi, mis erineb, on <strong>laadimisfunktsiooni<\/strong> rakendamine, mis t\u00e4pselt peaks toimima.<\/p>\n<h5>Stiilitabelid<\/h5>\n<p>Arvestades \u00fclaltoodud abstraktset klassi, peame n\u00fc\u00fcd looma stiilitabelite registreerimiseks klassi. Kuna meil on kaks laaditabelit, loome kaks klassi:<\/p>\n<ol>\n<li>esimene klass vastutab laaditabeli registreerimise eest armatuurlauale ja konkreetselt WordPressi vidina lehele,<\/li>\n<li>teine \u200b\u200bklass vastutab plugina registreerimise eest tegeliku ajaveebi jaoks.<\/li>\n<\/ol>\n<p>Nimetagem neid k\u00f5iki vastavalt <strong>AdminStylesheetSubscriberiks<\/strong> ja <strong>PublicStylesheetSubscriberiks<\/strong>.<\/p>\n<p>Esiteks <a href=\"https:\/\/gist.github.com\/tommcfarlin\/9cf10f4aadbe54f2fc2e87b619a33bcc#file-03-admin-style-subscriber-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">administraatori laaditabeli tellija<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/*\n * This file is part of the WordPress Widget Boilerplate\n *\n * (c) Tom McFarlin &lt;tom@tommcfarlin.com?\n *\n * This source file is subject to the GPL license that is bundled\n * with this source code in the file LICENSE.\n *\/\n\nnamespace WordPressWidgetBoilerplateSubscriber;\n\n\/**\n * The subscriber responsible for loading the stylesheet on the Widget administration page.\n *\/\nclass AdminStyleAssetSubscriber extends AbstractSubscriber\n{\n    \/**\n     * {@inheritdoc}\n     *\/\n    public function __construct(string $hook)\n    {\n        parent::__construct($hook);\n    }\n\n    \/**\n     * Adds the administrative stylesheet to the widget administration page.\n     *\/\n    public function load()\n    {\n        if ('widgets' !== get_current_screen()-&gt;id) {\n            return;\n        }\n\n        wp_enqueue_style(\n            'wordpress-widget-boilerplate',\n            plugin_dir_url(dirname(__DIR__)).'assets\/css\/admin.css'\n        );\n    }\n}\n<\/code><\/pre>\n<p>Pange t\u00e4hele, et see kasutab funktsiooni <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/get_current_screen\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_current_screen()<\/a>, mida olen kasutanud eelmistes postitustes, veendumaks, et lisame s\u00f5ltuvusi ainult vajaduse korral.<\/p>\n<p>N\u00fc\u00fcd <a href=\"https:\/\/gist.github.com\/tommcfarlin\/9cf10f4aadbe54f2fc2e87b619a33bcc#file-05-public-style-subscriber-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">avalik JavaScripti tellija<\/a>. See kasutab funktsiooni <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/is_admin\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">is_admin()<\/a> veendumaks, et me pole WordPressi haldusalas.<\/p>\n<pre><code>&lt;?php\n\n\/*\n * This file is part of the WordPress Widget Boilerplate\n *\n * (c) Tom McFarlin &lt;tom@tommcfarlin.com&gt;\n *\n * This source file is subject to the GPL license that is bundled\n * with this source code in the file LICENSE.\n *\/\n\nnamespace WordPressWidgetBoilerplateSubscriber;\n\n\/**\n * The subscriber responsible for loading the stylesheet on the blog.\n *\/\nclass PublicStyleAssetSubscriber extends AbstractSubscriber\n{\n    \/**\n     * {@inheritdoc}\n     *\/\n    public function __construct(string $hook)\n    {\n        parent::__construct($hook);\n    }\n\n    \/**\n     * Adds the stylesheet to the public-facing side of the site.\n     *\/\n    public function load()\n    {\n        if (is_admin()) {\n            return;\n        }\n\n        wp_enqueue_style(\n            'wordpress-widget-boilerplate',\n            plugin_dir_url(dirname(__DIR__)).'assets\/css\/widget.css'\n        );\n    }\n}\n<\/code><\/pre>\n<p>Ilmselgelt ei ole me neid klasse veel tegelikkuses loonud. See tuleb sarjas hiljem.<\/p>\n<h5>JavaScript<\/h5>\n<p>JavaScripti tellijad ei ole palju erinevad, nagu v\u00f5ite arvata. Eraldame need vastavalt rakenduse alale, millele nad keskenduvad, ja anname neile sobiva nime.<\/p>\n<p>Esiteks <a href=\"https:\/\/gist.github.com\/tommcfarlin\/9cf10f4aadbe54f2fc2e87b619a33bcc#file-02-admin-script-subscriber-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">administraator JavaScripti tellija<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/*\n * This file is part of the WordPress Widget Boilerplate\n *\n * (c) Tom McFarlin &lt;tom@tommcfarlin.com&gt;\n *\n * This source file is subject to the GPL license that is bundled\n * with this source code in the file LICENSE.\n *\/\n\nnamespace WordPressWidgetBoilerplateSubscriber;\n\n\/**\n * The subscriber responsible for loading the JavaScript on the Widget's adminsitration page.\n *\/\nclass AdminScriptAssetSubscriber extends AbstractSubscriber\n{\n    \/**\n     * {@inheritdoc}\n     *\/\n    public function __construct(string $hook)\n    {\n        parent::__construct($hook);\n    }\n\n    \/**\n     * Adds the administrative JavaScript to the widget administration page.\n     *\/\n    public function load()\n    {\n        if ('widgets' !== get_current_screen()-&gt;id) {\n            return;\n        }\n\n        wp_enqueue_script(\n            'wordpress-widget-boilerplate',\n            plugin_dir_url(dirname(__DIR__)).'assets\/js\/admin.js'\n        );\n    }\n}\n<\/code><\/pre>\n<p>Ja <a href=\"https:\/\/gist.github.com\/tommcfarlin\/9cf10f4aadbe54f2fc2e87b619a33bcc#file-04-public-script-subscriber-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">avalik JavaScripti tellija:<\/a><\/p>\n<pre><code>&lt;?php\n\n\/*\n * This file is part of the WordPress Widget Boilerplate\n *\n * (c) Tom McFarlin &lt;tom@tommcfarlin.com&gt;\n *\n * This source file is subject to the GPL license that is bundled\n * with this source code in the file LICENSE.\n *\/\n\nnamespace WordPressWidgetBoilerplateSubscriber;\n\n\/**\n * The subscriber responsible for loading the JavaScript on the blog.\n *\/\nclass PublicScriptAssetSubscriber extends AbstractSubscriber\n{\n    \/**\n     * {@inheritdoc}\n     *\/\n    public function __construct(string $hook)\n    {\n        parent::__construct($hook);\n    }\n\n    \/**\n     * Adds the JavaScript to the public-facing side of the site.\n     *\/\n    public function load()\n    {\n        if (is_admin()) {\n            return;\n        }\n\n        wp_enqueue_script(\n            'wordpress-widget-boilerplate',\n            plugin_dir_url(dirname(__DIR__)).'assets\/js\/widget.js'\n        );\n    }\n}\n<\/code><\/pre>\n<p>J\u00e4llegi, neid klasse ei saa veel instantseerida, kuid keskendume sellele tulevases postituses.<\/p>\n<h2>Abstraktsioonid ja liidesed<\/h2>\n<p>Pidage meeles, et abstraktsioonid ja liidesed on erinevad, kuid neid on lihtne segi ajada. Liidesed ei sisalda absoluutselt nulli rakendamist. Selle asemel annavad need garantii, et iga liidest rakendav klass rakendab k\u00f5iki meetodeid.<\/p>\n<p>Abstraktsetel klassidel v\u00f5ib seevastu olla abstraktses klassis rakendatud m\u00f5ningaid funktsioone, j\u00e4ttes samal ajal domeenispetsiifilise koodi (nt laaditabelite ja JavaScripti laadimine) sobivale meetodile.<\/p>\n<p>See selgub, kui seda veel pole, siis mida kaugemale me sellesse sarja j\u00f5uame. Seni \u2013 ja nagu ikka \u2013 \u00e4rge unustage tutvuda arendusharuga, <a href=\"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\/tree\/develop\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">et<\/a> n\u00e4ha, kus me koodiga seisame.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>V\u00e4idetavalt on Boilerplate&#8217;i suurim probleem see, et k\u00f5ik on kapseldatud \u00fchte klassi. Nii et muudame seda abstraktsete klassidega.<\/p>\n","protected":false},"author":1,"featured_media":235804,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,833,802,863],"tags":[1165],"class_list":["post-230732","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-juhend-algajatele","category-php-4","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230732","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=230732"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230732\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/235804"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=230732"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=230732"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=230732"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}