{"id":231576,"date":"2022-12-24T13:25:00","date_gmt":"2022-12-24T10:25:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231576"},"modified":"2022-12-24T13:26:24","modified_gmt":"2022-12-24T10:26:24","slug":"tyoekalut-paremman-wordpress-koodin-kirjoittamiseen-saeveltaejae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/tyoekalut-paremman-wordpress-koodin-kirjoittamiseen-saeveltaejae\/","title":{"rendered":"Ty\u00f6kalut paremman WordPress-koodin kirjoittamiseen: S\u00e4velt\u00e4j\u00e4"},"content":{"rendered":"\n<p>Vaikka mielest\u00e4ni t\u00e4m\u00e4n sarjan otsikko ja kunkin artikkelit ovat riitt\u00e4v\u00e4n selke\u00e4t, pyrin t\u00e4ss\u00e4 sarjassa tekem\u00e4\u00e4n muitakin asioita toisin kuin muissa t\u00e4h\u00e4n asti kirjoittamissani sarjoissa.<\/p>\n<p>Tarkemmin sanottuna kaksi niist\u00e4 asioista, joita yrit\u00e4n tehd\u00e4, on kaksi:<\/p>\n<ol>\n<li>pid\u00e4 jokainen artikkeli suhteellisen ytimekk\u00e4\u00e4n\u00e4 (verrattuna siihen, miten aikaisemmat artikkelit ovat olleet),<\/li>\n<li>Keskity yhteen asiaan kerrallaan ja pid\u00e4 sen kuvaus lyhyen\u00e4.<\/li>\n<\/ol>\n<p>Koska t\u00e4m\u00e4 on j\u00e4sensis\u00e4lt\u00f6\u00e4, en haittaa, ett\u00e4 se on hieman tavallista pidempi, mutta en my\u00f6sk\u00e4\u00e4n halua sen olevan niin pitk\u00e4, ett\u00e4 sit\u00e4 on vaikea seurata. Mieluummin se olisi lyhyt luku, jossa on jotain k\u00e4yt\u00e4nn\u00f6llist\u00e4, jonka voit toteuttaa jokaisen postauksen lukemisen j\u00e4lkeen.<\/p>\n<p>Ja yksi asioista, jotka auttavat suuresti paremman WordPress-koodin kirjoittamisessa, on Composer.<\/p>\n<h2>Parempi WordPress-koodi s\u00e4velt\u00e4j\u00e4n kanssa<\/h2>\n<p>Jos olet lukenut t\u00e4t\u00e4 blogia pidemm\u00e4n aikaa, tied\u00e4t, ett\u00e4 olen Composer-fani (en kuitenkaan suinkaan ole ainoa WordPressiss\u00e4 ty\u00f6skentelev\u00e4 henkil\u00f6).<\/p>\n<p>Ja vaikka olen kirjoittanut siit\u00e4 materiaalia, en ole kirjoittanut mit\u00e4\u00e4n, jonka nimenomainen tarkoitus on saada sinut k\u00e4yntiin yhden lyhyen artikkelin lukemisen loppuun menness\u00e4.<\/p>\n<p>Siihen asti meid\u00e4n on teht\u00e4v\u00e4 joitain kompromisseja: Nimitt\u00e4in toimitan mallim\u00e4\u00e4ritystiedoston sek\u00e4 tavan j\u00e4rjest\u00e4\u00e4 laajennuksesi hakemisto. Seuraavassa postauksessa selit\u00e4n joitain Composerin ominaisuuksia.<\/p>\n<h3>Mik\u00e4 on s\u00e4velt\u00e4j\u00e4?<\/h3>\n<p>Ensinn\u00e4kin on t\u00e4rke\u00e4\u00e4 ymm\u00e4rt\u00e4\u00e4, mik\u00e4 Composer on. Ja on helppo toistaa m\u00e4\u00e4ritelm\u00e4 sivustolla, eik\u00f6 niin? Se on PHP:n riippuvuushallinta.<\/p>\n<h4>Mutta ensinn\u00e4kin, mit\u00e4 on riippuvuus?<\/h4>\n<p>Joillekin se kuitenkin her\u00e4tt\u00e4\u00e4 muutaman kysymyksen:<\/p>\n<ul>\n<li>Mik\u00e4 on riippuvuus?<\/li>\n<li>Miksi minun pit\u00e4\u00e4 hallita niit\u00e4?<\/li>\n<\/ul>\n<p>Ja jos kaivaat hieman syvemm\u00e4lle, saatat huomata, ett\u00e4 se on paketinhallinta, ja t\u00e4m\u00e4 her\u00e4tt\u00e4\u00e4 yksinkertaisesti samat kysymykset, paitsi ett\u00e4 korvaat vain sanan &quot;riippuvuus&quot; sanalla &quot;paketti&quot;, ja olet taas siin\u00e4, mist\u00e4 aloitit.<\/p>\n<p>Joten teen kaikkeni tehd\u00e4kseni t\u00e4m\u00e4n mahdollisimman selv\u00e4ksi:<\/p>\n<p>Riippuvuus tai paketti, ohjelmisto, jota koodisi k\u00e4ytt\u00e4\u00e4. Se voi olla jokin, johon se luottaa toiminnassaan suorituksen aikana, kuten <a href=\"http:\/\/docs.guzzlephp.org\/en\/stable\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tapa tehd\u00e4 HTTP-pyynt\u00f6j\u00e4<\/a>, tai se voi olla kirjasto <a href=\"https:\/\/github.com\/spatie\/array-to-xml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">taulukoiden muuntamiseksi XML-muotoon<\/a>.<\/p>\n<p>Composer helpottaa n\u00e4iden pakettien sis\u00e4llytt\u00e4mist\u00e4 kirjastoosi antamalla sinulle mahdollisuuden:<\/p>\n<ul>\n<li>lataa ja sis\u00e4llyt\u00e4 paketti laajennukseen,<\/li>\n<li>lataa laajennuksen automaattisesti ajon aikana,<\/li>\n<li>helpottaa laajennuksen luomista tai kutsumista siihen tarvittaessa.<\/li>\n<\/ul>\n<p>T\u00e4m\u00e4 tarkoittaa, ett\u00e4 meid\u00e4n ei tarvitse t\u00e4ytt\u00e4\u00e4 koodikantamme hakemistoja monilla manuaalisesti lis\u00e4tyill\u00e4 tiedostoilla, ja se tarkoittaa, ett\u00e4 meill\u00e4 ei ole kaikkialla k\u00e4ytett\u00e4v\u00e4\u00e4 <strong>include-<\/strong> tai <strong>request<\/strong> &#8211;\u00a0 toimintoa.<\/p>\n<p>N\u00e4ille on oma paikkansa, josta keskustelen seuraavassa postauksessa, mutta niit\u00e4 ei tarvitse asentaa automaattisesti. Sen sijaan Composer hallinnoi niit\u00e4. Siksi riippuvuusp\u00e4\u00e4llikk\u00f6 on osa sen tarkoitusta.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/paremman-wordpress-koodin-kirjoittaminen-johdanto\/\" title=\"Nyt kun se on asennettu\">Nyt kun se on asennettu<\/a>, sinulla on kontekstia.<\/p>\n<h3>S\u00e4velt\u00e4j\u00e4n k\u00e4ytt\u00f6<\/h3>\n<p>T\u00e4m\u00e4n osion kirjoittaminen on hieman vaikeaa, koska meill\u00e4 kaikilla on erilaiset tarpeet, eik\u00f6 niin? Mutta ainakin me kaikki voimme hy\u00f6dynt\u00e4\u00e4 automaattista latauslaitetta.<\/p>\n<p>Sit\u00e4 me kaikki voimme k\u00e4ytt\u00e4\u00e4.<\/p>\n<p>Joten t\u00e4ss\u00e4 on mit\u00e4 teen:<\/p>\n<ol>\n<li>Perustan laajennushakemiston,<\/li>\n<li>Luo tarvittavat tiedostot laajennuksen ohjaamiseen,<\/li>\n<li>Luo yksinkertainen Composer-tiedosto,<\/li>\n<li>Suorita se<\/li>\n<\/ol>\n<p>Ja sitten annan sinun n\u00e4hd\u00e4 tulokset. Voimme p\u00e4\u00e4st\u00e4 kolmansien osapuolien kirjastoihin tai muihin ominaisuuksiin tulevassa postauksessa (tai tulevissa sarjoissa).<\/p>\n<p>Mutta jos ei muuta, t\u00e4m\u00e4 n\u00e4ytt\u00e4\u00e4 sinulle, kuinka voit k\u00e4ytt\u00e4\u00e4 Composeria automaattisen latausohjelman m\u00e4\u00e4ritt\u00e4miseen, jotta voit keskitty\u00e4 koodin kirjoittamiseen etk\u00e4 ihmetell\u00e4, sis\u00e4llytet\u00e4\u00e4nk\u00f6 luokkiin.<\/p>\n<h4>Plugin-hakemisto<\/h4>\n<p>Rakentelen laajennuksiani yleens\u00e4 n\u00e4in:<\/p>\n<ul>\n<li>siell\u00e4 on bootstrap-tiedosto, jonka WordPress lukee,<\/li>\n<li>siell\u00e4 on <strong>src<\/strong> -hakemisto, jossa kaikki hakemistot ja PHP-tiedostot s\u00e4ilytet\u00e4\u00e4n,<\/li>\n<li>siell\u00e4 on huipputason <strong>omaisuushakemisto<\/strong>, jossa s\u00e4ilytet\u00e4\u00e4n kuvia, JavaScript-tiedostoja ja Sass-tiedostoja,<\/li>\n<li>ja\u00a0 Composer on luonut <strong>toimittajakansion<\/strong> riippuvuuksille ja automaattiselle latausohjelmalle.<\/li>\n<\/ul>\n<p>Joskus saattaa olla jokin muu pariton kansio, kuten <strong>inc-<\/strong> tai <strong>lib<\/strong> -kansio, mutta se on eritt\u00e4in ep\u00e4s\u00e4\u00e4nn\u00f6llist\u00e4 t\u00e4ss\u00e4 vaiheessa tekem\u00e4ss\u00e4ni ty\u00f6ss\u00e4. Ja sen vuoksi en aio huolehtia siit\u00e4 t\u00e4m\u00e4n postauksen takia.<\/p>\n<p>Sen sijaan hakemistoni n\u00e4ytt\u00e4\u00e4 suunnilleen t\u00e4lt\u00e4.<\/p>\n<p>Toimittajahakemisto puuttuu, koska en ole viel\u00e4 luonut Composer-tiedostoa, jota k\u00e4ytet\u00e4\u00e4n suorittamaan<strong>.<\/strong> Mutta se n\u00e4hd\u00e4\u00e4n ennen postauksen loppua.<\/p>\n<h4>Esimerkkitiedostot<\/h4>\n<p>Asennetaan n\u00e4ytetiedosto laajennukseen. Ja kun sanon n\u00e4yte, tarkoitan my\u00f6s yksinkertaista.<\/p>\n<p>T\u00e4ll\u00e4 tiedostolla on yksi tarkoitus: Tulosta viesti kojelautaan, kun kirjaudut WordPressiin.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160226-61e707e186b99.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-160226-61e707e186b99.png\" alt=\"Ty\u00f6kalut paremman WordPress-koodin kirjoittamiseen: S\u00e4velt\u00e4j\u00e4\"><\/a><\/p>\n<p>Muista kuitenkin, ett\u00e4 t\u00e4m\u00e4n tarkoituksena ei ole n\u00e4ytt\u00e4\u00e4, kuinka kirjoittaa hyvin arkkitehtuuriltaan laajennus. Sen sijaan se n\u00e4ytt\u00e4\u00e4 kuinka luodaan automaattinen lataus, jotta laajennuksen tiedostot luodaan automaattisesti.<\/p>\n<p>Joten laajennuksen bootstrap n\u00e4ytt\u00e4\u00e4 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94e25b3c6b304d348b8f4a69b03091fd#file-00-sample-plugin-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * The plugin bootstrap file\n *\n * This file is read by WordPress to generate the plugin information in the plugin\n * admin area. This file also includes all of the dependencies used by the plugin,\n * registers the activation and deactivation functions, and defines a function\n * that starts the plugin.\n *\n * @since             0.1.0\n * @package           SamplePlugin\n *\n * @wordpress-plugin\n * Plugin Name:       Sample Plugin\n * Description:       A sample plugin used for a blog post.\n * Version:           0.1.0\n * Author:            Tom McFarlin\n * Author URI:        https:\/\/tommcfarlin.com\n * License:           GPL-3.0+\n * License URI:       http:\/\/www.gnu.org\/licenses\/gpl-3.0.txt\n *\/\n\nnamespace SamplePlugin;\n\nuse SamplePluginMessenger;\n\n\/\/ This file called directly.\ndefined('WPINC') || die;\n\n\/\/ Include the autoloader.\nrequire_once __DIR__. '\/vendor\/autoload.php';\n\n\/\/ Start the machine.\n(new Messenger())-&gt;start();\n<\/code><\/pre>\n<p>Ja erityisesti viestin n\u00e4ytt\u00e4misest\u00e4 vastaava tiedosto n\u00e4ytt\u00e4\u00e4 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94e25b3c6b304d348b8f4a69b03091fd#file-01-messenger-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace SamplePlugin;\n\nclass Messenger\n{\n    \/**\n     * Subscribers the `adminNotices` function to the admin_notices hook in WordPress.\n     *\/\n    public function start()\n    {\n        add_action('admin_notices', [$this, 'adminNotices']);\n    }\n\n    \/**\n     * Displays the contents of the `message.html` file into the adminitrative notices\n     * area on the dashboard whenever the plugin is active.\n     *\/\n    public function adminNotices()\n    {\n        if ('dashboard' !== get_current_screen()-&gt;id) {\n            return;\n        }\n\n        include_once dirname(__FILE__). '\/Admin\/Views\/message.html';\n    }\n}\n<\/code><\/pre>\n<p>Ja jos olet utelias HTML-tiedostosta, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94e25b3c6b304d348b8f4a69b03091fd#file-02-message-html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">se on my\u00f6s yksinkertainen<\/a> :<\/p>\n<pre><code>&lt;div class=\"notice notice-success is-dismissible\"&gt;\n    &lt;p&gt;This is a message from the &lt;strong&gt;Sample Plugin&lt;\/strong&gt;&lt;\/p&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n<p>Sanoin, ett\u00e4 se oli yksinkertaista.<\/p>\n<h4>S\u00e4velt\u00e4j\u00e4n m\u00e4\u00e4ritystiedosto<\/h4>\n<p>T\u00e4m\u00e4 tiedosto voi olla niin yksinkertainen tai monimutkainen kuin tarpeen. T\u00e4ss\u00e4 viestiss\u00e4 pid\u00e4mme asian yksinkertaisena. T\u00e4m\u00e4n viestin tavoitteena on yksinkertaisesti antaa sille nimi, kuvaus, lisenssi, tekij\u00e4t ja sitten kuinka automaattinen latausohjelma m\u00e4\u00e4ritet\u00e4\u00e4n.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/94e25b3c6b304d348b8f4a69b03091fd#file-03-composer-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Katso t\u00e4st\u00e4<\/a>, ja sitten selit\u00e4n, mit\u00e4 n\u00e4et sen alla:<\/p>\n<pre><code>{\n    \"name\": \"tommcfarlin\/sample-plugin\",\n    \"description\": \"A sample plugin used for a blog post.\",\n    \"type\": \"wordpress-plugin\",\n    \"license\": \"GPL-3.0-or-later\",\n    \"authors\": [\n      {\n        \"name\": \"Tom McFarlin\",\n        \"email\": \"tom@tommcfarlin.com\",\n        \"homepage\": \"https:\/\/tommcfarlin.com\"\n      }\n    ],\n      \"autoload\": {\n        \"psr-4\": {\n          \"SamplePlugin\": \"src\/\"\n        }\n      }\n  }<\/code><\/pre>\n<p>Ensinn\u00e4kin nimen, kuvauksen, tyypin ja lisenssin tulee olla riitt\u00e4v\u00e4n helposti seurattavia. My\u00f6s kirjoittaja-alue on suoraviivainen.<\/p>\n<p>Automaattinen lataus on alue, josta olemme t\u00e4ll\u00e4 hetkell\u00e4 huolissamme. Sen pit\u00e4isi olla melko selke\u00e4.<\/p>\n<p>Lyhyesti sanottuna, meill\u00e4 on <strong>ohje PSR4<\/strong> :lle, \u00a0josta voit lukea lis\u00e4\u00e4 ja sitten miss\u00e4 nimiavaruus sijaitsee. Joten yll\u00e4 olevassa esimerkiss\u00e4 mik\u00e4 tahansa nimiavaruudessa <strong>SamplePlugin<\/strong> sijaitsee <strong>src:ss\u00e4.\u00a0<\/strong><\/p>\n<p>T\u00e4m\u00e4 kertoo automaattiselle latausohjelmalle, mist\u00e4 etsi\u00e4 tiettyj\u00e4 tiedostoja. Ja meid\u00e4n tapauksessamme se vain etsii <strong>Messenger<\/strong> &#8211; luokkaa.<\/p>\n<h4>Juokseva s\u00e4velt\u00e4j\u00e4<\/h4>\n<p>Nyt kun olemme k\u00e4sitelleet Composer-m\u00e4\u00e4ritystiedoston perusasiat, on aika suorittaa se. Muista, ett\u00e4 laajennushakemistosi pit\u00e4isi n\u00e4ytt\u00e4\u00e4 suunnilleen t\u00e4lt\u00e4:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160226-61e707e55e20b.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-160226-61e707e55e20b.png\" alt=\"Ty\u00f6kalut paremman WordPress-koodin kirjoittamiseen: S\u00e4velt\u00e4j\u00e4\"><\/a><\/p>\n<p>Kirjoita terminaaliin <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94e25b3c6b304d348b8f4a69b03091fd#file-04-run-composer-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">seuraava komento<\/a> :<\/p>\n<p>Ja sinun pit\u00e4isi n\u00e4hd\u00e4 jotain t\u00e4llaista:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160226-61e707e92efb9.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-160226-61e707e92efb9.png\" alt=\"Ty\u00f6kalut paremman WordPress-koodin kirjoittamiseen: S\u00e4velt\u00e4j\u00e4\"><\/a><\/p>\n<p>Olettaen, ett\u00e4 kaikki on mennyt hyvin, sinun pit\u00e4isi pysty\u00e4 kirjautumaan WordPressiin ja aktivoimaan laajennus.<\/p>\n<h4>Kaiken n\u00e4keminen yhdess\u00e4<\/h4>\n<p>Kun laajennus on aktivoitu, voit siirty\u00e4 sivustosi kojelautaan. Siell\u00e4 sinun pit\u00e4isi n\u00e4hd\u00e4 hyl\u00e4tt\u00e4v\u00e4 ilmoitus, joka n\u00e4ytt\u00e4\u00e4 t\u00e4sm\u00e4lleen samalta kuin n\u00e4imme viestin alussa:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160226-61e707e186b99.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-160226-61e707e186b99.png\" alt=\"Ty\u00f6kalut paremman WordPress-koodin kirjoittamiseen: S\u00e4velt\u00e4j\u00e4\"><\/a><\/p>\n<p>Jos olet p\u00e4\u00e4ssyt n\u00e4in pitk\u00e4lle, olet hyv\u00e4! Muussa tapauksessa tarkista syntaksisi varmistaaksesi, ett\u00e4 kaikki on hyvin. Jos jokin on vialla, et todenn\u00e4k\u00f6isesti olisi p\u00e4\u00e4ssyt n\u00e4in pitk\u00e4lle, ja olettaen, ett\u00e4 sinulla on perusvirheenkorjausvakiot <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/wordpressin-virhelokien-lukeminen-ja-ymmaertaeminen-osa-1\/\" title=\"asetettu\">asetettu<\/a>, n\u00e4et todenn\u00e4k\u00f6isesti, miss\u00e4 ongelma on.<\/p>\n<h2>T\u00e4m\u00e4 ei ole kaikki<\/h2>\n<p>Composerissa on paljon muutakin, ja suosittelen sen dokumentaation lukemista. Osan n\u00e4ist\u00e4 k\u00e4sittelen tarkastellessani ty\u00f6kaluja, joita aion k\u00e4sitell\u00e4 my\u00f6hemmin t\u00e4ss\u00e4 sarjassa, mutta toistaiseksi suosittelen tutustumista joihinkin k\u00e4yt\u00e4nt\u00f6ihin.<\/p>\n<p>Vai niin! En suosittele myyj\u00e4hakemiston tarkistamista arkistoon. Siit\u00e4 voi my\u00f6hemmin tulla valtava hakemisto, ja se voi heikent\u00e4\u00e4 Composerin koko tarkoitusta.<\/p>\n<p>Seuraavassa postauksessa kerron miksi. Jotkut ihmiset tekev\u00e4t niin, ja se on okei, ja min\u00e4 olen tehnyt sen ennenkin, mutta on t\u00e4rke\u00e4\u00e4 olla harkitsevainen sen suhteen, kun teet niin.<\/p>\n<p>Err puolella olla tekem\u00e4tt\u00e4 sit\u00e4. Ja miksi, kerron seuraavassa postauksessa.<\/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>Hyvin yksinkertainen johdatus Composeriin, jossa selitet\u00e4\u00e4n sen tarkoitus ja kuinka voit k\u00e4ytt\u00e4\u00e4 sit\u00e4 hy\u00f6dynt\u00e4\u00e4ksesi automaattista latausta.<\/p>\n","protected":false},"author":1,"featured_media":236343,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,864],"tags":[1166],"class_list":["post-231576","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231576","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=231576"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231576\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/236343"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231576"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}