{"id":231339,"date":"2022-12-18T14:02:00","date_gmt":"2022-12-18T11:02:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231339"},"modified":"2022-12-18T14:05:41","modified_gmt":"2022-12-18T11:05:41","slug":"wordpress-widgetit-refaktorointi-osa-6","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-widgetit-refaktorointi-osa-6\/","title":{"rendered":"WordPress-widgetit: Refaktorointi, osa 6"},"content":{"rendered":"\n<p>Sinun pit\u00e4isi olla perehtynyt WordPress Widget Boilerplaten uudelleenj\u00e4rjestelyyn. Jos ei, suosittelen seuraamaan sarjaa t\u00e4h\u00e4n menness\u00e4:<\/p>\n<ul>\n<li>lue <a href=\"https:\/\/tommcfarlin.com\/wordpress-widgets-part-5\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">edellinen viesti<\/a> ,<\/li>\n<li>tai lukea <a href=\"https:\/\/tommcfarlin.com\/tag\/wordpress-widgets-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">koko sarja<\/a> t\u00e4h\u00e4n asti,<\/li>\n<li>ja tarkastellaan <a href=\"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\/tree\/develop\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">projektin kehityshaaraa<\/a> GitHubissa.<\/li>\n<\/ul>\n<p>Koodikannan osalta olemme t\u00e4ll\u00e4 hetkell\u00e4 hyv\u00e4ss\u00e4 paikassa. Olemme alkaneet jakaa suuren osan koodista pienempiin, keskittyneempiin luokkiin. Ja olemme juuri perustaneet rekisterin, jotta voimme aloittaa ty\u00f6skentelyn objektien esiintymien kanssa kaikkialla laajennuksena ilman liiallista kytkent\u00e4\u00e4.<\/p>\n<p>Mutta meill\u00e4 on edelleen ongelma, joka koskee nimiavaruuksia ja automaattista latausta. Olen puhunut t\u00e4st\u00e4 v\u00e4h\u00e4n <a href=\"https:\/\/wordpress.mediadoma.com\/fi\/nimitilat-ja-automaattinen-lataus-wordpressissae\/\" title=\"pari vuotta sitten,\">pari vuotta sitten,<\/a> mutta en niin kuin se liittyy Composeriin.<\/p>\n<p>Ja sit\u00e4 aiomme tarkastella t\u00e4ss\u00e4 viestiss\u00e4.<\/p>\n<h2>WordPress Widget Boilerplate: Refactoring, osa 6<\/h2>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-widgetit-refaktorointi-osa-2\/\" title=\"T\u00e4m\u00e4n sarjan toisessa viestiss\u00e4\">T\u00e4m\u00e4n sarjan toisessa viestiss\u00e4<\/a> aloimme puhua s\u00e4velt\u00e4j\u00e4st\u00e4. Jos kysyt useimmilta PHP-kehitt\u00e4jilt\u00e4 (mukaan lukien ne, jotka ty\u00f6skentelev\u00e4t WordPressiss\u00e4), kuulet todenn\u00e4k\u00f6isesti, ett\u00e4 Composer on paketinhallinta tai riippuvuushallinta.<\/p>\n<p>Lyhyesti sanottuna se on tapa, jolla voimme tuoda kolmannen osapuolen kirjastoja projektiimme ja sitten hy\u00f6dynt\u00e4\u00e4 niiden ominaisuuksia (joten meid\u00e4n ei tarvitse kirjoittaa omaa koodia tehd\u00e4ksemme niin).<\/p>\n<p>Mutta on toinenkin Composerin tarjoama ominaisuus, joka on valtava hy\u00f6dyllinen, varsinkin kun k\u00e4yt\u00e4t paljon luokkia <strong>etk\u00e4<\/strong> halua k\u00e4ytt\u00e4\u00e4 request_once -lauseita koko koodipohjassasi.<\/p>\n<p>Ja se on automaattinen lataus.<\/p>\n<h3>Autoloader m\u00e4\u00e4ritetty<\/h3>\n<p>Suoraan <a href=\"https:\/\/getcomposer.org\/doc\/01-basic-usage.md#autoloading\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ohjekirjasta:<\/a><\/p>\n<blockquote>\n<p>Kirjastoille, jotka m\u00e4\u00e4ritt\u00e4v\u00e4t automaattisen lataustiedot, Composer luo <code>vendor\/autoload.php<\/code>tiedoston. Voit yksinkertaisesti sis\u00e4llytt\u00e4\u00e4 t\u00e4m\u00e4n tiedoston ja alkaa k\u00e4ytt\u00e4\u00e4 n\u00e4iden kirjastojen tarjoamia luokkia ilman ylim\u00e4\u00e4r\u00e4ist\u00e4 ty\u00f6t\u00e4:<\/p>\n<\/blockquote>\n<p>Jos olet seurannut koodia t\u00e4h\u00e4n asti, huomaat, ett\u00e4 k\u00e4yt\u00e4mme itse asiassa jo Composerin luomaa automaattista latausohjelmaa.<\/p>\n<p>Ensin m\u00e4\u00e4ritimme <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94d1c4d9f22431f12102051cff4300ab#file-00-composer-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tarvittavat kokoonpanot<\/a> :<\/p>\n<pre><code>{\n    \"name\": \"wordpress-widget-boilerplate\/wordpress-widget-boilerplate\",\n    \"description\": \"An organized, maintainable boilerplate for building widgets using WordPress best practices.\",\n    \"type\": \"wordpress-plugin\",\n    \"license\": \"GPL-3.0-or-later\",\n    \"homepage\": \"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\",\n    \"authors\": [\n      {\n        \"name\": \"Tom McFarlin\",\n        \"email\": \"tom@pressware.co\",\n        \"homepage\": \"https:\/\/pressware.co\"\n      }\n    ],\n    \"support\": {\n      \"issues\": \"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\/issues\"\n    },\n    \"config\": {\n      \"preferred-install\": \"dist\",\n      \"platform\": {\n          \"php\": \"7.1\"\n      }\n    },\n    \"repositories\": [\n      {\n        \"type\": \"composer\",\n        \"url\": \"https:\/\/wpackagist.org\"\n      }\n    ],\n    \"require\": {\n      \"php\": \"7.1\",\n      \"composer\/installers\": \"^1.4\"\n    },\n    \"require-dev\": {\n        \"friendsofphp\/php-cs-fixer\": \"^2.13.1\",\n        \"jakub-onderka\/php-parallel-lint\": \"^1.0.0\",\n        \"phpmd\/phpmd\": \"^v2.6.0\",\n        \"nikic\/php-parser\": \"^4.0\",\n        \"ocramius\/proxy-manager\": \"^2.0.0\",\n        \"phpro\/grumphp\": \"^0.13.1\"\n    },\n    \"scripts\": {\n      \"test\": [\n        \".\/vendor\/bin\/grumphp run\"\n      ]\n    },\n    \"minimum-stability\": \"stable\"\n  }<\/code><\/pre>\n<p>Sitten <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94d1c4d9f22431f12102051cff4300ab#file-01-plugin-boostrap-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aloimme sis\u00e4llytt\u00e4\u00e4 sen laajennuksen bootstrapiin<\/a> (jonka viimeistelemme t\u00e4n\u00e4\u00e4n):<\/p>\n<pre><code>&lt;?php\n\n\/\/ Include the autoloader.\n\/\/ TODO: Note this has not yet been defined.\nrequire_once __DIR__. '\/inc\/autoload.php';\n<\/code><\/pre>\n<p>Mutta t\u00e4ss\u00e4 on ongelma: Kuinka lataamme vain jakelua varten tarvitsemamme luokat?<\/p>\n<p>Toisin sanoen: Kehitysvaiheessa k\u00e4yt\u00e4mme monia kirjastoja varmistaaksemme, ett\u00e4 kirjoitamme korkealaatuista, standardien mukaista koodia. Emme kuitenkaan halua jakaa 10 megatavua dataa niille, jotka k\u00e4ytt\u00e4v\u00e4t projektiamme.<\/p>\n<p>Sen sijaan meid\u00e4n on sis\u00e4llytett\u00e4v\u00e4 vain vaaditut tiedostot, eik\u00f6 niin? Ja tehd\u00e4ksemme sen, meid\u00e4n on varmistettava, ett\u00e4 luomme automaattisen latausohjelman, jonka voimme sis\u00e4llytt\u00e4\u00e4 ja joka tekee juuri sen.<\/p>\n<p>Ensin n\u00e4yt\u00e4n sinulle <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94d1c4d9f22431f12102051cff4300ab#file-02-composer-distribution-command-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">komennon<\/a> ja sitten selit\u00e4n, mit\u00e4 se tekee:<\/p>\n<pre><code>$ composer install --no-dev --no-ansi --no-interaction --optimize-autoloader --no-progress --prefer-dist<\/code><\/pre>\n<p>T\u00e4m\u00e4 tuottaa juuri sen, mit\u00e4 tarvitsemme, jotta projektimme toimisi tuotantoymp\u00e4rist\u00f6ss\u00e4. Jokainen lippu tekee n\u00e4in:<\/p>\n<ul>\n<li><strong>s\u00e4velt\u00e4j\u00e4n asennus<\/strong>. T\u00e4m\u00e4 yksinkertaisesti asentaa kaikki riippuvuudet. Jos sinulla on jo useita niit\u00e4 toimittajahakemistossasi, t\u00e4m\u00e4 poistaa kaikki paitsi pakolliset.<\/li>\n<li><strong>no-dev<\/strong>. T\u00e4m\u00e4 est\u00e4\u00e4 Composeria asentamasta paketteja m\u00e4\u00e4ritystiedostojensa <strong>require-dev-<\/strong> osioon (eli riippuvuuksiin, joita k\u00e4yt\u00e4mme GrumPHP:n kanssa).<\/li>\n<li><strong>ei-ansi.<\/strong> T\u00e4m\u00e4 est\u00e4\u00e4 ANSI-l\u00e4hd\u00f6n esiintymisen. Et ehk\u00e4 v\u00e4lit\u00e4 suorittaako t\u00e4t\u00e4 tai et. Jos p\u00e4\u00e4t\u00e4t tehd\u00e4 jonkinlaisen automaattisen k\u00e4ytt\u00f6\u00f6noton, k\u00e4yt\u00e4 sit\u00e4; muuten se voidaan j\u00e4tt\u00e4\u00e4 pois komennosta.<\/li>\n<li><strong>ei vuorovaikutusta<\/strong>. T\u00e4m\u00e4 on toinen lippu, jota k\u00e4ytet\u00e4\u00e4n erityisesti ymp\u00e4rist\u00f6iss\u00e4, joissa haluat rakentaa projektin automaattisesti, eik\u00e4 sinun tarvitse olla tekemisiss\u00e4 kysymysten, tulosten ja vastaavien kanssa.<\/li>\n<li><strong>optimoi-autoloader<\/strong>. Lyhyesti sanottuna t\u00e4m\u00e4 luo nopeamman automaattilataimen. Sen suorittaminen voi kest\u00e4\u00e4 jonkin aikaa projektin koosta riippuen, mutta se kannattaa, kun aloitat ty\u00f6n.<\/li>\n<li><strong>ei edistyst\u00e4<\/strong>. T\u00e4m\u00e4 piilottaa edistymispalkin n\u00e4kym\u00e4st\u00e4 terminaalissa. Haluat ehk\u00e4 itse n\u00e4hd\u00e4 t\u00e4m\u00e4n, ja jos on, niin se on hienoa; Jotkin ymp\u00e4rist\u00f6t eiv\u00e4t kuitenkaan v\u00e4ltt\u00e4m\u00e4tt\u00e4 k\u00e4sittele tiettyj\u00e4 merkkej\u00e4 (kuten askelpalautinta) hyvin.<\/li>\n<li><strong>mieluummin-dist<\/strong>. T\u00e4m\u00e4 varmistaa, ett\u00e4 asennetut paketit on tehty jakeluversiolla (verrattuna johonkin, joka on v\u00e4hemm\u00e4n vakaa).<\/li>\n<\/ul>\n<h4>Oletko edelleen kiinnostunut?<\/h4>\n<p>Jos olet todella utelias optimoimaan automaattinen latausohjelma t\u00e4m\u00e4n viestin ulkopuolisille projekteille, suosittelen lukemaan <a href=\"https:\/\/getcomposer.org\/doc\/articles\/autoloader-optimization.md\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4m\u00e4n sivun<\/a> Composer-dokumentaatiosta. Se ei kuulu toimintamme piiriin, mutta siit\u00e4 voi olla hy\u00f6ty\u00e4 muun ty\u00f6n kanssa, joka sinulla on nyt tai mit\u00e4 teet tulevaisuudessa.<\/p>\n<h2>Milt\u00e4 t\u00e4m\u00e4 n\u00e4ytt\u00e4\u00e4 kattilalevyss\u00e4?<\/h2>\n<p>Jos ty\u00f6skentelet Boilerplaten parissa paikallisella koneellasi, saatat n\u00e4hd\u00e4 jotain t\u00e4llaista:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161015-61e719e23bf2d.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-161015-61e719e23bf2d.png\" alt=\"WordPress-widgetit: Refaktorointi, osa 6\"><\/a><\/p>\n<p>Mutta jos suoritat yll\u00e4 olevan komennon, n\u00e4et jotain t\u00e4llaista:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161015-61e719e5afd5a.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-161015-61e719e5afd5a.png\" alt=\"WordPress-widgetit: Refaktorointi, osa 6\"><\/a><\/p>\n<p>Se on iso ero ja t\u00e4m\u00e4 on pieni projekti. Kuvittele, ett\u00e4 teet jotain paljon suurempaa, joka tulee toimimaan tuotannossa.<\/p>\n<p>Kokemuksesta voin kertoa, ett\u00e4 projektit voivat nopeasti saavuttaa 20 Mt tai enemm\u00e4n riippuvuuksia, jos k\u00e4yt\u00e4t erilaisia \u200b\u200bkolmannen osapuolen kirjastoja esimerkiksi lokiin, HTTP-pyynt\u00f6ihin ja koodinlaatuty\u00f6kaluihin.<\/p>\n<h2>Sis\u00e4llyt\u00e4mmek\u00f6 toimittajaluetteloomme?<\/h2>\n<p>Ihmiset sanovat usein, ett\u00e4 sinun ei pit\u00e4isi sis\u00e4llytt\u00e4\u00e4 toimittajahakemistoa l\u00e4hdehallintaan ja hyv\u00e4st\u00e4 syyst\u00e4: Se voi olla valtava.<\/p>\n<p>Jopa s\u00e4velt\u00e4j\u00e4n dokumentaatiossa <a href=\"https:\/\/getcomposer.org\/doc\/faqs\/should-i-commit-the-dependencies-in-my-vendor-directory.md\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">puhutaan t\u00e4st\u00e4:<\/a><\/p>\n<blockquote>\n<p>Paras k\u00e4yt\u00e4nt\u00f6 on, ett\u00e4 kaikki kehitt\u00e4j\u00e4t k\u00e4ytt\u00e4v\u00e4t Composeria riippuvuuksien asentamiseen. Samoin koontipalvelin, CI, k\u00e4ytt\u00f6\u00f6nottoty\u00f6kalut jne. tulisi mukauttaa suorittamaan Composeria osana projektin k\u00e4ynnistyst\u00e4.<\/p>\n<\/blockquote>\n<p>Joten mit\u00e4 meid\u00e4n pit\u00e4isi tehd\u00e4? Tarvitsemme automaattisen latausohjelman ja tiettyj\u00e4 riippuvuuksia, koska k\u00e4ytt\u00e4j\u00e4mme eiv\u00e4t tied\u00e4 suorittavansa (eik\u00e4 heid\u00e4n tarvitse suorittaa!) Composeria aina kun he lataavat t\u00f6it\u00e4mme.<\/p>\n<p>WordPressin luonteen ja tekem\u00e4mme ty\u00f6n vuoksi meid\u00e4n on sitouduttava toimittajahakemistoon, mutta vain hyvin tietyin vaatimuksin.<\/p>\n<ol>\n<li>Luomme haaran, jota k\u00e4ytet\u00e4\u00e4n julkaisuun (kutsumme sit\u00e4 luovasti <strong>julkaisuksi<\/strong> ja voimme yhdist\u00e4\u00e4 siihen <strong>kehityst\u00e4<\/strong> tarvittaessa).<\/li>\n<li>Varmistamme, ett\u00e4 toimittajahakemisto ei ole osa gitignore-tiedostoa; Varmistamme kuitenkin, ett\u00e4 toimittajahakemiston .git-hakemistot j\u00e4tet\u00e4\u00e4n huomiotta (se voi silti vied\u00e4 paljon tilaa).<\/li>\n<\/ol>\n<p>Tehd\u00e4\u00e4n siis jokainen vaihe ja katsotaan, milt\u00e4 se n\u00e4ytt\u00e4\u00e4, kun olemme valmiit.<\/p>\n<h3>Julkaisuhaaran luominen<\/h3>\n<p>Luo uusi haara terminaalista antamalla <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94d1c4d9f22431f12102051cff4300ab#file-03-create-a-branch-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">seuraava komento<\/a> :<\/p>\n<pre><code>$ git checkout -b release<\/code><\/pre>\n<p>T\u00e4m\u00e4 ottaa kaiken koodin, jonka parissa ty\u00f6skentelemme, ja luo sen kanssa uuden haaran. Koska t\u00e4m\u00e4 on haara, jota k\u00e4yt\u00e4mme toimimaan kuten k\u00e4ytt\u00e4j\u00e4mme k\u00e4ytt\u00e4v\u00e4t (puhumme <strong>mestarista<\/strong> seuraavassa postauksessa).<\/p>\n<p>Tarkista ensin composer.json-tiedostosi ja varmista, ett\u00e4 se sis\u00e4lt\u00e4\u00e4 seuraavat tiedot:<\/p>\n<pre><code>\"autoload\": {\n    \"psr-4\": {\n        \"WordPressWidgetBoilerplate\": \"src\/\",\n        \"WordPressWidgetBoilerplateSubscriber\": \"src\/Subscriber\/\",\n        \"WordPressWidgetBoilerplateUtilities\": \"src\/Utilities\/\",\n        \"WordPressWidgetBoilerplateViews\": \"src\/Views\/\"\n    }\n},<\/code><\/pre>\n<p>Nyt meid\u00e4n on varmistettava, ett\u00e4 suoritamme yll\u00e4 olevan Composer-komennon varmistaaksemme, ett\u00e4 <strong>toimittajahakemistossa<\/strong> ei ole mit\u00e4\u00e4n muuta kuin mit\u00e4 tarvitsemme .<\/p>\n<pre><code>$ composer install --no-dev --no-ansi --no-interaction --optimize-autoloader --no-progress --prefer-dist<\/code><\/pre>\n<p>Nyt meid\u00e4n on p\u00e4ivitett\u00e4v\u00e4 gitignore.<\/p>\n<h3>P\u00e4ivit\u00e4mme huomiotta<\/h3>\n<p>Ja jos olet seurannut sek\u00e4 sarjaa ett\u00e4 julkaisua t\u00e4h\u00e4n asti, tied\u00e4t sen n\u00e4ytt\u00e4v\u00e4n suunnilleen t\u00e4lt\u00e4 (se voi sis\u00e4lt\u00e4\u00e4 enemm\u00e4n tai v\u00e4hemm\u00e4n, mutta sen pit\u00e4isi sis\u00e4lt\u00e4\u00e4 ainakin t\u00e4m\u00e4).<\/p>\n<p>Minulle t\u00e4m\u00e4 n\u00e4ytt\u00e4\u00e4 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94d1c4d9f22431f12102051cff4300ab#file-05-gitignore-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4<\/a> :<\/p>\n<pre><code>*.DS_Store\n*.log\nwp-config.php\nwp-content\/advanced-cache.php\nwp-content\/backup-db\/\nwp-content\/backups\/\nwp-content\/blogs.dir\/\nwp-content\/cache\/\nwp-content\/upgrade\/\nwp-content\/uploads\/\nwp-content\/mu-plugins\/\nwp-content\/wp-cache-config.php\nwp-content\/plugins\/hello.php\n\n\/.htaccess\n\/license.txt\n\/readme.html\n\/sitemap.xml\n\/sitemap.xml.gz\n\n\/vendor\/**\/.git\n\/vendor\/bin\ncomposer.lock\n<\/code><\/pre>\n<p>Riippuen siit\u00e4, k\u00e4yt\u00e4tk\u00f6 p\u00e4\u00e4tett\u00e4 vai asiakasta, n\u00e4et, ett\u00e4 uusia tiedostoja on sitova (erityisesti toimittajahakemistosta). Joten lis\u00e4\u00e4 ne haaraasi.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/94d1c4d9f22431f12102051cff4300ab#file-06-pushing-a-new-branch-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Tee sitten tekem\u00e4si muutokset<\/a>. Sinun on ehk\u00e4 m\u00e4\u00e4ritett\u00e4v\u00e4 seuraavat, jos ty\u00f6skentelet terminaalissa:<\/p>\n<pre><code>$ git push --set-upstream origin release<\/code><\/pre>\n<p>Ja sen my\u00f6t\u00e4 koodisi pit\u00e4isi toimia ja olla saatavilla GitHubissa (tai miss\u00e4 tahansa k\u00e4ytt\u00e4m\u00e4ss\u00e4si l\u00e4hteenhallintapalvelussa). <a href=\"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\/tree\/release\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">T\u00e4\u00e4lt\u00e4<\/a> n\u00e4et mit\u00e4 minulla on tarjolla .<\/p>\n<h2>Toiminnan lis\u00e4\u00e4minen<\/h2>\n<p>Nyt kun meill\u00e4 on kaikki tarvittavat osat paikoillaan, on aika alkaa k\u00e4ytt\u00e4\u00e4 Composeria, automaattista latausohjelmaa, abstrakteja luokkiamme ja rekisteri\u00e4 ja aloittaa perustoimintojen lis\u00e4\u00e4minen WordPress Widget Boilerplateen, jotta meill\u00e4 on jotain n\u00e4ytett\u00e4v\u00e4\u00e4 ty\u00f6ss\u00e4mme. .<\/p>\n<p>Niille, jotka ovat uteliaita, aion juuri nyt pit\u00e4\u00e4 konttorit j\u00e4rjestettyn\u00e4:<\/p>\n<ul>\n<li><strong>master<\/strong> on se, mik\u00e4 on saatavilla kaikille ja kaikille, jotka haluavat rakentaa WordPress-widgetin,<\/li>\n<li><strong>kehitt\u00e4minen<\/strong> on tarkoitettu vain kehitt\u00e4jille, mukaan lukien ne, jotka osaavat k\u00e4ytt\u00e4\u00e4 Composeria ja t\u00e4ss\u00e4 viestiss\u00e4 k\u00e4siteltyj\u00e4 aiheita,<\/li>\n<li><strong>julkaisua<\/strong> k\u00e4ytet\u00e4\u00e4n toimivan demon tarjoamiseen.<\/li>\n<\/ul>\n<p>Tarkista kuitenkin toistaiseksi, mit\u00e4 t\u00e4m\u00e4 viesti sis\u00e4lt\u00e4\u00e4, ja jatkamme sit\u00e4 seuraavassa viestiss\u00e4.<\/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>Meill\u00e4 on ongelma nimiavaruuksien ja automaattisen latauksen kanssa, ja sit\u00e4 aiomme tarkastella t\u00e4ss\u00e4 viestiss\u00e4.<\/p>\n","protected":false},"author":1,"featured_media":223641,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719],"tags":[1166],"class_list":["post-231339","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231339","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=231339"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231339\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/223641"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}