{"id":229535,"date":"2022-11-04T12:07:00","date_gmt":"2022-11-04T09:07:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229535"},"modified":"2022-11-09T08:24:44","modified_gmt":"2022-11-09T05:24:44","slug":"rapid-prototyping-prototype-to-code-osa-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/rapid-prototyping-prototype-to-code-osa-2\/","title":{"rendered":"Rapid Prototyping: Prototype to Code, osa 2"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/nopea-prototyyppi-prototype-to-code-osa-1\/\" title=\"Edellinen viesti\" >Edellinen viesti<\/a> osoittaa paljon ty\u00f6t\u00e4 jonkin kerran nopean prototyypin ottamiseksi ja prototyypin ottamiseksi koodaamaan. Jos et ole seurannut, olemme tehneet seuraavasti:<\/p>\n<ol>\n<li>puhui ja rakensi prototyypin laajennukselle,<\/li>\n<li>kaaviollisesti yksi oliol\u00e4ht\u00f6inen l\u00e4hestymistapa voi toimia,<\/li>\n<li>ja muutti prototyyppimme todelliseksi koodiksi.<\/li>\n<\/ol>\n<p>T\u00e4ss\u00e4 vaiheessa voimme tehd\u00e4 viel\u00e4 muutamia asioita koodimme parantamiseksi. Voimme nimitt\u00e4in ottaa k\u00e4ytt\u00f6\u00f6n nimiavaruuksien k\u00e4sitteen. T\u00e4m\u00e4 vie organisaation askeleen pidemm\u00e4lle ja voi maksaa osinkoja isommille projekteille.<\/p>\n<p>Joten t\u00e4ss\u00e4 on katsaus, miten t\u00e4m\u00e4 toimii nykyisess\u00e4 projektissamme.<\/p>\n<h2>Prototyyppi Koodiin: Nimiavaruudet<\/h2>\n<p>Olen k\u00e4sitellyt nimiavaruuksia perusteellisesti aiemmissa viesteiss\u00e4. Jos et ole lukenut, <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/nimitilat-ja-automaattinen-lataus-wordpressissae\/\" title=\"suosittelen\" >suosittelen<\/a>. Palaa sitten takaisin ja katso postauksen loppuosa.<\/p>\n<p>Jos p\u00e4\u00e4t\u00e4t ohittaa artikkelin, t\u00e4ss\u00e4 <a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.rationale.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">on lyhyt m\u00e4\u00e4ritelm\u00e4 nimiavaruudesta<\/a> :<\/p>\n<blockquote>\n<p>Nimiavaruudet on suunniteltu ratkaisemaan kaksi ongelmaa, joita kirjastojen ja sovellusten tekij\u00e4t kohtaavat luodessaan uudelleenk\u00e4ytett\u00e4vi\u00e4 koodielementtej\u00e4, kuten luokkia tai toimintoja\u2026<\/p>\n<\/blockquote>\n<p>Ja yleinen ajatus on, ett\u00e4 j\u00e4rjest\u00e4mme tunnit niiden loogisen suhteen perusteella.<\/p>\n<p>Lis\u00e4ksi j\u00e4rjest\u00e4mme tiedostot hakemistoihin, jotka vastaavat nimiavaruutta. T\u00e4t\u00e4 ei tarvitse tehd\u00e4, mutta mielest\u00e4ni se auttaa, jos luokat j\u00e4rjestet\u00e4\u00e4n loogisesti levylle samalla tavalla kuin ne ovat virtuaalisesti j\u00e4rjestetty nimiavaruudessa.<\/p>\n<p>J\u00e4rjestet\u00e4\u00e4n tiedostot t\u00e4m\u00e4n j\u00e4lkeen.<\/p>\n<h3>Tiedostojen j\u00e4rjest\u00e4minen<\/h3>\n<p>Sen sijaan, ett\u00e4 aloittaisit p\u00e4\u00e4laajennustiedostosta, aloitetaan j\u00e4rjest\u00e4m\u00e4ll\u00e4 tiedostomme ensin.<\/p>\n<ul>\n<li><strong>Meta Box- ja Meta Box Display -tiedostot sijaitsevat Display<\/strong> -nimisess\u00e4 hakemistossa. T\u00e4m\u00e4 on t\u00e4ysin mielivaltaista, mutta koska n\u00e4m\u00e4 tiedostot tekev\u00e4t niin, n\u00e4ytt\u00e4\u00e4 j\u00e4rkev\u00e4lt\u00e4, ett\u00e4 ne sijaitsevat siell\u00e4.<\/li>\n<li>Voimme my\u00f6s sijoittaa <strong>viesti-description.php-<\/strong> ja <strong>no-post-list.php-<\/strong> tiedostot kyseiseen hakemistoon, mutta sijoitetaan ne <strong>Views<\/strong> -nimiseen alihakemistoon. Haluat ehk\u00e4 kutsua t\u00e4t\u00e4 <strong>malliksi<\/strong> tai <strong>osittaiseksi<\/strong> tai vastaavaksi.<\/li>\n<li>Seuraavaksi meill\u00e4 on luokat, jotka vastaavat tietokannan kyselyist\u00e4 ja luokka, joka vastaa viestinn\u00e4n koordinoinnista. Laitetaan jokainen n\u00e4ist\u00e4 <strong>Utilityyn.<\/strong> Tietysti he voisivat menn\u00e4 muihin paikkoihin, mutta muista, ett\u00e4 tarkoitus on esitell\u00e4, kuinka nimiavaruuksia k\u00e4ytet\u00e4\u00e4n. Joten jos olet niin halukas, voit muokata tiedostojasi mielesi mukaan.<\/li>\n<\/ul>\n<p>Jos olet noudattanut yll\u00e4 olevia ohjeita, sinulla pit\u00e4isi olla hakemistorakenne, joka n\u00e4ytt\u00e4\u00e4 suunnilleen t\u00e4lt\u00e4:<\/p>\n<p>Yksi tapa j\u00e4rjest\u00e4\u00e4 tiedostot.<\/p>\n<p>Nyt on aika m\u00e4\u00e4ritell\u00e4 nimiavaruudet jokaiselle luokalle. Koska olemme j\u00e4rjest\u00e4neet ne kaikki hakemistoihinsa, nimitilan m\u00e4\u00e4ritt\u00e4minen on helppoa; On kuitenkin t\u00e4rke\u00e4\u00e4 ymm\u00e4rt\u00e4\u00e4, ett\u00e4 meid\u00e4n on k\u00e4ytett\u00e4v\u00e4 <strong><a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.importing.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">use<\/a><\/strong> &#8211; avainsanaa, kun k\u00e4yt\u00e4mme muissa nimiavaruuksissa sijaitsevia luokkia.<\/p>\n<p>K\u00e4yd\u00e4\u00e4n l\u00e4pi jokainen tiedostomme alkaen <strong>Utilityn<\/strong> tiedostoista. Aloitamme ensin <a href=\"https:\/\/gist.github.com\/tommcfarlin\/38c72277ddbd0fa70a74c03598070703#file-00-post-messenger-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Post Messengerill\u00e4<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Display content for the meta box when requested.\n *\n * @author Tom McFarlin\n * @since  0.2.0\n *\/\n\nnamespace McFarlinTRPUtility;\nuse McFarlinTRPUtilityPost_Query;\n\n\/**\n * Retrieves information from the class responsible for querying the database and\n * renders it in the context of our meta box when called via the Meta Box Display.\n *\n * @author Tom McFarlin\n * @since  0.2.0\n *\/\nclass Post_Messenger {\n  \/\/ Snip for brevity. \n}<\/code><\/pre>\n<p>Huomaat, ett\u00e4 tiedoston nimiavaruus n\u00e4kyy otsikossa yhdess\u00e4 ilmoituksen kanssa <strong>luomamme Post Query<\/strong> -luokan k\u00e4ytt\u00e4misest\u00e4. Olen lis\u00e4nnyt luokan nimen nimiavaruuden loppuun, joten minun ei tarvitse k\u00e4ytt\u00e4\u00e4 sit\u00e4 koko koodikannassa.<\/p>\n<p>Huomaa, ett\u00e4 rakentaja n\u00e4ytt\u00e4\u00e4 nyt <a href=\"https:\/\/gist.github.com\/tommcfarlin\/38c72277ddbd0fa70a74c03598070703#file-01-post-messenger-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Instantiates the class by setting a reference to the query.\n *\n * @param string $plugin_dir The path to the root of the plugin directory.\n *\/\npublic function __construct( $plugin_dir) {\n\n    $this-&gt;query      = new Post_Query();\n    $this-&gt;plugin_dir = trailingslashit( $plugin_dir );\n}<\/code><\/pre>\n<p>Olen lis\u00e4nnyt <strong>$plugin_dir-<\/strong> argumentin, koska meid\u00e4n on k\u00e4ytett\u00e4v\u00e4 sit\u00e4 n\u00e4ytt\u00e4\u00e4ksemme kyselyn tulokset oikein. Ja koska ne sijaitsevat nyt sovelluksen eri alueella, toiminnot n\u00e4ytt\u00e4v\u00e4t <a href=\"https:\/\/gist.github.com\/tommcfarlin\/38c72277ddbd0fa70a74c03598070703#file-02-post-messenger-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Displays the description of the content of the meta box.\n *\n * @access private\n *\/\nprivate function get_post_message() {\n    include_once $this-&gt;plugin_dir. 'Display\/Views\/post-list.php';\n}\n\n\/**\n * Displays the description of the content of the meta box.\n *\n * @access private\n *\/\nprivate function get_description() {\n    include_once $this-&gt;plugin_dir. 'Display\/Views\/message-description.php';\n}\n\n\/**\n * Displays a message of there are no recent posts.\n *\n * @access private\n *\/\nprivate function get_no_posts_message() {\n    include_once $this-&gt;plugin_dir. 'Display\/Views\/no-post-list.php';\n}<\/code><\/pre>\n<p>Katsotaan seuraavaksi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/38c72277ddbd0fa70a74c03598070703#file-03-post-query-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Post Query<\/a> -luokkaa. Mik\u00e4\u00e4n ei ole muuttunut t\u00e4ss\u00e4 luokassa, paitsi ett\u00e4 olemme antaneet sille nimitilan, ja olemme my\u00f6s p\u00e4ivitt\u00e4neet kysely\u00e4 vain vet\u00e4\u00e4ksemme takaisin kolme viesti\u00e4 (<a href=\"https:\/\/tommcfarlin.com\/prototype-to-code-1\/#comment-911828\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4m\u00e4n kommentin<\/a> mukaisesti ).<\/p>\n<pre><code>&lt;?php\n\nnamespace McFarlinTRPUtility;\n\n\/**\n * Queries the database for three most recent posts. Returns the query to the\n * caller so that it can be interrogates for posts or not.\n *\n * @author Tom McFarlin\n * @since  0.2.0\n *\/\nclass Post_Query {\n\n  \/\/ Snip for brevity.\n\n    private function get_posts() {\n\n        $args = array(\n            'post_type'        =&gt; 'post',\n            'post_status'      =&gt; 'publish',\n            'posts_per_page' =&gt; 3,\n            'orderby'          =&gt; 'date',\n            'order'            =&gt; 'desc',\n        );\n        $this-&gt;query = new WP_Query( $args );\n\n        return $this-&gt;query;\n    }\n}<\/code><\/pre>\n<p>Huomaa koodissa, ett\u00e4 olen my\u00f6s esikorjannut <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/WP_Query\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Queryn<\/a> kauttaviivalla, koska se on osa globaalia nimiavaruutta.<\/p>\n<p>Siirryt\u00e4\u00e4n <strong>Display<\/strong> &#8211; hakemistoon ja katsotaan <a href=\"https:\/\/gist.github.com\/tommcfarlin\/38c72277ddbd0fa70a74c03598070703#file-04-meta-box-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Meta Box -luokkaa<\/a>. T\u00e4lle on my\u00f6s annettu nimiavaruus ja se k\u00e4ytt\u00e4\u00e4 my\u00f6s <strong>Meta Box Display<\/strong> -luokan t\u00e4ytt\u00e4 nime\u00e4, jota tarkastelemme hetken kuluttua.<\/p>\n<pre><code>&lt;?php\n\n namespace McFarlinTRPDisplay;\n use McFarlinTRPDisplayMeta_Box_Display;\n\n\/**\n * Registers the Meta Box with WordPress. Defines the ID, title, display function,\n * and the post type on which it will live.\n *\n * @author Tom McFarlin\n * @since  0.2.0\n *\/\nclass Meta_Box {\n\n    \/**\n     * A reference to the class that will display the contents in the meta box.\n     *\n     * @access private\n     * @var    Meta_Box_Display\n     *\/\n    private $meta_box_display;\n\n    \/**\n     * Instantiates the class by setting its property equal to a reference to its display.\n     *\n     * @param string $plugin_dir A reference to the root of the plugin's directory.\n     *\/\n    public function __construct( $plugin_dir) {\n        $this-&gt;meta_box_display = new Meta_Box_Display( $plugin_dir );\n    }\n\n    \/\/ Snip for brevity.\n}<\/code><\/pre>\n<p>Huomaa, ett\u00e4 t\u00e4m\u00e4 rakentaja hyv\u00e4ksyy my\u00f6s lis\u00e4osien hakemiston argumenttina ja v\u00e4litt\u00e4\u00e4 sen my\u00f6s <strong>Meta Box Display<\/strong> -luokkaan. T\u00e4m\u00e4 tarkoittaa, ett\u00e4 viestien n\u00e4ytt\u00e4misest\u00e4 vastaavat toiminnot l\u00f6ytyv\u00e4t oikein paikaltaan <strong>N\u00e4kym\u00e4t<\/strong> &#8211; hakemistosta.<\/p>\n<p>Lopuksi tarkastellaan <strong>Meta Box Display<\/strong> -luokkaa. T\u00e4m\u00e4 on yksinkertainen luokka, joka sis\u00e4lt\u00e4\u00e4 nimitilan ja viittaukset <strong>Post Messengeriin<\/strong>, jota olemme tarkastaneet edell\u00e4.<\/p>\n<pre><code>&lt;?php\n\/**\n * Defines the display for the meta box.\n *\n * @author Tom McFarlin\n * @since  0.2.0\n *\/\n\nnamespace McFarlinTRPDisplay;\nuse McFarlinTRPUtilityPost_Messenger;\n\n\/**\n * Defines the display for the meta box that will render the content in the\n * context of its meta box.\n *\n * @author Tom McFarlin\n * @since  0.2.0\n *\/\nclass Meta_Box_Display {\n\n    \/**\n     * A reference to the class that will display the contents in the meta box.\n     *\n     * @access private\n     * @var    Post_Messenger\n     *\/\n    private $messenger;\n\n    \/**\n     * Instantiates the object by setting a property equal to that of the class\n     * responsible for rendering the messages from the post query.\n     *\n     * @param string $plugin_dir A reference to the root of the plugin's directory.\n     *\/\n    public function __construct( $plugin_dir) {\n        $this-&gt;messenger = new Post_Messenger( $plugin_dir );\n    }\n\n    \/**\n     * If there are posts to display, renders them in the metabox. Otherwise, displays\n     * a note that there are no posts to display.\n     *\/\n    public function display() {\n        $this-&gt;messenger-&gt;get_message();\n    }\n}\n<\/code><\/pre>\n<p>T\u00e4ss\u00e4 vaiheessa olemme saavuttaneet t\u00e4yden ympyr\u00e4n laajennuksen kautta. Yhdell\u00e4 poikkeuksella: Bootstrap-tiedosto. Olemme lis\u00e4nneet siihen nimitilan, ja meid\u00e4n on p\u00e4ivitett\u00e4v\u00e4 tapa <a href=\"https:\/\/gist.github.com\/tommcfarlin\/38c72277ddbd0fa70a74c03598070703#file-06-bootstrap-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, jolla se ilmennet\u00e4\u00e4n<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace McFarlinTRP;\nuse McFarlinTRPDisplayMeta_Box;\n\ninclude 'Display\/class-meta-box.php';\ninclude 'Display\/class-meta-box-display.php';\ninclude 'Utility\/class-post-messenger.php';\ninclude 'Utility\/class-post-query.php';\n\nadd_action( 'add_meta_boxes', __NAMESPACE__. 'trp_start' );\n\/**\n * Starts the plugin.\n *\/\nfunction trp_start() {\n\n    $meta_box = new Meta_Box( dirname( __FILE__) );\n    $meta_box-&gt;init();\n}<\/code><\/pre>\n<p>Meill\u00e4 on nimitt\u00e4in:<\/p>\n<ul>\n<li>m\u00e4\u00e4ritteli nimiavaruuden,<\/li>\n<li>mainitse <strong>Meta Box<\/strong> -luokan sijainti,<\/li>\n<li>p\u00e4ivitti polut sis\u00e4lt\u00e4m\u00e4\u00e4n tiedostojen l\u00f6yt\u00e4misen (mik\u00e4 voidaan viime k\u00e4dess\u00e4 tehd\u00e4 automaattilatauksella),<\/li>\n<li>ja p\u00e4ivitti <strong>add_action-<\/strong> kutsun.<\/li>\n<\/ul>\n<p>T\u00e4ss\u00e4 on lis\u00e4toimintokutsu: Koska WordPressin on l\u00f6ydett\u00e4v\u00e4 t\u00e4m\u00e4 funktio ja funktio sijaitsee nimiavaruudessa, funktion t\u00e4ydellinen nimi on tunnistettava, jotta WordPress voi kutsua sen. T\u00e4st\u00e4 syyst\u00e4 funktion nimess\u00e4 tarvitaan <strong><a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.nsconstants.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">NAMESPACE<\/a><\/strong>.<\/p>\n<h2>Nyt olemme j\u00e4rjest\u00e4ytyneet (yht\u00e4 poikkeusta lukuun ottamatta)<\/h2>\n<p>Kuten huomaat, nimitilat ja niit\u00e4 vastaavat hakemistot lis\u00e4\u00e4v\u00e4t projektiin paljon organisointia. Sit\u00e4 on helpompi seurata, helpompi ymm\u00e4rt\u00e4\u00e4, miss\u00e4 asiat menev\u00e4t (sek\u00e4 olemassa oleville ett\u00e4 uusille tiedostoille). Ja se antaa v\u00e4hemm\u00e4n tunnetta, kun ker\u00e4\u00e4t useita tiedostoja yhteen paikkaan.<\/p>\n<p>Vaikka luokka olisikin hieman monoliitti, se voidaan silti j\u00e4rjest\u00e4\u00e4 niin, ett\u00e4 yll\u00e4pito on helppoa.<\/p>\n<p>T\u00e4ss\u00e4 lis\u00e4yksess\u00e4 on kuitenkin viel\u00e4 jotain, mit\u00e4 muutan: Pluginin hakemiston kiert\u00e4minen t\u00e4ll\u00e4 tavalla ei auta heikentyneess\u00e4 koheesiossa ja se yhdist\u00e4\u00e4 luokat tiiviimmin yhteen, koska bootstrap-tiedoston on v\u00e4litett\u00e4v\u00e4 arvo yksi luokka, joka siirt\u00e4\u00e4 sen toiseen luokkaan, joka k\u00e4ytt\u00e4\u00e4 sit\u00e4 tiedostojen lataamiseen ja niin edelleen.<\/p>\n<p>Onko siis olemassa keinoja korjata t\u00e4m\u00e4? Ehdottomasti. Ja ehk\u00e4 tarkastelemme sit\u00e4 viimeisess\u00e4 viestiss\u00e4.<\/p>\n<p>Muista siihen asti, ett\u00e4 laajennuksen uusin versio on saatavilla <a href=\"https:\/\/github.com\/tommcfarlin\/three-recent-posts\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">p\u00e4\u00e4haarassa, joka on merkitty 0.3.0:ksi, GitHubissa<\/a>.<\/p>\n<h2>Sarjan postaukset<\/h2>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/nopea-prototyyppien-luominen-wordpressillae-konseptista-laajennukseen\/\" title=\"Nopea prototyyppien luominen WordPressill\u00e4: konseptista laajennukseen\">Nopea prototyyppien luominen WordPressill\u00e4: konseptista laajennukseen<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/nopea-prototyyppien-luominen-wordpressillae-konseptianalyysi\/\" title=\"Nopea prototyyppien luominen WordPressill\u00e4: konseptianalyysi\">Nopea prototyyppien luominen WordPressill\u00e4: konseptianalyysi<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/nopea-prototyyppi-prototype-to-code-osa-1\/\" title=\"Nopea prototyyppi: Prototype to Code, osa 1\">Nopea prototyyppi: Prototype to Code, osa 1<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/prototype-to-code-2\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Rapid Prototyping: Prototype to Code, osa 2<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/rapid-prototyping-esittelyssae-automaattinen-lataus\/\" title=\"Rapid Prototyping: Esittelyss\u00e4 automaattinen lataus\">Rapid Prototyping: Esittelyss\u00e4 automaattinen lataus<\/a><\/li>\n<\/ol>\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>Jatkaessani siirtymist\u00e4 prototyypist\u00e4 koodiin, otan k\u00e4ytt\u00f6\u00f6n liit\u00e4nn\u00e4isen ja toteutan liit\u00e4nn\u00e4t organisaatiolle.<\/p>\n","protected":false},"author":1,"featured_media":223922,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,917,843],"tags":[1166],"class_list":["post-229535","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-muut","category-opetusohjelmia","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229535","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=229535"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229535\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/223922"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229535"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229535"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229535"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}