{"id":229432,"date":"2022-11-01T17:56:00","date_gmt":"2022-11-01T14:56:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229432"},"modified":"2022-11-09T07:01:41","modified_gmt":"2022-11-09T04:01:41","slug":"aelykkaeaen-koodin-kirjoittamisesta-taulukoilla-wordpressissae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/aelykkaeaen-koodin-kirjoittamisesta-taulukoilla-wordpressissae\/","title":{"rendered":"\u00c4lykk\u00e4\u00e4n koodin kirjoittamisesta taulukoilla WordPressiss\u00e4"},"content":{"rendered":"\n<p>En tied\u00e4, onko olemassa standardia &quot;\u00e4lykk\u00e4\u00e4ksi koodiksi&quot; pidetylle koodille, mutta luulen, ett\u00e4 jos n\u00e4ytt\u00e4isit erilaisia \u200b\u200bkoodin\u00e4ytteit\u00e4 ohjelmoijille, he tiet\u00e4isiv\u00e4t sen n\u00e4hdess\u00e4\u00e4n sen.<\/p>\n<p>Ja joskus urallani olin hyvin kiinnostunut fiksun koodin kirjoittamisesta. Mutta mit\u00e4 vanhemmaksi tulen ja mit\u00e4 enemm\u00e4n t\u00f6it\u00e4 teen projektien yll\u00e4pidossa, sit\u00e4 v\u00e4hemm\u00e4n olen huolissani \u00e4lykk\u00e4\u00e4n koodin kirjoittamisesta ja sit\u00e4 enemm\u00e4n olen kiinnostunut kirjoittamaan selke\u00e4\u00e4 ja luettavaa ja siten yll\u00e4pidett\u00e4v\u00e4\u00e4 koodia.<\/p>\n<p>Fiksu koodi on linnuille. Anteeksi n\u00e4m\u00e4 typer\u00e4t sanaleikit.<\/p>\n<p>Kun ty\u00f6skentelemme WordPressin kanssa, k\u00e4sittelemme todenn\u00e4k\u00f6isesti paljon taulukoita, varsinkin kun otetaan huomioon, ett\u00e4 suuri osa WordPressin sis\u00e4isist\u00e4 osista on rakennettu niille (kyll\u00e4, on my\u00f6s joitain objekteja, mutta taulukot ovat kaikkialla).<\/p>\n<p>Milt\u00e4 sitten \u00e4lyk\u00e4s koodi taulukoineen n\u00e4ytt\u00e4\u00e4 WordPressiss\u00e4 verrattuna v\u00e4hemm\u00e4n \u00e4lykk\u00e4\u00e4seen koodiin? Ja lis\u00e4ksi, pit\u00e4isik\u00f6 meid\u00e4n v\u00e4ltt\u00e4\u00e4 pyrkimyst\u00e4 kirjoittaa fiksua koodia?<\/p>\n<h2>\u00c4lyk\u00e4s koodi taulukoilla<\/h2>\n<p>Taulukkofunktiot ovat luultavasti yksi PHP:n suurimmista funktioista.<\/p>\n<p>Luonnollisesti \u00e4lykk\u00e4\u00e4n koodin kirjoittaminen WordPressill\u00e4 n\u00e4ytt\u00e4\u00e4 sopivan osittain ja osittain ymp\u00e4rist\u00f6\u00f6n, eik\u00f6 niin? En sano, ett\u00e4 se olisi ollenkaan huono. Sanon vain, ett\u00e4 kun globaalissa nimiavaruudessa on toimintoja, jotka toimivat taulukoita palauttavien taulukoiden kanssa, on aivan liian helppoa kirjoittaa sis\u00e4kk\u00e4isi\u00e4 kutsuja, jotka vaativat lopulta hieman enemm\u00e4n henkist\u00e4 ty\u00f6t\u00e4 koodin tekemisen j\u00e4sent\u00e4miseksi.<\/p>\n<p>Toki siit\u00e4 kirjoittaminen on yksi asia, mutta ehk\u00e4 on j\u00e4rkev\u00e4\u00e4 tarkastella esimerkki\u00e4 siit\u00e4, milt\u00e4 WordPressin \u00e4lyk\u00e4s koodi voi n\u00e4ytt\u00e4\u00e4 ja kuinka se voidaan sitten muuttaa.<\/p>\n<h3>Esimerkki<\/h3>\n<p>Oletetaan esimerkiksi, ett\u00e4 meill\u00e4 on viesti ja p\u00e4ivit\u00e4mme viestikatkelman niin, ett\u00e4 otteessa oleva nimi on poistettava. Kun t\u00e4m\u00e4 tapahtuu, ei v\u00e4ltt\u00e4m\u00e4tt\u00e4 ole t\u00e4rke\u00e4\u00e4 (vaikka <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/delete_user\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">delete_user<\/a> ei ole vaikea kuvitella, eik\u00f6?)<\/p>\n<p>Alusta alkaen meille on annettu:<\/p>\n<ul>\n<li>viestin tunnus,<\/li>\n<li>poistettavan henkil\u00f6n nimi.<\/li>\n<\/ul>\n<p>Yksi tapa tehd\u00e4 t\u00e4m\u00e4 olisi k\u00e4ytt\u00e4\u00e4 yhdistelm\u00e4\u00e4 <a href=\"https:\/\/php.net\/manual\/en\/language.types.array.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.array-map.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_map<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.explode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">explode<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.array-diff.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_diff<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.implode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">implode<\/a>. Kaikki t\u00e4st\u00e4 syyst\u00e4:<\/p>\n<ul>\n<li>taulukko henkil\u00f6n taulukon luomiseksi (koska sit\u00e4 taulukkona tarvitaan my\u00f6hemmin),<\/li>\n<li>array_map tyhj\u00e4n tilan leikkaamiseen sen j\u00e4lkeen, kun ote on r\u00e4j\u00e4ytetty taulukkoon,<\/li>\n<li>array_diff nimen poistamisen j\u00e4lkeen j\u00e4ljell\u00e4 olevien merkkijonojen etsimiseen,<\/li>\n<li>ja implode rakentaaksesi tuloksen takaisin merkkijonoksi post_excerptille.<\/li>\n<\/ul>\n<p>Okei, t\u00e4ss\u00e4 on esimerkki siit\u00e4, milt\u00e4 WordPressin \u00e4lyk\u00e4s koodi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13ff8610716de3cb5b5e612d80267e9e#file-00-clever-code-with-arrays-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">voi n\u00e4ytt\u00e4\u00e4<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Get the excerpt from the incoming post.\n$post    = get_post( $post_id );\n$excerpt = $post-&gt;post_excerpt;\n\n\/**\n * And we update the post content without the information (and we don't need\n * paragraph tags).\n *\/\n$event_post-&gt;post_excerpt = \n  apply_filters( \n    'the_excerpt', \n    implode( ', ', \n      array_diff( \n        array_map( \n          'trim', \n          explode( ',', $excerpt) ), \n      array( $name) ),\n    ),\n  );<\/code><\/pre>\n<p>Mutta se on paljon sis\u00e4kk\u00e4ist\u00e4, ja meid\u00e4n on yleens\u00e4 aloitettava ulkopuolelta sis\u00e4\u00e4np\u00e4in ja tiedett\u00e4v\u00e4, mit\u00e4 kukin toiminto tekee, eik\u00f6 niin?<\/p>\n<p>Sen puhdistamiseksi meid\u00e4n on viel\u00e4 k\u00e4sitelt\u00e4v\u00e4 yll\u00e4 lueteltuja toimintoja, mutta voimme jakaa asiat helpommin luettaviksi vaiheiksi (koodikommenttien ohella), jotta toisen kehitt\u00e4j\u00e4n on helpompi j\u00e4sent\u00e4\u00e4.<\/p>\n<p>Ehk\u00e4 se voisi n\u00e4ytt\u00e4\u00e4 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13ff8610716de3cb5b5e612d80267e9e#file-00-verbose-with-arrays-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Get the excerpt from the incoming post.\n$post    = get_post( $post_id );\n$excerpt = $post-&gt;post_excerpt;\n\n\/\/ Remove the name from the array of names in the excerpt.\n$to_remove = array( $name );\n$names     = array_map( 'trim', explode( ',', $excerpt) );\n$result    = array_diff( $names, $to_remove );\n\n\/\/ Now creae the new excerpt.\n$new_excerpt = implode( ', ', $result );\n\n\/**\n * And we update the post content without the information (and we don't need\n * paragraph tags).\n *\/\n$event_post-&gt;post_excerpt = apply_filters( 'the_excerpt', $new_excerpt );<\/code><\/pre>\n<p>Onko se nyt oikea tapa tehd\u00e4 se? Min\u00e4 en tied\u00e4. Mutta se on tapa tehd\u00e4 se. Ja se on yksi niist\u00e4 tilanteista, joita on helpompi lukea ja seurata.<\/p>\n<p>Joten ehk\u00e4 se ei ole \u00e4lykk\u00e4\u00e4n koodin kirjoittamista WordPressiin, mutta en tied\u00e4 \u2013 enk\u00e4 usko \u2013 sen pit\u00e4isi olla tavoite.<\/p>\n<h2>Pit\u00e4isik\u00f6 meid\u00e4n pyrki\u00e4 kirjoittamaan \u00e4lyk\u00e4st\u00e4 koodia?<\/h2>\n<p><a href=\"https:\/\/make.wordpress.org\/core\/handbook\/best-practices\/coding-standards\/php\/#clever-code\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress-k\u00e4sikirja<\/a> kertoo seuraavaa:<\/p>\n<blockquote>\n<p>Yleisesti ottaen luettavuus on t\u00e4rke\u00e4mp\u00e4\u00e4 kuin \u00e4lykkyys tai lyhyys.<\/p>\n<\/blockquote>\n<p>Ja sitten antaa esimerkki. T\u00e4ss\u00e4 vaiheessa uraani olen samaa mielt\u00e4:<\/p>\n<ul>\n<li>\u00e4lyk\u00e4s koodi ei tarkoita tehokkaampaa koodia,<\/li>\n<li>\u00e4lykk\u00e4\u00e4ll\u00e4 koodilla kest\u00e4\u00e4 usein kauemmin hyp\u00e4t\u00e4 enemm\u00e4n henkisist\u00e4 vanteista kuin monisanainen koodi,<\/li>\n<li>fiksua koodia on siten vaikeampi yll\u00e4pit\u00e4\u00e4 varsinkin kun hypp\u00e4\u00e4t vanhempaan koodikantaan.<\/li>\n<\/ul>\n<p>Lopuksi uskon, ett\u00e4 eri ihmiset saattavat pit\u00e4\u00e4 jotakin koodia \u00e4lykk\u00e4\u00e4mp\u00e4n\u00e4 kuin toiset, mutta on my\u00f6s koodia, jota monet meist\u00e4 pit\u00e4v\u00e4t yrityksen\u00e4 \u00e4lykk\u00e4\u00e4mp\u00e4n\u00e4 kuin ei.<\/p>\n<p>Pyri viime k\u00e4dess\u00e4 kirjoittamaan koodia haluamallasi tavalla, mutta kirjoita toinen kehitt\u00e4j\u00e4 mieless\u00e4: Jos olet koskaan valittanut siit\u00e4, ett\u00e4 koodinp\u00e4tk\u00e4 on vaikea tulkita ensi silm\u00e4yksell\u00e4, on todenn\u00e4k\u00f6ist\u00e4, ett\u00e4 se oli huonosti kirjoitettu tai se oli yritt\u00e4\u00e4 olla fiksu. \u00c4l\u00e4 siis ole se kaveri tai tytt\u00f6, joka siirt\u00e4\u00e4 vastuun seuraavalle kehitt\u00e4j\u00e4lle.<\/p>\n<p>Pyri sen sijaan kirjoittamaan selke\u00e4 koodi ja k\u00e4yt\u00e4 tarvittaessa kommentteja.<\/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>Milt\u00e4 \u00e4lyk\u00e4s koodi taulukoilla n\u00e4ytt\u00e4\u00e4 WordPressiss\u00e4 verrattuna v\u00e4hemm\u00e4n \u00e4lykk\u00e4\u00e4seen koodiin? Ja pit\u00e4isik\u00f6 meid\u00e4n v\u00e4ltt\u00e4\u00e4 pyrkimyst\u00e4 kirjoittaa fiksua koodia?<\/p>\n","protected":false},"author":1,"featured_media":220968,"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-229432","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\/229432","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=229432"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229432\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/220968"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}