{"id":233517,"date":"2023-02-16T16:33:00","date_gmt":"2023-02-16T13:33:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233517"},"modified":"2022-11-11T00:07:03","modified_gmt":"2022-11-10T21:07:03","slug":"opas-kuinka-kaeyttaeae-ajaxia-oikein-wordpressissae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/opas-kuinka-kaeyttaeae-ajaxia-oikein-wordpressissae\/","title":{"rendered":"Opas: Kuinka k\u00e4ytt\u00e4\u00e4 AJAXia oikein WordPressiss\u00e4"},"content":{"rendered":"\n<p>AJAX on tekniikka, jota voit k\u00e4ytt\u00e4\u00e4 Javascriptiss\u00e4 tietojen hakemiseen palvelimelta ja sivusi sis\u00e4ll\u00f6n p\u00e4ivitt\u00e4miseen lataamatta sit\u00e4 uudelleen selaimeesi. T\u00e4ss\u00e4 viestiss\u00e4 sukeltaamme siihen, kuinka AJAXia k\u00e4ytet\u00e4\u00e4n oikein WordPressiss\u00e4.<\/p>\n<p>Useimmat teist\u00e4 ovat luultavasti perehtyneet AJAX-pyynt\u00f6jen suorittamiseen WordPressin ulkopuolella ja haluavat selvitt\u00e4\u00e4, miten se tehd\u00e4\u00e4n WordPressiss\u00e4. Saatat mietti\u00e4 seuraavia kysymyksi\u00e4:<\/p>\n<ol>\n<li>Mihin URL-osoitteeseen sinun tulee l\u00e4hett\u00e4\u00e4 AJAX-pyynt\u00f6si Javascriptiss\u00e4si.<\/li>\n<li>Kuinka saada AJAX-pyynt\u00f6 todella kiinni PHP:ss\u00e4, noutaa sen tiedot ja l\u00e4hett\u00e4\u00e4 jotain takaisin.<\/li>\n<li>Varmista, ett\u00e4 AJAX-pyynt\u00f6si ovat turvallisia.<\/li>\n<\/ol>\n<p>WordPressiss\u00e4 voit suorittaa AJAX-pyynt\u00f6j\u00e4 j\u00e4rjestelm\u00e4nvalvojassa ja\/tai k\u00e4ytt\u00f6liittym\u00e4ss\u00e4; prosessi on sama, mutta yll\u00e4 oleviin kysymyksiin vastaamisessa on muutamia eroja. Sukellaan heti sis\u00e4\u00e4n!<\/p>\n<h2>AJAX-pyynn\u00f6n suorittamisen perusteet WordPressiss\u00e4<\/h2>\n<p>Ensimm\u00e4inen asia, jonka tarvitset, on tietysti javascript, johon haluat l\u00e4hett\u00e4\u00e4 AJAX-pyynn\u00f6n. Se tulee asettaa jonoon k\u00e4ytt\u00e4m\u00e4ll\u00e4 <a href=\"https:\/\/awhitepixel.com\/blog\/all-about-adding-styles-and-scripts-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kelvollista menetelm\u00e4\u00e4 lis\u00e4t\u00e4 komentosarjoja WordPressiin<\/a>, joko k\u00e4ytt\u00f6liittym\u00e4\u00e4n tai taustaj\u00e4rjestelm\u00e4\u00e4n. Todenn\u00e4k\u00f6isesti sinulla on jo skripti, jossa tarvitset vain osan l\u00e4hett\u00e4\u00e4 tai pyyt\u00e4\u00e4 jotain WordPressist\u00e4.<\/p>\n<p>AJAXin l\u00e4hett\u00e4minen WordPressiss\u00e4 edellytt\u00e4\u00e4 Javascript-objektimuuttujan v\u00e4litt\u00e4mist\u00e4 tietona pyynt\u00f6\u00f6n. Objektissa sinun on annettava v\u00e4hint\u00e4\u00e4n yksi ominaisuus; &#8217; <code>action<\/code>&#8217;. Ominaisuuden arvo <code>action<\/code>on merkkijono, joka voi olla (melkein) mit\u00e4 tahansa haluat. T\u00e4m\u00e4 toiminto kertoo WordPressille, kuinka AJAX-pyynt\u00f6 reititet\u00e4\u00e4n. Mutta se m\u00e4\u00e4rittelee my\u00f6s osan koukun nimest\u00e4, johon sinun on kytkett\u00e4v\u00e4 PHP:ssa AJAX-pyynn\u00f6n k\u00e4sittely\u00e4 varten.<\/p>\n<p>Mit\u00e4 tulee kysymykseen 1 vastaamiseen yll\u00e4: mihin URL-osoitteeseen sinun tulee l\u00e4hett\u00e4\u00e4 AJAX-pyynt\u00f6si? T\u00e4m\u00e4 vaihtelee sen mukaan, onko komentosarjasi jonossa j\u00e4rjestelm\u00e4nvalvojassa vai k\u00e4ytt\u00f6liittym\u00e4ss\u00e4. Koska AJAX on jo sis\u00e4\u00e4nrakennettu WordPressin hallintaruutuihin, voit k\u00e4ytt\u00e4\u00e4 globaalia muuttujaa <code>ajaxurl<\/code>. Mutta k\u00e4ytt\u00f6liittym\u00e4pyynn\u00f6iss\u00e4 se on hieman monimutkaisempi, koska sinun on annettava AJAX-URL manuaalisesti Javascriptin kanssa. Siit\u00e4 lis\u00e4\u00e4 alla.<\/p>\n<p>AJAX-pyynt\u00f6jen k\u00e4sittelemiseksi PHP:ss\u00e4 kytket\u00e4\u00e4n toimintoon <code>wp_ajax_&lt;your action name&gt;<\/code>. Jos haluat suorittaa AJAX-pyynt\u00f6j\u00e4 k\u00e4ytt\u00f6liittym\u00e4ss\u00e4 ei-kirjautuneille k\u00e4ytt\u00e4jille, voit my\u00f6s kytke\u00e4 palvelimeen <code>wp_ajax_nopriv_&lt;your action name&gt;<\/code>. Siit\u00e4 lis\u00e4\u00e4 alla. Koukussa olevan funktion sis\u00e4ll\u00e4 p\u00e4\u00e4set k\u00e4siksi Javascriptist\u00e4 v\u00e4litettyihin tietoihin viittaamalla <code>$_POST<\/code>taulukkoon. Jos haluat tulostaa jotain takaisin, yksinkertaisesti toistat jotain. T\u00e4m\u00e4 on lyhyt vastaus kysymykseen 2 yll\u00e4.<\/p>\n<p>Sukellaanpa suoraan koodiin. Aloitamme AJAX-pyynt\u00f6jen lis\u00e4\u00e4misest\u00e4 hallintapaneeliin.<\/p>\n<h2>AJAX-pyynt\u00f6jen suorittaminen WordPress-j\u00e4rjestelm\u00e4nvalvojassa<\/h2>\n<p>Oletan, ett\u00e4 sinulla on jo jonossa komentosarja, joka reagoi johonkin k\u00e4ytt\u00e4j\u00e4n toimintaan, ker\u00e4\u00e4 tietoja ja on valmis suorittamaan AJAX-pyynn\u00f6n joko p\u00e4ivitt\u00e4\u00e4kseen jotain tai pyyt\u00e4\u00e4kseen tietoja takaisin WordPressist\u00e4. Alla oleva koodi on hyvin yksinkertaistettu esimerkki; koodi jonottaa Javascript-tiedoston teemassa j\u00e4rjestelm\u00e4nvalvojalle, ja Javascript-koodin sis\u00e4ll\u00e4 se asettaa satunnaismuuttujia, suorittaa AJAX:n sivun latauksen yhteydess\u00e4 ja tulostaa vastauksen konsolissa.<\/p>\n<pre><code>add_action('admin_enqueue_scripts', function() {\n    wp_enqueue_script('awhitepixel-script', get_stylesheet_directory_uri(). '\/assets\/js\/awhitepixel-ajax.js', ['jquery'], '', true);\n});<\/code><\/pre>\n<pre><code>jQuery(document).ready(function($) {\n    var data = {\n        'action': 'awhitepixel_send_something',\n        'something': 'Hello world',\n        'another_thing': 14\n    }\n    $.post(ajaxurl, data, function(response) {\n        console.log(response);\n    });\n});<\/code><\/pre>\n<p>Kuten yll\u00e4 olevasta Javascript-koodista n\u00e4kyy, m\u00e4\u00e4rit\u00e4t Javascript-objektin (ajattele sit\u00e4 taulukkona), joka sis\u00e4lt\u00e4\u00e4 kaikki tiedot, jotka haluat v\u00e4litt\u00e4\u00e4, mukaan lukien t\u00e4rke\u00e4 <code>action<\/code>ominaisuus.<\/p>\n<p>Kuten edell\u00e4 mainittiin, koska AJAX on jo sis\u00e4\u00e4nrakennettu WordPress-hallintan\u00e4ytt\u00f6ihin, k\u00e4yt\u00e4t yksinkertaisesti globaalia muuttujaa <code>ajaxurl<\/code>AJAX-URL-osoitteena.<\/p>\n<p>Nyt lis\u00e4\u00e4mme koodin t\u00e4m\u00e4n AJAX-pyynn\u00f6n hyv\u00e4ksymiseksi PHP:ss\u00e4. Koska annoin <code>awhitepixel_send_something<\/code>arvon &#8217; &#8217;:n arvoksi <code>action<\/code>, minun on kytkett\u00e4v\u00e4 laitteeseen <code>wp_ajax_awhitepixel_send_something<\/code>.<\/p>\n<pre><code>add_action('wp_ajax_awhitepixel_send_something', function() {\n    $something = $_POST['something'];\n    $another_thing = (int) $_POST['another_thing'];\n\u00a0\n    echo 'You sent '. $something. ' with '. $another_thing;\n\u00a0\n    wp_die();\n});<\/code><\/pre>\n<p>Koukussa olevan toiminnon sis\u00e4ll\u00e4 sinulla on t\u00e4ysi p\u00e4\u00e4sy WordPressiin; voit k\u00e4ytt\u00e4\u00e4 mit\u00e4 tahansa WordPressin toimintoja, kyselyit\u00e4 ja k\u00e4ytt\u00e4\u00e4 globaaleja muuttujia (esim <code>$wpdb<\/code>. tietokantakyselyihin). Kaikki Javascriptiss\u00e4 antamasi muuttujat ovat k\u00e4ytett\u00e4viss\u00e4 <code>$_POST<\/code>taulukossa Javascript-objektissa antamillasi avaimilla.<\/p>\n<p>On valinnaista siirt\u00e4\u00e4 jotain takaisin Javascriptiin (esimerkiksi kun haluat vain l\u00e4hett\u00e4\u00e4 pyynn\u00f6n p\u00e4ivitt\u00e4\u00e4 tai tallentaa jotain etk\u00e4 tarvitse vahvistusta). Jos haluat v\u00e4litt\u00e4\u00e4 jotain takaisin, yksinkertaisesti <code>echo<\/code>tulostasi. Jos haluat tulostaa monimutkaisempia muuttujia kuin pelkk\u00e4 merkkijono, sinun tulee palauttaa se json-koodattuna taulukkona, jotta Javascript voi lukea ja j\u00e4sent\u00e4\u00e4 sen oikein. Jotain t\u00e4llaista;<\/p>\n<pre><code>$pass_back = ['something' =&gt; 'a value', 'another_thing' =&gt; 42];\necho json_encode($pass_back);<\/code><\/pre>\n<p>Yksi t\u00e4rke\u00e4 viimeinen huomautus viimeisell\u00e4 rivill\u00e4; <code>wp_die()<\/code>. Kaikkien AJAX-soittotoimintojen tulee &quot;sulkea lanka&quot; tai lopettaa kunnolla tekem\u00e4ll\u00e4 <code>die()<\/code>tai <code>exit()<\/code>. WordPressiss\u00e4 k\u00e4yt\u00e4mme <code>wp_die()<\/code>oikeaa integrointia, mutta tulos on sama. Jos saat AJAX-vastauksiin outoa &quot;0&quot;, se johtuu todenn\u00e4k\u00f6isesti siit\u00e4, ett\u00e4 ei tehnyt <code>wp_die()<\/code>tai <code>die()<\/code>. Varmista aina, ett\u00e4 &quot;kuolet&quot; kaikkien toimintojen lopussa, jotka on kytketty <code>wp_ajax<\/code>.<\/p>\n<h2>AJAX-pyynt\u00f6jen suorittaminen WordPress-k\u00e4ytt\u00f6liittym\u00e4ss\u00e4<\/h2>\n<p>AJAX:n suorittaminen k\u00e4ytt\u00f6liittym\u00e4ss\u00e4 on sama kuin j\u00e4rjestelm\u00e4nvalvojassa, mutta hieman monimutkaisempi vastaus kysymykseen 1: mihin URL-osoitteeseen AJAXin tulisi l\u00e4hett\u00e4\u00e4. Yll\u00e4 olevassa esimerkiss\u00e4 AJAX:n suorittamisesta j\u00e4rjestelm\u00e4nvalvojassa meill\u00e4 oli jo globaali Javascript-muuttuja <code>ajaxurl<\/code>, mutta t\u00e4m\u00e4 muuttuja ei ole k\u00e4ytett\u00e4viss\u00e4 k\u00e4ytt\u00f6liittym\u00e4ss\u00e4. Meid\u00e4n on tarjottava se itse. K\u00e4ytt\u00e4m\u00e4si WordPressin AJAX-URL-osoitteen arvon saamiseksi <code>admin_url('admin-ajax.php')<\/code>(kyll\u00e4, &quot;admin url&quot; k\u00e4ytt\u00f6liittym\u00e4lle).<\/p>\n<p>Kun asetat jonoon k\u00e4ytt\u00f6liittym\u00e4n komentosarjan, joka suorittaa AJAX-pyynt\u00f6j\u00e4 teemassasi tai laajennuksessasi, sinun on v\u00e4litett\u00e4v\u00e4 WordPressin AJAX-URL-osoite muuttujana kyseiselle Javascriptille k\u00e4ytt\u00e4m\u00e4ll\u00e4 <code>wp_localize_script()<\/code>.<\/p>\n<pre><code>add_action('wp_enqueue_scripts', function() {\n    wp_enqueue_script('awhitepixel-ajaxscript', get_stylesheet_directory_uri(). '\/assets\/js\/frontendajax.js', ['jquery']);\n    $variable_to_js = [\n        'ajax_url' =&gt; admin_url('admin-ajax.php')\n    ];\n    wp_localize_script('awhitepixel-ajaxscript', 'Theme_Variables', $variable_to_js);\n});<\/code><\/pre>\n<p>Nyt sinulla on Javascriptiss\u00e4si p\u00e4\u00e4sy globaaliin Javascript-objektiin <code>Theme_Variables<\/code>(t\u00e4m\u00e4 nimi voi olla mik\u00e4 tahansa), jonka arvona on WordPressin AJAX-URL-osoite <code>ajax_url<\/code>ominaisuudelle. AJAX-toimintosi olisi jotain t\u00e4llaista:<\/p>\n<pre><code>jQuery(document).ready(function($) {\n    var data = {\n        'action': 'awhitepixel_frontend_stuff',\n        'something': 'Hello world',\n        'another_thing': 14\n    }\n    $.post(Theme_Variables.ajax_url, data, function(response) {\n        console.log(response);\n    });\n});<\/code><\/pre>\n<p>K\u00e4sitelless\u00e4si AJAXia k\u00e4ytt\u00f6liittym\u00e4ss\u00e4 on viel\u00e4 yksi asia, joka tulee pit\u00e4\u00e4 mieless\u00e4 koukkuun liittyen, jota k\u00e4yt\u00e4t AJAX-pyynt\u00f6jen hyv\u00e4ksymiseen. Pid\u00e4t silti koukun <code>wp_ajax_&lt;your action name&gt;<\/code>, mutta t\u00e4m\u00e4 koukku toimii vain sis\u00e4\u00e4nkirjautuneille vierailijoille. Jos haluat suorittaa AJAX-pyynt\u00f6j\u00e4 vierailijoille, jotka eiv\u00e4t ole kirjautuneet sis\u00e4\u00e4n, sinun on (my\u00f6s) kytkett\u00e4v\u00e4 <code>wp_ajax_nopriv_&lt;your action name&gt;<\/code>. Normaalisti k\u00e4ytt\u00f6liittym\u00e4n AJAX-pyynn\u00f6iss\u00e4, jotka ovat tarpeen, jotta teema toimisi kunnolla, kytket\u00e4\u00e4n molempiin ja osoitetaan molemmat samaan toimintoon.<\/p>\n<pre><code>add_action('wp_ajax_awhitepixel_frontend_stuff', 'awhitepixel_ajax_frontend');\nadd_action('wp_ajax_nopriv_awhitepixel_frontend_stuff', 'awhitepixel_ajax_frontend');\nfunction awhitepixel_ajax_frontend() {\n    $something = $_POST['something'];\n    $another_thing = (int) $_POST['another_thing'];\n\u00a0\n    echo 'You sent '. $something. ' with '. $another_thing;\n    wp_die();\n}<\/code><\/pre>\n<p>Mit\u00e4 tulee AJAX-kytkent\u00e4toiminnon sis\u00e4lt\u00f6\u00f6n, se on sama kuin j\u00e4rjestelm\u00e4nvalvojan pyynn\u00f6iss\u00e4. Sinulla on t\u00e4ydellinen p\u00e4\u00e4sy WordPressiin, saat k\u00e4siins\u00e4 v\u00e4litetyt muuttujat osoitteesta <code>$_POST<\/code>, valinnaisesti palautat jotain suorittamalla <code>echo<\/code>, ja sinun tulee aina, aina muistaa &quot;kulla&quot; kanssa <code>wp_die()<\/code>aivan lopussa.<\/p>\n<h2>Suojaa AJAX-pyynt\u00f6si<\/h2>\n<p>Koska AJAX tekee tietojen siirt\u00e4misest\u00e4 skriptin ja taustaj\u00e4rjestelm\u00e4n v\u00e4lill\u00e4 niin helppoa, sinun tulee ehdottomasti ryhty\u00e4 tarvittaviin toimenpiteisiin suojataksesi koodisi. T\u00e4m\u00e4 sis\u00e4lt\u00e4\u00e4 kaikkien tietojen puhdistamisen ennen niiden tallentamista, mutta my\u00f6s WordPressin &quot;nonce&quot;-toiminnon k\u00e4ytt\u00e4misen sen tarkistamiseksi, tulevatko pyynn\u00f6t oikeista ja hyv\u00e4ksytyist\u00e4 paikoista. Lue WordPressin <a href=\"https:\/\/developer.wordpress.org\/themes\/theme-security\/using-nonces\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentaatio kerran,<\/a> jos et tunne sit\u00e4.<\/p>\n<p>Perusoletus on t\u00e4m\u00e4; k\u00e4yt\u00e4t WordPress-menetelm\u00e4\u00e4 joko luomalla nonce-arvon (<code>wp_create_nonce()<\/code>) tai luomalla piilotetun sy\u00f6tt\u00f6kent\u00e4n, jossa arvona on nonce (<code>wp_nonce_field()<\/code>). AJAX-pyynn\u00f6ss\u00e4si v\u00e4lit\u00e4t nonce-arvon (jonka on koodattu WordPressill\u00e4) pyynn\u00f6ss\u00e4, ja hyv\u00e4ksyv\u00e4ss\u00e4 osassa (<code>wp_ajax_<\/code>hook) vahvistat nonce-arvon alun perin asettamillasi asetuksilla.<\/p>\n<p>Lis\u00e4t\u00e4\u00e4n hieman suojausta yll\u00e4 olevaan esimerkkikoodiin. Ensin luodaan nonce ja v\u00e4litet\u00e4\u00e4n se <code>wp_localize_script<\/code>AJAX-URL-osoitteeseen. Asetamme parametriksi <code>wp_create_nonce()<\/code>ainutlaatuisen merkkijonon, josta vain meid\u00e4n pit\u00e4isi tiet\u00e4\u00e4 niin sanotusti. Alla olevassa esimerkiss\u00e4 k\u00e4yt\u00e4n &#8217; <code>awhitepixel-nonce<\/code>&#8217;.<\/p>\n<pre><code>add_action('wp_enqueue_scripts', function() {\n    wp_enqueue_script('awhitepixel-ajaxscript', get_stylesheet_directory_uri(). '\/assets\/js\/frontendajax.js', ['jquery']);\n    $variable_to_js = [\n        'ajax_url' =&gt; admin_url('admin-ajax.php'),\n        'nonce' =&gt; wp_create_nonce('awhitepixel-nonce')\n    ];\n    wp_localize_script('awhitepixel-ajaxscript', 'Theme_Variables', $variable_to_js);\n});<\/code><\/pre>\n<p>Se, mik\u00e4 v\u00e4litet\u00e4\u00e4n <code>nonce<\/code>Javascript-muuttujissamme k\u00e4ytt\u00f6liittym\u00e4lle muodossa &quot; &quot;, on WordPressin luoma satunnaistettu luku. Kukaan muu kuin me, t\u00e4m\u00e4n k\u00e4sikirjoituksen kirjoittajat, tied\u00e4, ett\u00e4 kelvollinen nonce on &#8217; <code>awhitepixel-nonce<\/code>&#8217;. Javascriptiss\u00e4mme poimimme nonce-arvon ja v\u00e4lit\u00e4mme sen heti takaisin AJAX-pyynt\u00f6\u00f6mme:<\/p>\n<pre><code>jQuery(document).ready(function($) {\n    var data = {\n        'action': 'awhitepixel_frontend_stuff',\n        'something': 'Hello world',\n        'another_thing': 14,\n        'nonce': Theme_Variables.nonce\n    }\n    $.post(Theme_Variables.ajax_url, data, function(response) {\n        console.log(response);\n    });\n});<\/code><\/pre>\n<p>Ja lopuksi <code>wp_ajax<\/code>koukussa funktiossamme meid\u00e4n pit\u00e4isi aloittaa tarkistamalla, oliko nonce voimassa <code>wp_verify_nonce()<\/code>. Tarjoamme yll\u00e4 asettamamme ainutlaatuisen merkkijonon, ja jos WordPress ei vastaa t\u00e4m\u00e4n merkkijonon v\u00e4litetty\u00e4 ainutlaatuista koodattua arvoa, lopetamme v\u00e4litt\u00f6m\u00e4sti:<\/p>\n<pre><code>add_action('wp_ajax_awhitepixel_frontend_stuff', 'awhitepixel_ajax_frontend');\nadd_action('wp_ajax_nopriv_awhitepixel_frontend_stuff', 'awhitepixel_ajax_frontend');\nfunction awhitepixel_ajax_frontend() {\n    if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'awhitepixel-nonce')) {\n        wp_die(-1);\n    }\n\u00a0\n    $something = $_POST['something'];\n    $another_thing = (int) $_POST['another_thing'];\n\u00a0\n    echo 'You sent '. $something. ' with '. $another_thing;\n    wp_die();\n}<\/code><\/pre>\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>T\u00e4ss\u00e4 oppaassa sukeltaamme AJAXin oikein k\u00e4ytt\u00e4miseen WordPressiss\u00e4. K\u00e4ymme l\u00e4pi AJAX-pyynt\u00f6jen lis\u00e4\u00e4misen j\u00e4rjestelm\u00e4nvalvojaan ja k\u00e4ytt\u00f6liittym\u00e4\u00e4n sek\u00e4 suojauksen k\u00e4sittelyn.<\/p>\n","protected":false},"author":1,"featured_media":224900,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[895,719,719,895,1110,834,843,803,803,834,843,864,864],"tags":[1166],"class_list":["post-233517","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-koodi","category-kehittaejae","category-n-a","category-opas-aloittelijoille","category-opetusohjelmia","category-php-5","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233517","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=233517"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233517\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/224900"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=233517"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=233517"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=233517"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}