{"id":229323,"date":"2022-10-29T09:26:00","date_gmt":"2022-10-29T06:26:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229323"},"modified":"2022-11-09T06:29:24","modified_gmt":"2022-11-09T03:29:24","slug":"nimitilat-ja-automaattinen-lataus-wordpressissae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/nimitilat-ja-automaattinen-lataus-wordpressissae\/","title":{"rendered":"Nimitilat ja automaattinen lataus WordPressiss\u00e4"},"content":{"rendered":"\n<p>Viime viikolla pidin esitykseni <a href=\"https:\/\/2017.atlanta.wordcamp.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordCamp Atlantassa nimitiloista<\/a> ja automaattisesta latauksesta. (koko nimi oli Namespaces, Autoloading ja Improving Plugin Architecture, mutta se on suupala, eik\u00f6?)<\/p>\n<p>Puheen luonteesta johtuen olen p\u00e4\u00e4tt\u00e4nyt kirjoittaa postauksen liitteen\u00e4, jakaa dioja ja jakaa esimerkkilaajennuksen GitHubin keskustelun tukemiseksi.<\/p>\n<p>Joten jos olit paikalla, kiitos(!) ja t\u00e4ss\u00e4 postaus, lupasin. Ja niille teist\u00e4, jotka eiv\u00e4t osallistuneet, toivon, ett\u00e4 t\u00e4m\u00e4 viesti auttaa edelleen havainnollistamaan k\u00e4sitteit\u00e4 ja aiheita <a href=\"https:\/\/tommcfarlin.com\/wordcamp-atlanta-2017\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">, joista keskustelin WordCampissa<\/a>.<\/p>\n<h2>Nimiavaruudet ja automaattinen lataus<\/h2>\n<p>Ennen kuin puhun nimitiloista ja automaattisesta latauksesta WordPressiss\u00e4, syy, miksi haluan puhua t\u00e4st\u00e4, on se, ett\u00e4 se voi vaikuttaa suoraan koodisi laatuun, ja se voi vaikuttaa niin kuukausien ja vuosien ajan.<\/p>\n<p>Eiv\u00e4tk\u00f6 monet meist\u00e4 kehitt\u00e4jist\u00e4 esit\u00e4 jo kysymyst\u00e4:<\/p>\n<blockquote>\n<p>Kuinka voimme tehd\u00e4 koodistamme paremman kuin se jo on?<\/p>\n<\/blockquote>\n<p>Ja monet meist\u00e4 ovat tarpeeksi \u00e4lykk\u00e4it\u00e4 tiet\u00e4\u00e4kseen, mit\u00e4 emme tied\u00e4. Joten joudumme ty\u00f6skentelem\u00e4\u00e4n meille annettujen rajoitusten puitteissa.<\/p>\n<p>Joskus meill\u00e4 on aikaa tutkia tapoja tehd\u00e4 t\u00e4m\u00e4; toisinaan teemme ty\u00f6t\u00e4 sill\u00e4 tiedolla, joka meill\u00e4 on. Eik\u00e4 siin\u00e4 ole mit\u00e4\u00e4n vikaa.<\/p>\n<p>Mutta koska tied\u00e4mme, mit\u00e4 emme tied\u00e4, tied\u00e4mme, ett\u00e4 potentiaalia on enemm\u00e4n.<\/p>\n<h3>Ensinn\u00e4kin koodisi<\/h3>\n<p>Kun puhutaan aiheista, kuten nimiavaruuksista ja automaattisesta lataamisesta WordPressin kontekstissa, uskon, ett\u00e4 saamme usein ristiriitaisia \u200b\u200bvastauksia.<\/p>\n<p>Loppujen lopuksi voimme puhua sellaisista asioista kuin <a href=\"https:\/\/codex.wordpress.org\/Theme_Customization_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Theme Customizer<\/a> tai <a href=\"https:\/\/developer.wordpress.org\/rest-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">REST API<\/a> tai jostain hauskempaa.<\/p>\n<p>Tarkoitan, &quot;nimitilat ja automaattinen lataus&quot; ei vain kuulosta j\u00e4nnitt\u00e4v\u00e4lt\u00e4 tai eteenp\u00e4in viev\u00e4lt\u00e4, kun sit\u00e4 verrataan saatavilla oleviin uudempiin ominaisuuksiin ja teknologioihin, eik\u00f6 niin?<\/p>\n<p>Mutta ei, ne eiv\u00e4t todellakaan ole tylsi\u00e4. Ja t\u00e4m\u00e4n postauksen ja siihen liittyv\u00e4n esityksen ja l\u00e4hdekoodin kautta aion n\u00e4ytt\u00e4\u00e4 sinulle, miksi ja miten ne eiv\u00e4t ole.<\/p>\n<h4>Ne eiv\u00e4t ole tylsi\u00e4<\/h4>\n<p>Mielest\u00e4ni on reilua sanoa, ett\u00e4 kehitt\u00e4j\u00e4t \u2013 ainakin osa meist\u00e4 tai osa heist\u00e4 riippuen siit\u00e4, milt\u00e4 n\u00e4et itsesi \u2013 ovat pahamaineisia ohjelmoinnin n\u00e4k\u00f6kohdista kiistelev\u00e4ns\u00e4.<\/p>\n<p>&quot;Tyls\u00e4 keskustelu joka tapauksessa.&quot;<\/p>\n<p>Itse asiassa ei ole ollenkaan harvinaista kuulla jonkun v\u00e4ittelev\u00e4n parhaasta tavasta alustaa ja kirjoittaa for-silmukka, joka on mahdollisimman tehokas, kun iteroidaan pieness\u00e4 tietokantajoukossa huolimatta siit\u00e4, ett\u00e4 meill\u00e4 on neliytiminen prosessori ja 16 Gt RAM-muistia. p\u00f6yt\u00e4koneissamme.<\/p>\n<p>Joten jos v\u00e4lit\u00e4mme niin paljon jostain niin pienest\u00e4, v\u00e4lit\u00e4mme varmasti isommasta kuvasta. Asiat kuten:<\/p>\n<ul>\n<li>Paranneltu koodi<\/li>\n<li>Parempi organisaatio<\/li>\n<li>Lis\u00e4\u00e4ntynyt huollettavuus<\/li>\n<li>Helpompi virheenkorjaus<\/li>\n<li>Tienaa enemm\u00e4n rahaa (ehk\u00e4).<\/li>\n<\/ul>\n<p>Ja nimiavaruudet ja automaattinen lataus voivat johtaa suoraan kaikkeen yll\u00e4 olevaan (no, en voi puhua rahasta, mutta siin\u00e4 on potentiaalia).<\/p>\n<p>Jos tekisin yhteenvedon roolien nimiavaruuksista ja automaattisen latauspaikan kaikista yll\u00e4 olevista, sanoisin seuraavaa:<\/p>\n<p>Nimiavaruudet ja automaattinen lataus johtavat parempaan koodiin paremman organisoinnin, lokeroinnin tai modularisoinnin kautta ja tiiviimpiin suhteisiin konseptien avulla.<\/p>\n<p>Lis\u00e4ksi t\u00e4m\u00e4 lis\u00e4\u00e4 yll\u00e4pidett\u00e4vyytt\u00e4, koska koodi on j\u00e4rjestetty paketteihin, mik\u00e4 voi helpottaa virheenkorjausta tuotteen kasvaessa.<\/p>\n<p>Kaikki t\u00e4m\u00e4 voi s\u00e4\u00e4st\u00e4\u00e4 aikaa tai parantaa ajank\u00e4ytt\u00f6\u00e4, mik\u00e4 voi liiketoimintamallistasi riippuen vaikuttaa tulokseen.<\/p>\n<p>Mutta t\u00e4m\u00e4 ei silti kuvaa kumpaakaan n\u00e4ist\u00e4 asioista. Mutta varmasti, t\u00e4ss\u00e4 vaiheessa ne kuulostavat mielenkiintoisemmilta kuin silloin, kun ne esiteltiin ensimm\u00e4isen kerran.<\/p>\n<h4>Joten, mit\u00e4 he ovat?<\/h4>\n<p>Ennen kuin k\u00e4sittelet kunkin roolin m\u00e4\u00e4ritelmi\u00e4, katsotaanpa, kuinka nimiavaruuksien ja automaattisen latauksen puute WordPressiss\u00e4 on vaikuttanut negatiivisesti kokemukseesi, kun k\u00e4yt\u00e4t teemoja, laajennuksia, lis\u00e4osia tai mit\u00e4 tahansa muuta sinulla on.<\/p>\n<p>Palataanpa siis hetkeksi ja tarkastellaan jokaista erikseen.<\/p>\n<h5>Nimiavaruudet<\/h5>\n<p>Kuvittele, ett\u00e4 olet perinyt projektin ja olet aloittamassa ty\u00f6skentely\u00e4 sen parissa. Oletetaan, ett\u00e4 se on WordPress-laajennus.<\/p>\n<p>Asennat sen; aktivoit sen ja saat ainakin yhden seuraavista:<\/p>\n<ul>\n<li>Ehk\u00e4 n\u00e4et se ilke\u00e4n j\u00e4rjestysviestin selainikkunan yl\u00e4osassa, jossa n\u00e4kyy pinoj\u00e4lki.<\/li>\n<li>Saatat n\u00e4hd\u00e4 viestin, joka puhuu ristiriidoista toisen olemassa olevan paketin kanssa.<\/li>\n<li>Tai ehk\u00e4 kun yrit\u00e4t aktivoida laajennuksen, sivu p\u00e4ivittyy, mutta laajennus ei aktivoidu.<\/li>\n<li>Ehk\u00e4 olet jopa tehnyt kooditarkastuksen ja n\u00e4et class_exists-tarkistukset koko koodikannassa.<\/li>\n<\/ul>\n<p>Mik\u00e4 tahansa tai kaikki edell\u00e4 mainitut voivat aiheuttaa ongelmia WordPress-projektien kanssa. Mutta nimitilat voivat todella korjata suuren osan t\u00e4st\u00e4 suurimman osan ajasta.<\/p>\n<p>Syyn\u00e4 n\u00e4ihin ongelmiin on se, ett\u00e4 koodi, jonka kanssa ty\u00f6skentelet, on osa globaalia nimiavaruutta (verrattuna sen nimiavaruuteen), eik\u00e4 PHP pid\u00e4 siit\u00e4, ett\u00e4 luokilla ja moduuleilla on sama nimi. .<\/p>\n<p>Mutta kun annat nimiavaruuden jotain, annat sille sen alueen itseens\u00e4 n\u00e4hden, joka silti pelaa hienosti muiden komponenttien kanssa, vaikka niill\u00e4 olisi sama luokan nimi.<\/p>\n<h5>Autoloaders<\/h5>\n<p>Mit\u00e4 tulee autoloaderiin, ne ovat jollain tapaa hieman v\u00e4hemm\u00e4n monimutkaisia. Mieti ensin kirjoittamaasi koodia tai koodia, jonka kanssa ty\u00f6skentelet \u2013 erityisesti WordPress-laajennusten yhteydess\u00e4 \u2013 ja mieti sitten, kuinka monta kertaa kirjoitat tai n\u00e4et seuraavan:<\/p>\n<ul>\n<li><a href=\"https:\/\/php.net\/manual\/en\/function.include.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sis\u00e4lt\u00e4\u00e4<\/a><\/li>\n<li>sis\u00e4llyt\u00e4_kerran<\/li>\n<li><a href=\"https:\/\/php.net\/manual\/en\/function.require.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vaatia<\/a><\/li>\n<li>vaadi_kerran<\/li>\n<\/ul>\n<p>Ja joskus n\u00e4et ne sen tiedoston yl\u00e4osassa, joka k\u00e4ynnist\u00e4\u00e4 laajennuksen, ja joskus n\u00e4et ne hajallaan koodikannassa.<\/p>\n<p>Jos ne ovat kaikki yhdess\u00e4 tiedostossa, se ei ole niin paha, koska ainakin tied\u00e4t miss\u00e4 ne ovat. Mutta jos niit\u00e4 roskaa kaikkialla, sinulla ei ole aavistustakaan, mist\u00e4 riippuvuus tuodaan j\u00e4rjestelm\u00e4\u00e4n.<\/p>\n<p>Automaattinen lataus voi ratkaista kaiken t\u00e4m\u00e4n lataamalla riippuvuudet tarvittaessa (ja kiinnostuneille automaattinen lataus on nopeampaa kuin manuaalinen lis\u00e4\u00e4minen).<\/p>\n<h2>Nimiavaruudet<\/h2>\n<p>Kaiken t\u00e4m\u00e4n j\u00e4lkeen olemme valmiita puhumaan sek\u00e4 <a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nimiavaruuksista<\/a> ett\u00e4 automaattisesta latauksesta. Mutta nimitilat ovat perusk\u00e4site, joten aloitamme siit\u00e4.<\/p>\n<p>Mutta kaiken edell\u00e4 mainitun j\u00e4lkeen voit n\u00e4hd\u00e4 niiden k\u00e4yt\u00f6n edut. Ehk\u00e4 ne ovat jopa hauskoja, eik\u00f6? Voi olla?<\/p>\n<p>Siit\u00e4 huolimatta tarvitsemme m\u00e4\u00e4ritelm\u00e4n, jonka pohjalta voimme ty\u00f6skennell\u00e4, kun puhumme t\u00e4st\u00e4 artikkelin loppuosan ajan.<\/p>\n<p>PHP-k\u00e4sikirja <a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.rationale.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sis\u00e4lt\u00e4\u00e4 seuraavan m\u00e4\u00e4ritelm\u00e4n<\/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 se ei ole huono, mutta se on melko pitk\u00e4, tekninen, ja se saattaa olla v\u00e4h\u00e4n paljon niille, jotka ovat vasta aloittamassa. Yksinkertaistetaanpa hieman t\u00e4t\u00e4 artikkelia varten:<\/p>\n<p>Ehk\u00e4 v\u00e4h\u00e4n paremmin?<\/p>\n<blockquote>\n<p>Tapa ryhmitell\u00e4 toisiinsa liittyvi\u00e4 luokkia ja k\u00e4ytt\u00f6liittymi\u00e4, joilla on samanlainen tarkoitus.<\/p>\n<\/blockquote>\n<p>En aio puhua t\u00e4ss\u00e4 keskustelussa k\u00e4ytt\u00f6liittymist\u00e4; Tied\u00e4n kuitenkin, ett\u00e4 on olemassa keskitason oliokehitt\u00e4ji\u00e4, jotka k\u00e4ytt\u00e4v\u00e4t niit\u00e4, joten halusin varmistaa, ett\u00e4 ainakin mainitsen heid\u00e4t.<\/p>\n<h3>K\u00e4yt\u00e4nn\u00f6n esimerkki<\/h3>\n<p>En pid\u00e4 ohjelmointiesimerkeist\u00e4, jotka eiv\u00e4t anna todellisia tai k\u00e4yt\u00e4nn\u00f6n sovelluksia. Usein meille annetaan esimerkkej\u00e4 asioista, joita emme koskaan kodifioisi.<\/p>\n<p>Kuinka monta kertaa olet lukenut olio-artikkelin ja se antaa esimerkin el\u00e4inluokasta tai autoluokasta? Emme aio ohjelmoida autoa.<\/p>\n<p>Ty\u00f6skentelemme paljon todenn\u00e4k\u00f6isemmin tiedostojen kanssa. Joten aiomme tarkastella joukkoa luokkia, jotka vastaavat tiedostojen lukemisesta ja kirjoittamisesta. Toisin sanoen olemme olleet hyvi\u00e4 olio-ohjelmoijia ja erotelleet luokkamme heid\u00e4n yll\u00e4pit\u00e4miens\u00e4 vastuiden perusteella.<\/p>\n<p>Ja kyll\u00e4, sinulla voi olla rajapintoja; ne eiv\u00e4t kuitenkaan kuulu t\u00e4m\u00e4n artikkelin piiriin, joten niit\u00e4 ei sis\u00e4llytet\u00e4.<\/p>\n<p>Joten FileReaderillemme luokan perusteet n\u00e4ytt\u00e4v\u00e4t ehk\u00e4 t\u00e4lt\u00e4:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a1413b1bb.jpg\" 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-167194-61e7a1413b1bb.jpg\" alt=\"Nimitilat ja automaattinen lataus WordPressiss\u00e4\" ><\/a><\/p>\n<p>Luokka tiedostojen lukemiseen.<\/p>\n<p>Huomaa, ett\u00e4 funktio hyv\u00e4ksyy sen tiedoston nimen, joka sen pit\u00e4isi avata luettavaksi. Virheiden tarkistaminen, kuinka se lukee tiedoston ja mit\u00e4 se palauttaa, on kaikki j\u00e4tetty luokan toteutuksen vastuulle.<\/p>\n<p>Ja FileWriterille meill\u00e4 on jotain t\u00e4m\u00e4n kaltaista:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a143c699f.jpg\" 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-167194-61e7a143c699f.jpg\" alt=\"Nimitilat ja automaattinen lataus WordPressiss\u00e4\" ><\/a><\/p>\n<p>Luokka tiedostojen kirjoittamiseen.<\/p>\n<p>T\u00e4m\u00e4 luokka toisaalta hyv\u00e4ksyy tiedot, jotka se aikoo kirjoittaa levylle ja tiedoston nimen, johon se tulee kirjoittaa.<\/p>\n<p>J\u00e4lleen, kuten yll\u00e4 olevassa esimerkiss\u00e4, se ei sis\u00e4ll\u00e4 virheiden tarkistamista, resurssin kautta kirjoittamista, resurssien sulkemista ja niin edelleen.<\/p>\n<p>Mutta t\u00e4ss\u00e4 ei ole kyse tiedostojen k\u00e4sittelyst\u00e4. Sen sijaan kyse on koodin nimiavaruuden osoittamisesta, ja n\u00e4iden kahden esimerkin on tarkoitus olla perustana sille.<\/p>\n<h3>Huomautuksia nimiavaruuksista<\/h3>\n<p>Yll\u00e4 olevan esimerkkikoodin kuvissa n\u00e4kyy varoitus: N\u00e4it\u00e4 luokkia ei ole nimetty. Toisin sanoen he asuvat globaalissa nimiavaruudessa, mik\u00e4 j\u00e4tt\u00e4\u00e4 heid\u00e4t kypsiksi konflikteihin muiden luokkien kanssa.<\/p>\n<p>Katso asiaa t\u00e4lt\u00e4: Kuvittele, ett\u00e4 pakkaat t\u00e4m\u00e4n koodin lis\u00e4osaan jonkun muun puolesta, ja sitten he lataavat toisen laajennuksen, jolla on my\u00f6s FileReader tai FileWriter. Koska se kaikki tulee olemaan osa samaa <a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.global.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">globaalia nimiavaruutta<\/a>, joudut kohtaamaan konfliktin.<\/p>\n<p>Muistaa:<\/p>\n<blockquote>\n<p>Nimiavaruudet ovat tapa ryhmitell\u00e4 toisiinsa liittyvi\u00e4 luokkia ja k\u00e4ytt\u00f6liittymi\u00e4, joilla on samanlainen tarkoitus.<\/p>\n<\/blockquote>\n<p>Otetaan siis luokat ja nimiavaruuteen koodi.<\/p>\n<p>Ensin tarjoamme ylimm\u00e4n tason nimitilan, jonka alla n\u00e4m\u00e4 luokat ja kaikki muut luokat sijaitsevat; sitten tarjoamme alipaketin (tai alinimiavaruuden tai aliavaruuden, kuten olen kuullut niit\u00e4 kutsuttavan), johon n\u00e4m\u00e4 tiedostoluokat sijaitsevat.<\/p>\n<p>T\u00e4m\u00e4 tarkoittaa, ett\u00e4 FileReader n\u00e4ytt\u00e4\u00e4 nyt t\u00e4lt\u00e4:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a146586f4.jpg\" 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-167194-61e7a146586f4.jpg\" alt=\"Nimitilat ja automaattinen lataus WordPressiss\u00e4\" ><\/a><\/p>\n<p>Nimiavaroitu luokka tiedostojen lukemiseen.<\/p>\n<p>Ja FileWriter-ohjelmamme n\u00e4ytt\u00e4\u00e4 nyt t\u00e4lt\u00e4:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a1487e5b2.jpg\" 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-167194-61e7a1487e5b2.jpg\" alt=\"Nimitilat ja automaattinen lataus WordPressiss\u00e4\" ><\/a><\/p>\n<p>Nimiavaroitu luokka tiedostojen kirjoittamista varten.<\/p>\n<p>Ensinn\u00e4kin voit n\u00e4hd\u00e4, ett\u00e4 nimiavaruuksien k\u00e4ytt\u00e4minen on helppoa: K\u00e4yt\u00e4t vain nimiavaruuden avainsanaa ja ilmoitat sitten nimiavaruuden (joka voi yht\u00e4 helposti olla WCATL) yl\u00e4reunassa alipakettien j\u00e4lkeen.<\/p>\n<p>Mutta t\u00e4m\u00e4 johtaa muihin aiheisiin \u2013 nimitt\u00e4in tiedostojen j\u00e4rjest\u00e4miseen, toteutukseen ja automaattiseen lataamiseen \u2013 jotka kaikki ovat k\u00e4sittelyn arvoisia.<\/p>\n<h3>Tiedoston j\u00e4rjest\u00e4misest\u00e4<\/h3>\n<p>T\u00e4ss\u00e4 vaiheessa on t\u00e4rke\u00e4\u00e4 saada sanaa tiedostojen j\u00e4rjest\u00e4misest\u00e4. Riippuen siit\u00e4, kenen kanssa puhut, tulet huomaamaan, ett\u00e4 joillakin kehitt\u00e4jill\u00e4 \u2013 yll\u00e4tys, yll\u00e4tys \u2013 on mielipide siit\u00e4, miten tiedostot pit\u00e4isi j\u00e4rjest\u00e4\u00e4 (enk\u00e4 min\u00e4 eroa).<\/p>\n<p>Toisaalta sinun ei tarvitse j\u00e4rjest\u00e4\u00e4 tiedostojasi ollenkaan. Itse asiassa voit pudottaa jokaisen asian projektisi juurihakemistoon, nimiavaruuteen tiedot ja olla valmis l\u00e4htem\u00e4\u00e4n.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a14ab117d.jpg\" 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-167194-61e7a14ab117d.jpg\" alt=\"Nimitilat ja automaattinen lataus WordPressiss\u00e4\" ><\/a><\/p>\n<p>J\u00e4rjest\u00e4m\u00e4tt\u00f6m\u00e4t tiedostot<\/p>\n<p>Yll\u00e4 oleva tiedostojoukko on tarkoitettu pienelle projektille, joten voit kuvitella kuinka monta tiedostoa on olemassa suuressa projektissa.<\/p>\n<p>Mutta kun olet j\u00e4rjest\u00e4nyt tiedostosi t\u00e4ll\u00e4 tavalla, se voi tehd\u00e4 automaattisen latausohjelman kirjoittamisesta hieman vaikeaa, koska automaattilataajan on tiedett\u00e4v\u00e4, mist\u00e4 tiedostot l\u00f6ytyv\u00e4t niiden nimitilan perusteella.<\/p>\n<p>T\u00e4ss\u00e4 termit &quot;looginen organisaatio&quot; ja &quot;virtuaalinen organisaatio&quot; tulevat esiin.<\/p>\n<ul>\n<li>Looginen organisaatio viittaa siihen, kuinka tiedostot on j\u00e4rjestetty levylle, kuten yll\u00e4 n\u00e4et. Ne sijaitsevat loogisesti juurihakemistossa.<\/li>\n<li>Virtuaalinen organisaatio viittaa siihen, kuinka tiedostot on j\u00e4rjestetty nimiavaruuksiensa suhteen. T\u00e4m\u00e4 tarkoittaa, ett\u00e4 on hakemistoja ja alihakemistoja, jotka yhdistet\u00e4\u00e4n nimiavaruuksiin, alipaketteihin ja niin edelleen.<\/li>\n<\/ul>\n<p>Jos siis ottaisit yll\u00e4 olevan projektin, sen nimitilat, sen alipaketit ja j\u00e4rjest\u00e4isit ne sitten sek\u00e4 loogisesti ett\u00e4 virtuaalisesti, se n\u00e4ytt\u00e4isi suunnilleen t\u00e4lt\u00e4:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a14d9a198.jpg\" 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-167194-61e7a14d9a198.jpg\" alt=\"Nimitilat ja automaattinen lataus WordPressiss\u00e4\" ><\/a><\/p>\n<p>Nimiavaruudet ja automaattinen lataus: J\u00e4rjestetyt tiedostot<\/p>\n<p>Ja vaikka voit j\u00e4rjest\u00e4\u00e4 tiedostosi haluamallasi tavalla, pid\u00e4n siit\u00e4, ett\u00e4 n\u00e4iden kahden v\u00e4lill\u00e4 on pariteetti. Toisin sanoen pid\u00e4n siit\u00e4, ett\u00e4 looginen ja virtuaalinen organisaationi vastaavat toisiaan, kuten n\u00e4et yll\u00e4 olevassa kuvassa.<\/p>\n<p>Kun siirryn keskustelemaan automaattisesta latauksesta, n\u00e4et, miksi t\u00e4ll\u00e4 on merkityst\u00e4.<\/p>\n<h2>Huomautuksia nimiavaruuksista<\/h2>\n<p>Mit\u00e4 tapahtuu kuitenkin, kun meid\u00e4n on instantoitava nimiavaruusluokkia? Kun luokilla ei ole nimiavaruutta, on helppo k\u00e4ytt\u00e4\u00e4 &quot;uusi&quot;-avainsanaa.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a14f8414e.jpg\" 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-167194-61e7a14f8414e.jpg\" alt=\"Nimitilat ja automaattinen lataus WordPressiss\u00e4\" ><\/a><\/p>\n<p>Instanssi ilman nimiavaruutta.<\/p>\n<p>Mutta meid\u00e4n on luotava nimiavaruusluokka, meid\u00e4n on otettava se askel pidemm\u00e4lle ja k\u00e4ytett\u00e4v\u00e4 t\u00e4ysin p\u00e4tev\u00e4\u00e4 nime\u00e4:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a1519c7ff.jpg\" 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-167194-61e7a1519c7ff.jpg\" alt=\"Nimitilat ja automaattinen lataus WordPressiss\u00e4\" ><\/a><\/p>\n<p>Nimiavaruudet ja automaattinen lataus: Instantiation nimiavaruudella.<\/p>\n<p>Mutta t\u00e4st\u00e4 tulee hankalaa, eik\u00f6? T\u00e4m\u00e4 esimerkki ei ole niin huono, mutta kuvittele, jos ty\u00f6st\u00e4isit jotain, jossa on enemm\u00e4n alipaketteja. Siit\u00e4 tulisi aika hankalaa, eik\u00f6?<\/p>\n<p>T\u00e4t\u00e4 varten voimme k\u00e4ytt\u00e4\u00e4 niin kutsuttua aliasausta. Se on my\u00f6s yksinkertainen. Voimme m\u00e4\u00e4ritt\u00e4\u00e4 k\u00e4ytt\u00e4m\u00e4\u00e4n tiedoston yl\u00e4osassa olevaa &quot;use&quot;-avainsanaa viittaamaan nimiavaruuteen, jolle haluamme aliaksen, ja sitten k\u00e4ytt\u00e4\u00e4 viimeist\u00e4 alipakettia osana aliasta luokkamme ilment\u00e4miseen.<\/p>\n<p>Kuulostaa h\u00e4mment\u00e4v\u00e4lt\u00e4, eik\u00f6? Ehk\u00e4 sen n\u00e4keminen toiminnassa auttaa:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a1541531b.jpg\" 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-167194-61e7a1541531b.jpg\" alt=\"Nimitilat ja automaattinen lataus WordPressiss\u00e4\" ><\/a><\/p>\n<p>Nimiavaruuksien aliasointi.<\/p>\n<p>Ja siin\u00e4 kaikki. Kyll\u00e4, voit <a href=\"https:\/\/php.net\/manual\/en\/language.namespaces.importing.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vied\u00e4 aliaksen viel\u00e4 pidemm\u00e4lle<\/a>, mutta t\u00e4m\u00e4 on sik\u00e4li kuin otan sen t\u00e4m\u00e4n artikkelin yhteydess\u00e4.<\/p>\n<h2>Automaattinen lataus<\/h2>\n<p>T\u00e4ss\u00e4 vaiheessa meill\u00e4 on luotu perusta automaattilataukselle. Kyll\u00e4, nimitilojen k\u00e4sittely voi olla paljon ty\u00f6t\u00e4, jos et ole tottunut siihen; On kuitenkin t\u00e4rke\u00e4\u00e4 ymm\u00e4rt\u00e4\u00e4, koska automaattinen lataus vaatii hieman ty\u00f6t\u00e4, joka voi olla odottamatonta, jos et ole koskaan tutustunut siihen.<\/p>\n<p>T\u00e4st\u00e4 huolimatta t\u00e4rkeimm\u00e4t asiat, jotka on muistettava nimiavaruuksista t\u00e4ss\u00e4 vaiheessa, ovat:<\/p>\n<ol>\n<li>Nimiavaruudet ovat tapa ryhmitell\u00e4 toisiinsa liittyvi\u00e4 luokkia ja k\u00e4ytt\u00f6liittymi\u00e4, joilla on samanlainen tarkoitus.<\/li>\n<li>Luo pariteetti tiedostojesi ja nimiavaruuksien kautta varmistaen, ett\u00e4 looginen ja virtuaalinen organisaatiosi ovat samat.<\/li>\n<\/ol>\n<p>Ja nyt on aika todella tarkastella automaattista latausta.<\/p>\n<h3>Huomautuksia automaattisesta latauksesta<\/h3>\n<p>Katsotaanpa <a href=\"https:\/\/php.net\/manual\/en\/language.oop5.autoload.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ensin PHP-k\u00e4sikirjan<\/a> automaattisen latauksen m\u00e4\u00e4ritelm\u00e4\u00e4 :<\/p>\n<blockquote>\n<p>Funktio spl_autoload_register() rekister\u00f6i mink\u00e4 tahansa m\u00e4\u00e4r\u00e4n automaattilataajia, mik\u00e4 mahdollistaa luokat ja liit\u00e4nn\u00e4t ladataan automaattisesti, jos niit\u00e4 ei ole m\u00e4\u00e4ritetty. Rekister\u00f6im\u00e4ll\u00e4 automaattilataajia PHP:lle annetaan viimeinen mahdollisuus ladata luokka tai k\u00e4ytt\u00f6liittym\u00e4 ennen kuin se ep\u00e4onnistuu virheen takia.<\/p>\n<\/blockquote>\n<p>Se ei ole huono. Se on kuitenkin pitk\u00e4. Joten aivan kuten teimme nimiavaruuksien kanssa, k\u00e4ytet\u00e4\u00e4n lyhyemp\u00e4\u00e4 m\u00e4\u00e4ritelm\u00e4\u00e4 t\u00e4lle artikkelille:<\/p>\n<blockquote>\n<p>Tapa ladata liit\u00e4nn\u00e4t ja luokat automaattisesti ilman include- ja demand -lauseita.<\/p>\n<\/blockquote>\n<p>J\u00e4lleen kerran, emme k\u00e4yt\u00e4 k\u00e4ytt\u00f6liittymi\u00e4 t\u00e4ss\u00e4 artikkelissa, vaikka jotkut kehitt\u00e4j\u00e4t k\u00e4ytt\u00e4v\u00e4tkin. Ja se tarjoaa toimivan m\u00e4\u00e4ritelm\u00e4n t\u00e4m\u00e4n artikkelin loppuosaa varten.<\/p>\n<h3>K\u00e4yt\u00e4nn\u00f6n esimerkki<\/h3>\n<p>Kun tiedostosi on j\u00e4rjestetty, nimiavaroitunut ja valmiina ladattaviksi, on aika tehd\u00e4 juuri niin, eik\u00f6 niin? Tarkoitan:<\/p>\n<ol>\n<li>tiedostosi on j\u00e4rjestetty,<\/li>\n<li>olet valmis lataamaan ne<\/li>\n<\/ol>\n<p>Joten on aika tehd\u00e4 se automaattisesti, eik\u00f6? Mutta siin\u00e4 on saalis. Koko tiedostojen &quot;automaattinen lataus&quot; vaatii hieman ty\u00f6t\u00e4.<\/p>\n<h3>Autoloaderin kirjoittaminen<\/h3>\n<p>Eli se on automaattinen, mutta vaatii silti hieman enemm\u00e4n ty\u00f6t\u00e4 meilt\u00e4. Ennen kuin siirryt n\u00e4ihin vaiheisiin, on t\u00e4rke\u00e4\u00e4 huomata:<\/p>\n<ol>\n<li>se ei ole t\u00e4ysin automatisoitu,<\/li>\n<li>meid\u00e4n on kirjoitettava se.<\/li>\n<\/ol>\n<p>Niin mukavaa kuin olisikin, ett\u00e4 koodi latautuu automaattisesti, meid\u00e4n on luettava joitakin tietoja, j\u00e4sennett\u00e4v\u00e4 ne ja yritett\u00e4v\u00e4 sitten ladata oikea tiedosto.<\/p>\n<p>Mutta olettaen, ett\u00e4 kirjoitat sen oikein ja nimiavaruutesi ja j\u00e4rjest\u00e4t tiedostot samalla tavalla jokaisessa projektissa, voit k\u00e4ytt\u00e4\u00e4 automaattista latausohjelmaa uudelleen. Eli kirjoitat sen kerran ja voit k\u00e4ytt\u00e4\u00e4 sit\u00e4 muissa projekteissa.<\/p>\n<h3>Autoloaderin vaiheet<\/h3>\n<p>Kun kirjoitat automaattista latausohjelmaa, sinun on noudatettava vain muutamia vaiheita. Autoloaderin on kyett\u00e4v\u00e4 vastaamaan seuraaviin tiedostoihin:<\/p>\n<ol>\n<li>Miss\u00e4 tiedostot ovat?<\/li>\n<li>Miten ne on nimetty?<\/li>\n<li>Onko tiedosto olemassa?<\/li>\n<\/ol>\n<p>Jos kaikki edell\u00e4 mainitut ovat totta (tai voit vastata &quot;kyll\u00e4&quot; kaikkiin), niin automaattinen latausohjelma tekee sen, mit\u00e4 sen pit\u00e4isi tehd\u00e4.<\/p>\n<p>Katsomme koodia hetken kuluttua, mutta ensimm\u00e4inen asia, joka on huomioitava, on, ett\u00e4 t\u00e4m\u00e4 k\u00e4ytt\u00e4\u00e4 toimintoa nimelt\u00e4 spl_autoload_register.<\/p>\n<p>SPL viittaa <a href=\"https:\/\/php.net\/manual\/en\/book.spl.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">standardiin PHP-kirjastoon<\/a> ja funktio hyv\u00e4ksyy funktion argumenttina, ja t\u00e4m\u00e4 funktio hyv\u00e4ksyy ilmennett\u00e4v\u00e4n luokan nimen. Se on pikemminkin menettelyllinen kuin oliokeskeinen, ja puhun t\u00e4st\u00e4 hetken, mutta on t\u00e4rke\u00e4\u00e4 pit\u00e4\u00e4 mieless\u00e4, kun luet t\u00e4t\u00e4 koodia.<\/p>\n<p>T\u00e4ss\u00e4 on koodin ensimm\u00e4inen osa. Selit\u00e4n sen j\u00e4lkeen mit\u00e4 se tekee:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a1562a1b8.jpg\" 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-167194-61e7a1562a1b8.jpg\" alt=\"Nimitilat ja automaattinen lataus WordPressiss\u00e4\" ><\/a><\/p>\n<p>Automaattinen lataus, osa 1 \u2013 Luokan l\u00f6yt\u00e4minen<\/p>\n<p>T\u00e4ss\u00e4 koodin osassa funktio vastaanottaa ilmennett\u00e4v\u00e4n luokan t\u00e4ydellisen nimen (kuten &#8221;WCATLFileFileReader()&quot;).<\/p>\n<p>Seuraavaksi se erottaa kaikki t\u00e4ydellisen nimen osat osiin. Luokan nimi on taulukon viimeinen indeksi, ja p\u00e4\u00e4t\u00e4n nimet\u00e4 tiedostoni nimell\u00e4 &quot;class-filereader.php&quot;, jotta funktio luo muuttujan $class_file, joka viittaa tiedoston nimeen.<\/p>\n<p>Mutta emme ole viel\u00e4 valmiita. Meid\u00e4n on silti hankittava t\u00e4ydellinen nimi (eli miss\u00e4 tiedosto sijaitsee levyll\u00e4). T\u00e4m\u00e4 saattaa n\u00e4ytt\u00e4\u00e4 t\u00e4lt\u00e4:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-167194-61e7a15910c7c.jpg\" 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-167194-61e7a15910c7c.jpg\" alt=\"Nimitilat ja automaattinen lataus WordPressiss\u00e4\" ><\/a><\/p>\n<p>Automaattinen lataus, osa 2 \u2013 T\u00e4ysin p\u00e4tev\u00e4n nimen saaminen<\/p>\n<p>T\u00e4ss\u00e4 vaiheessa valmistelemme muuttujan $full_qualified_path, joka viittaa yl\u00e4tason hakemistoon.<\/p>\n<p>Seuraavaksi koodi iteroidaan kaikkien taulukon indeksien l\u00e4pi ja luo polun luokkatiedostolle. Voit kuvitella t\u00e4m\u00e4n muodostavan merkkijonon, kuten &quot;wcatlfile&quot;, jonka sitten yhdist\u00e4mme $class_file-tiedoston kanssa.<\/p>\n<p>T\u00e4m\u00e4 tarkoittaa, ett\u00e4 tiedoston t\u00e4ydellisest\u00e4 polusta tulee &quot;wcatlfileclass-filereader.php&quot;.<\/p>\n<p>Ja lopuksi sis\u00e4llyt\u00e4mme tiedoston. Huomaa, ett\u00e4 t\u00e4m\u00e4 koodi ei tarkista, onko tiedosto olemassa. Vaikka suosittelenkin sit\u00e4, se on j\u00e4tetty pois pituuden vuoksi ja koska esimerkiss\u00e4mme tied\u00e4mme, ett\u00e4 tiedosto on olemassa.<\/p>\n<p>Jos tiedostoa ei ole olemassa, on useita vaihtoehtoja:<\/p>\n<ol>\n<li>Tee poikkeus,<\/li>\n<li>Ota kiinni poikkeus,<\/li>\n<li>N\u00e4yt\u00e4 oma virheilmoitus,<\/li>\n<li>Tai jokin muu vaihtoehto, jota saatan harkita t\u00e4ss\u00e4 artikkelissa.<\/li>\n<\/ol>\n<p>Siit\u00e4 huolimatta, ideana on suojautua koodissasi, jotta voit valmistautua tilanteeseen, jossa tiedostoa ei ole olemassa, ja voit k\u00e4sitell\u00e4 virheen sulavasti.<\/p>\n<h3>Automaattilatauksessa<\/h3>\n<p>Ennen kuin p\u00e4\u00e4t\u00e4t, on t\u00e4rke\u00e4\u00e4 huomioida seuraava:<\/p>\n<ul>\n<li>Koko esimerkin ajan olemme k\u00e4ytt\u00e4neet oliopohjaista koodia koodin nimiv\u00e4liss\u00e4. Loppujen lopuksi se on olio-k\u00e4site.<\/li>\n<li>Autoloaderimme on kirjoitettu prosessikoodilla. Mik\u00e4 antaa?<\/li>\n<\/ul>\n<p>Viime k\u00e4dess\u00e4 t\u00e4m\u00e4 liittyy tavalliseen PHP-kirjastoon. Voit kirjoittaa oliokeskeisen automaattilataimen, mutta mielest\u00e4ni se on monissa tapauksissa hieman ylivoimaista.<\/p>\n<p>Tiedoston latausprosessi on vaiheittainen prosessi, joten sen kirjoittaminen menettelytapaan sopii luonnollisesti.<\/p>\n<p>Lopuksi muut voivat halutessaan k\u00e4ytt\u00e4\u00e4 ty\u00f6kaluja, kuten Composer, tuodakseen riippuvuuksia. N\u00e4m\u00e4 ovat loistavia ty\u00f6kaluja, ja t\u00e4m\u00e4n kaltaisten asioiden k\u00e4ytt\u00e4misess\u00e4 on paljon etuja; Se on kuitenkin t\u00e4m\u00e4n artikkelin k\u00e4sitteiden ja aiheiden ulkopuolella, ja se on parasta j\u00e4tt\u00e4\u00e4 tulevaa keskustelua varten.<\/p>\n<h2>Resurssit (ja kiitos!)<\/h2>\n<p>T\u00e4m\u00e4 on ollut yksi pisimmist\u00e4 sivustolleni kirjoittamistani artikkeleista.<\/p>\n<p>T\u00e4m\u00e4 johtuu osittain siit\u00e4, ett\u00e4 se perustuu WordCamp-puheen, ja my\u00f6s siksi, ett\u00e4 haluan varmistaa, ett\u00e4 tarjoan vankan johdannon ja perustan, jonka avulla voit aloittaa nimitilan sis\u00e4llytt\u00e4misen ja automaattisen lataamisen WordPress-laajennuksiin.<\/p>\n<p>T\u00e4m\u00e4n artikkelin lis\u00e4ksi olen toimittanut my\u00f6s seuraavat resurssit:<\/p>\n<ul>\n<li>Esitykseni diat ovat <a href=\"https:\/\/speakerdeck.com\/tommcfarlin\/namespaces-and-autoloading-improving-wordpress-plugin-architecture\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">saatavilla SpeakerDeckiss\u00e4<\/a>.<\/li>\n<li>Minulla on t\u00e4m\u00e4n esityksen koodi <a href=\"https:\/\/github.com\/tommcfarlin\/namespaces-and-autoloading-in-wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ladattavissa GitHubista<\/a>.<\/li>\n<\/ul>\n<p>Ja sen my\u00f6t\u00e4 toivon, ett\u00e4 t\u00e4m\u00e4 tarjoaa vankan johdannon nimikirjoituksiin ja automaattiseen lataamiseen ja ett\u00e4 voit alkaa sis\u00e4llytt\u00e4\u00e4 t\u00e4t\u00e4 yh\u00e4 enemm\u00e4n ty\u00f6h\u00f6si. Siit\u00e4 on paljon hy\u00f6ty\u00e4 ty\u00f6llesi ja muille kehitt\u00e4jille, jotka saattavat p\u00e4\u00e4ty\u00e4 k\u00e4ytt\u00e4m\u00e4\u00e4n ty\u00f6t\u00e4si.<\/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>Perustuu puheeni WordCamp Atlanta 2017:ss\u00e4, t\u00e4m\u00e4 on kattava artikkelini nimitiloista ja automaattisesta latauksesta WordPress-kehityksess\u00e4.<\/p>\n","protected":false},"author":1,"featured_media":221177,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,843,864],"tags":[1166],"class_list":["post-229323","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-opetusohjelmia","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229323","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=229323"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229323\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/221177"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229323"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229323"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}