{"id":228889,"date":"2022-11-01T17:58:00","date_gmt":"2022-11-01T14:58:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228889"},"modified":"2022-11-09T04:40:33","modified_gmt":"2022-11-09T01:40:33","slug":"nutika-koodi-kirjutamine-massiividega-wordpressis","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/nutika-koodi-kirjutamine-massiividega-wordpressis\/","title":{"rendered":"Nutika koodi kirjutamine massiividega WordPressis"},"content":{"rendered":"\n<p>Ma ei tea, kas &quot;tarka koodi&quot; jaoks on olemas standard, kuid ma arvan, et kui n\u00e4itaksite programmeerijatele erinevaid koodin\u00e4idiseid, saaksid nad seda n\u00e4hes teada.<\/p>\n<p>Ja mu karj\u00e4\u00e4ris oli aeg, mil olin kaugelt huvitatud nutika koodi kirjutamisest. Kuid mida vanemaks ma saan ja mida rohkem t\u00f6\u00f6d projektide haldamisel teen, seda v\u00e4hem olen mures nutika koodi kirjutamise p\u00e4rast ja seda rohkem huvitan mind selge ja loetava koodi kirjutamise vastu.<\/p>\n<p>Nutikas kood on lindudele. Andke andeks need lollid s\u00f5nam\u00e4ngud.<\/p>\n<p>WordPressiga t\u00f6\u00f6tades tegeleme t\u00f5en\u00e4oliselt palju massiividega, eriti arvestades, et nii suur osa WordPressi sisemistest elementidest on \u00fcles ehitatud neile (jah, on ka objekte, kuid massiivid on levinud).<\/p>\n<p>Kuidas n\u00e4eb siis v\u00e4lja nutikas massiividega kood WordPressis v\u00f5rreldes v\u00e4hem nutika koodiga? Ja pealegi, kas me peaksime v\u00e4ltima nutika koodi kirjutamist?<\/p>\n<h2>Nutikas kood massiividega<\/h2>\n<p>Massiivifunktsioonid on vaieldamatult \u00fcks suurimaid PHP funktsioonide komplekte.<\/p>\n<p>Loomulikult tundub, et nutika koodi kirjutamine WordPressiga sobib osaliselt ja osaliselt keskkonnaga, eks? Ma ei \u00fctle, et see on \u00fcldse halb. Ma lihtsalt \u00fctlen, et kui teil on globaalses nimeruumis funktsioone, mis t\u00f6\u00f6tavad massiividega, mis tagastavad massiive, on liiga lihtne kirjutada pesastatud k\u00f5nesid, mis n\u00f5uavad l\u00f5puks natuke rohkem vaimset t\u00f6\u00f6d, et kood anal\u00fc\u00fcsida, mida kood teeb.<\/p>\n<p>Muidugi on sellest kirjutamine \u00fcks asi, kuid v\u00f5ib-olla on m\u00f5ttekas vaadata n\u00e4idet selle kohta, milline v\u00f5iks WordPressi nutikas kood v\u00e4lja n\u00e4ha ja kuidas seda siis \u00fcmber kujundada.<\/p>\n<h3>N\u00e4ide<\/h3>\n<p>Oletame n\u00e4iteks, et meil on postitus ja me v\u00e4rskendame postituse v\u00e4ljav\u00f5tet, nii et v\u00e4ljav\u00f5ttes sisalduv nimi tuleb eemaldada. Kui see juhtub, pole see tingimata oluline (kuigi <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/delete_user\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">atribuuti delete_user<\/a> pole raske ette kujutada, eks?)<\/p>\n<p>Algusest peale on meile antud:<\/p>\n<ul>\n<li>postituse ID,<\/li>\n<li>eemaldatava isiku nimi.<\/li>\n<\/ul>\n<p>\u00dcks v\u00f5imalus seda teha oleks kasutada <a href=\"https:\/\/php.net\/manual\/en\/language.types.array.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">massiivi<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.array-map.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">massiivi_kaart<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.explode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">plahvatuse<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.array-diff.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">massiivi_diff<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.implode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">implode<\/a> kombinatsiooni. K\u00f5ik sel p\u00f5hjusel:<\/p>\n<ul>\n<li>massiiv isiku massiivi loomiseks (kuna seda on massiivina hiljem vaja),<\/li>\n<li>array_map t\u00fchiku k\u00e4rpimiseks p\u00e4rast v\u00e4ljav\u00f5tte massiiviks l\u00f5hkamist,<\/li>\n<li>array_diff stringide leidmiseks, mis j\u00e4\u00e4vad p\u00e4rast nime eemaldamist,<\/li>\n<li>ja implode, et tulemus uuesti post_excerpti stringiks ehitada.<\/li>\n<\/ul>\n<p>Olgu, seda \u00f6eldes, siin on n\u00e4ide sellest, milline <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13ff8610716de3cb5b5e612d80267e9e#file-00-clever-code-with-arrays-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">v\u00f5ib WordPressi nutikas kood v\u00e4lja n\u00e4ha<\/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>Kuid see on palju pesastamist ja tavaliselt peame alustama v\u00e4ljastpoolt ja teadma, mida iga funktsioon teeb, eks?<\/p>\n<p>Selle puhastamiseks peame siiski tegelema \u00fclaltoodud funktsioonidega, kuid saame jagada asjad h\u00f5lpsamini loetavateks sammudeks (koos koodi kommentaaridega), et teisel arendajal oleks lihtsam s\u00f5eluda.<\/p>\n<p>V\u00f5ib-olla v\u00f5iks see v\u00e4lja n\u00e4ha umbes <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13ff8610716de3cb5b5e612d80267e9e#file-00-verbose-with-arrays-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selline<\/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>N\u00fc\u00fcd, kas seda saab teha nii? ma ei tea. Kuid see on viis, kuidas seda teha. Ja see on \u00fcks neist olukordadest, mida on lihtsam lugeda ja j\u00e4lgida.<\/p>\n<p>Nii et v\u00f5ib-olla pole see nutika koodi kirjutamine WordPressis, kuid ma ei tea \u2013 ega arva \u2013, et see peaks olema eesm\u00e4rk.<\/p>\n<h2>Kas peaksime p\u00fc\u00fcdma kirjutada nutikat koodi?<\/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\">WordPressi k\u00e4siraamat<\/a> \u00fctleb j\u00e4rgmist :<\/p>\n<blockquote>\n<p>\u00dcldiselt on loetavus t\u00e4htsam kui nutikus v\u00f5i l\u00fchidus.<\/p>\n<\/blockquote>\n<p>Ja siis j\u00e4tkab n\u00e4ite toomisega. Praegusel hetkel olen oma karj\u00e4\u00e4ri jooksul n\u00f5us:<\/p>\n<ul>\n<li>tark kood ei v\u00f5rdu t\u00f5husama koodiga,<\/li>\n<li>nutikal koodil kulub sageli rohkem aega l\u00e4bi h\u00fcppamiseks kui paljus\u00f5naline kood,<\/li>\n<li>nutikat koodi on seega raskem hooldada, eriti kui h\u00fcpata vanemasse koodibaasi.<\/li>\n<\/ul>\n<p>L\u00f5puks arvan, et erinevad inimesed v\u00f5ivad m\u00f5nda koodi teistest nutikamaks pidada, kuid on ka koodi, mida paljud meist peavad katseks targemaks kui mitte.<\/p>\n<p>L\u00f5ppkokkuv\u00f5ttes p\u00fc\u00fcdke kirjutada kood nii, nagu soovite kirjutada, kuid kirjutage m\u00f5eldes teisele arendajale: kui olete kunagi kurtnud selle \u00fcle, et m\u00f5nda koodiosa on esmapilgul raske de\u0161ifreerida, on t\u00f5en\u00e4oline, et see oli halvasti kirjutatud v\u00f5i p\u00fc\u00fcdke olla tark. Nii et \u00e4rge olge see mees v\u00f5i t\u00fcdruk, kes annab vastutuse j\u00e4rgmisele arendajale.<\/p>\n<p>Selle asemel p\u00fc\u00fcdke kirjutada selge kood ja kasutada vajadusel kommentaare.<\/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>Kuidas n\u00e4eb nutikas massiividega kood WordPressis v\u00e4lja v\u00f5rreldes v\u00e4hem nutika koodiga? Ja kas me peaksime v\u00e4ltima nutika koodi kirjutamist?<\/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":[718,894,802,863],"tags":[1165],"class_list":["post-228889","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-kood","category-php-4","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228889","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=228889"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/228889\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/220968"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=228889"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=228889"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=228889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}