{"id":231310,"date":"2022-12-17T09:16:00","date_gmt":"2022-12-17T06:16:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231310"},"modified":"2022-12-07T11:44:03","modified_gmt":"2022-12-07T08:44:03","slug":"wordpress-widgetit-refaktorointi-osa-5","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-widgetit-refaktorointi-osa-5\/","title":{"rendered":"WordPress-widgetit: Refaktorointi, osa 5"},"content":{"rendered":"\n<p><strong><a href=\"https:\/\/tommcfarlin.com\/wordpress-widgets-part-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Edellisess\u00e4 viestiss\u00e4<\/a><\/strong> loimme rekisterin, jota k\u00e4ytet\u00e4\u00e4n tallentamaan kaikki eri luokat, jotka ovat vastuussa widgetillemme toiminnallisuuden antamisesta.<\/p>\n<p>T\u00e4t\u00e4 varten esitell\u00e4\u00e4n useita muita luokkia, mutta ennen kuin siirrymme sinne, meid\u00e4n on lis\u00e4tt\u00e4v\u00e4 rekisteri laajennuksen bootstrapiin (puhumattakaan bootstrapin luomisesta laajennukselle).<\/p>\n<p>Tarkemmin sanottuna t\u00e4h\u00e4n j\u00e4imme:<\/p>\n<blockquote>\n<p>Kuten aiemmin viestiss\u00e4 mainittiin, meid\u00e4n on lis\u00e4tt\u00e4v\u00e4 t\u00e4m\u00e4 laajennuksen k\u00e4ynnistyspalkkiin. T\u00e4t\u00e4 varten meid\u00e4n on kuitenkin m\u00e4\u00e4ritett\u00e4v\u00e4 oma suodattimemme, jotta voimme helposti siirt\u00e4\u00e4 rekisterin muun laajennuksen ymp\u00e4rille (kun sen aika tulee).<\/p>\n<\/blockquote>\n<p>Joten t\u00e4ss\u00e4 viestiss\u00e4 keskitymme tekem\u00e4\u00e4n juuri niin.<\/p>\n<h2>WordPress Widget Boilerplate: Refactoring, osa 5<\/h2>\n<p>Jos olet seurannut sarjaa t\u00e4h\u00e4n asti, sinun pit\u00e4isi olla hyv\u00e4ss\u00e4 asemassa erityisesti rekisterin lis\u00e4\u00e4mist\u00e4 varten, jotta meill\u00e4 on p\u00e4\u00e4sy siihen koko laajennuksen ajan.<\/p>\n<p>T\u00e4m\u00e4n tekeminen edellytt\u00e4\u00e4 kuitenkin, ett\u00e4 osaat m\u00e4\u00e4ritt\u00e4\u00e4 suodattimet. WordPressiss\u00e4 <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">k\u00e4yt\u00e4mme toimintoja ja suodattimia jatkuvasti<\/a>.<\/p>\n<p>N\u00e4iss\u00e4 koukuissa on se, ett\u00e4 ne on kuitenkin jo m\u00e4\u00e4ritelty. Joten miten m\u00e4\u00e4rittelemme suodattimemme?<\/p>\n<p>Katsotaanpa, miten tehd\u00e4\u00e4n juuri niin.<\/p>\n<h3>1 Suodattimemme m\u00e4\u00e4rittely<\/h3>\n<p>Ensinn\u00e4kin meid\u00e4n on ymm\u00e4rrett\u00e4v\u00e4 muutama k\u00e4site:<\/p>\n<ul>\n<li>mik\u00e4 on suodatin,<\/li>\n<li>kuinka lis\u00e4t\u00e4 suodatin,<\/li>\n<li>kuinka lis\u00e4t\u00e4 rekisterimme suodattimeen<\/li>\n<li>kuinka noutaa luokka suodattimesta.<\/li>\n<\/ul>\n<p>Onneksi kaikki yll\u00e4 oleva on helppo selitt\u00e4\u00e4.<\/p>\n<h4>Mik\u00e4 on suodatin?<\/h4>\n<p>Yksinkertaisesti sanottuna koukkujen avulla voimme soittaa WordPressiin tiettyin\u00e4 aikoina ohjelman suorittamisen aikana. Toiminnot on yleens\u00e4 varattu k\u00e4yt\u00f6kselle; Suodattimet on varattu datalle.<\/p>\n<p>Lis\u00e4ksi suodattimien avulla voimme ty\u00f6skennell\u00e4 tiettyjen sovelluksen tietojen kanssa \u2013 se voi olla olemassa olevaa dataa tai jopa uutta dataa. Ja meid\u00e4n tapauksessamme se tulee olemaan rekisteriluokka, joka sis\u00e4lt\u00e4\u00e4 viittauksia muihin tietoihin.<\/p>\n<h4>Suodattimen lis\u00e4\u00e4minen<\/h4>\n<p>Suodattimen lis\u00e4\u00e4minen on helppoa. Siin\u00e4 on kolme osaa:<\/p>\n<ol>\n<li>kutsua <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_filter\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_filter<\/a> ,<\/li>\n<li>m\u00e4\u00e4ritt\u00e4\u00e4 suodattimelle yksil\u00f6llisen tunnisteen,<\/li>\n<li>siirt\u00e4\u00e4 suodattimeen tietoja, jotka voidaan palauttaa aina kun sit\u00e4 kutsutaan.<\/li>\n<\/ol>\n<p>Meille aion tunnistaa rekisterimme <strong>wpWidgetRegistry-<\/strong> suodattimeksi. Huomaa kuitenkin, ett\u00e4 on t\u00e4rke\u00e4\u00e4 valita toteutukselle yksil\u00f6llinen nimi, koska jos et valitse sit\u00e4, voit p\u00e4\u00e4ty\u00e4 t\u00f6rm\u00e4yksiin muiden tietojen kanssa, jos toinen laajennus k\u00e4ytt\u00e4\u00e4 samaa tunnistetta.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161108-61e71bc432bb7.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-161108-61e71bc432bb7.png\" alt=\"WordPress-widgetit: Refaktorointi, osa 5\" ><\/a><\/p>\n<p>Joka tapauksessa suodattimen lis\u00e4\u00e4minen suorittaa yksinkertaisen teht\u00e4v\u00e4n:<\/p>\n<blockquote>\n<p>Liit\u00e4 funktio tai menetelm\u00e4 tiettyyn suodatintoimintoon.<\/p>\n<\/blockquote>\n<p>T\u00e4m\u00e4 tarkoittaa siis sit\u00e4, ett\u00e4 meid\u00e4n on m\u00e4\u00e4ritelt\u00e4v\u00e4 menetelm\u00e4 tunnuksellamme. PHP:n luonteen vuoksi meid\u00e4n ei tarvitse k\u00e4ytt\u00e4\u00e4 erillist\u00e4 funktiota.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161108-61e71bc81c90d.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-161108-61e71bc81c90d.png\" alt=\"WordPress-widgetit: Refaktorointi, osa 5\" ><\/a><\/p>\n<p>Sen sijaan voimme k\u00e4ytt\u00e4\u00e4 <a href=\"https:\/\/secure.php.net\/manual\/en\/functions.anonymous.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">anonyymi\u00e4 funktiota<\/a>.<\/p>\n<blockquote>\n<p>Anonyymit funktiot, jotka tunnetaan my\u00f6s nimell\u00e4 sulkemiset, mahdollistavat funktioiden luomisen, joilla ei ole m\u00e4\u00e4ritelty\u00e4 nime\u00e4. Ne ovat hy\u00f6dyllisimpi\u00e4 takaisinsoittoparametrien arvoina, mutta niill\u00e4 on monia muita k\u00e4ytt\u00f6tarkoituksia.<\/p>\n<\/blockquote>\n<p>Anonyymi funktio, jonka aiomme m\u00e4\u00e4ritt\u00e4\u00e4, hyv\u00e4ksyy viittauksen laajennukseen argumenttina ja palauttaa sen aina, kun suodatinta kutsutaan (joka n\u00e4ytet\u00e4\u00e4n my\u00f6hemmin t\u00e4ss\u00e4 artikkelissa).<\/p>\n<h4>Tietojen v\u00e4litt\u00e4minen suodattimellemme<\/h4>\n<p>Nyt kun kaikki t\u00e4m\u00e4 on k\u00e4sitelty, voimme k\u00e4yd\u00e4 l\u00e4pi prosessin, jossa luodaan rekisterimme esiintym\u00e4, m\u00e4\u00e4ritet\u00e4\u00e4n suodatin ja lis\u00e4t\u00e4\u00e4n sitten rekisteri, jotta se on k\u00e4ytett\u00e4viss\u00e4 koko sovelluksessa.<\/p>\n<p>Joten p\u00e4\u00e4laajennustiedostoon, eli <strong>wordpress-widget-boilerplate.php-<\/strong> tiedostoon, lis\u00e4\u00e4mme <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c3617efbbfd2a47c432f69dd41ce312c#file-00-bootstrap-namespace-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">seuraavat koodirivit<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace WordPressWidgetBoilerplate;\n\nuse WordPressWidgetBoilerplateUtilitiesRegistry;\n\n\/\/ More to come...\n<\/code><\/pre>\n<p>Yll\u00e4 oleva ilmoittaa nimitilan, jossa rekisteri sijaitsee. Sitten <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c3617efbbfd2a47c432f69dd41ce312c#file-01-bootstrap-registry-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">lis\u00e4\u00e4mme seuraavan koodilohkon automaattilataimen alle:<\/a><\/p>\n<pre><code>&lt;?php\n\n\/\/ Setup a filter so we can retrieve the registry throughout the plugin.\n$registry = new Registry();\nadd_filter('wpWidgetRegistry', function() use ($registry) {\n    return $registry;\n});\n<\/code><\/pre>\n<p>Huomaa, ett\u00e4 kun yrit\u00e4t aktivoida laajennuksen, se ei aktivoidu ja antaa virheilmoituksen. T\u00e4m\u00e4 johtuu automaattilataimen puutteesta, josta keskustellaan seuraavassa viestiss\u00e4.<\/p>\n<h3>2 Rekisterin haku<\/h3>\n<p>Koska rekisteri on m\u00e4\u00e4ritetty laajennuksen k\u00e4ynnistysraportissa ja se tehd\u00e4\u00e4n suodattimen avulla, voimme k\u00e4ytt\u00e4\u00e4 rekisteri\u00e4 miss\u00e4 tahansa laajennuksessamme kutsumalla mukautettua suodatinta.<\/p>\n<p>Oletetaan esimerkiksi, ett\u00e4 olemme toisella luokalla ja meid\u00e4n on saatava viittaus rekisteriin. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c3617efbbfd2a47c432f69dd41ce312c#file-02-retrieve-registry-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Voimme tehd\u00e4 t\u00e4m\u00e4n soittamalla t\u00e4m\u00e4n<\/a> puhelun :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Retrieve the registry anywhere in the plugin.\n$registry = apply_filters('wpWidgetRegistry', null);\n<\/code><\/pre>\n<p>Ja siin\u00e4 se. Helppoa, eik\u00f6? Niin kauan kuin kaikki on lis\u00e4tty kunnolla rekisteriin \u2013 joka katetaan pian \u2013, voimme p\u00e4\u00e4st\u00e4 niihin kaikkiin <a href=\"https:\/\/tommcfarlin.com\/wordpress-widgets-part-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">edellisess\u00e4 viestiss\u00e4 k\u00e4ytt\u00e4miemme yksil\u00f6llisten tunnisteiden kautta.<\/a><\/p>\n<h2>Autoloader<\/h2>\n<p>Nyt alamme k\u00e4ytt\u00e4\u00e4 nimiavaruuksia ja muita luokkia. T\u00e4m\u00e4 tarkoittaa, ett\u00e4 meid\u00e4n on k\u00e4ytett\u00e4v\u00e4 automaattilataajia.<\/p>\n<p>Joten ennen kuin ryhdymme muokkaamaan koko luokkaa nykyisess\u00e4 muodossaan, teemme pienen kierroksen joihinkin Composerin ominaisuuksiin n\u00e4hd\u00e4ksemme, kuinka sit\u00e4 k\u00e4ytet\u00e4\u00e4n automaattisen latausohjelman luomiseen (joiden lis\u00e4ksi k\u00e4ytt\u00e4\u00e4 sit\u00e4 k\u00e4sittelem\u00e4\u00e4n l\u00e4hdekoodimme laatua).<\/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>Kun meill\u00e4 on rekisteri, meid\u00e4n on voitava k\u00e4ytt\u00e4\u00e4 sit\u00e4 koko laajennuksen ajan, ja teemme sen mukautetuilla koukuilla.<\/p>\n","protected":false},"author":1,"featured_media":236152,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,803,864],"tags":[1166],"class_list":["post-231310","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-php-5","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231310","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=231310"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231310\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/236152"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}