{"id":228744,"date":"2022-11-01T17:59:00","date_gmt":"2022-11-01T14:59:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228744"},"modified":"2022-11-09T04:07:07","modified_gmt":"2022-11-09T01:07:07","slug":"o-pisaniu-inteligentnego-kodu-za-pomoca-tablic-w-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/o-pisaniu-inteligentnego-kodu-za-pomoca-tablic-w-wordpress\/","title":{"rendered":"O pisaniu inteligentnego kodu za pomoc\u0105 tablic w WordPress"},"content":{"rendered":"\n<p>Nie wiem, czy istnieje standard dla tego, co jest uwa\u017cane za \u201esprytny kod&quot;, ale my\u015bl\u0119, \u017ce gdyby\u015b pokaza\u0142 programistom r\u00f3\u017cne pr\u00f3bki kodu, byliby w stanie go pozna\u0107, gdy go zobacz\u0105.<\/p>\n<p>By\u0142 taki okres w mojej karierze, \u017ce bardzo interesowa\u0142em si\u0119 pisaniem sprytnego kodu. Ale im jestem starszy i im wi\u0119cej pracuj\u0119 nad utrzymaniem projekt\u00f3w, tym mniej przejmuj\u0119 si\u0119 pisaniem m\u0105drego kodu i tym bardziej jestem zainteresowany pisaniem kodu, kt\u00f3ry jest przejrzysty i czytany, a tym samym utrzymany.<\/p>\n<p>Sprytny kod jest dla ptak\u00f3w. Wybacz te g\u0142upie kalambury.<\/p>\n<p>Kiedy pracujemy z WordPressem, prawdopodobnie mamy do czynienia z tablicami, zw\u0142aszcza bior\u0105c pod uwag\u0119, \u017ce tak wiele element\u00f3w wewn\u0119trznych WordPressa jest na nich zbudowanych (tak, istniej\u0105 te\u017c pewne obiekty, ale tablice s\u0105 wszechobecne).<\/p>\n<p>Jak zatem wygl\u0105da sprytny kod z tablicami w WordPressie w por\u00f3wnaniu z mniej sprytnym kodem? A ponadto, czy powinni\u015bmy unika\u0107 pisania sprytnego kodu?<\/p>\n<h2>Sprytny kod z tablicami<\/h2>\n<p>Funkcje tablicowe s\u0105 prawdopodobnie jednym z najwi\u0119kszych zestaw\u00f3w funkcji w PHP.<\/p>\n<p>Oczywi\u015bcie pisanie sprytnego kodu za pomoc\u0105 WordPressa wydaje si\u0119 cz\u0119\u015bciowo pasowa\u0107 do \u015brodowiska, prawda? Wcale nie m\u00f3wi\u0119, \u017ce jest \u017ale. M\u00f3wi\u0119 tylko, \u017ce kiedy masz funkcje w globalnej przestrzeni nazw, kt\u00f3re dzia\u0142aj\u0105 z tablicami zwracaj\u0105cymi tablice, zbyt \u0142atwo jest pisa\u0107 zagnie\u017cd\u017cone wywo\u0142ania, kt\u00f3re ostatecznie wymagaj\u0105 nieco wi\u0119cej pracy umys\u0142owej, aby przeanalizowa\u0107, co robi kod.<\/p>\n<p>Jasne, pisanie o tym to jedno, ale mo\u017ce warto przyjrze\u0107 si\u0119 przyk\u0142adowi, jak mo\u017ce wygl\u0105da\u0107 sprytny kod w WordPressie i jak mo\u017cna go zrefaktoryzowa\u0107.<\/p>\n<h3>Przyk\u0142ad<\/h3>\n<p>Za\u0142\u00f3\u017cmy na przyk\u0142ad, \u017ce mamy post i aktualizujemy fragment posta, aby usun\u0105\u0107 imi\u0119 i nazwisko zawarte we fragmencie. Kiedy tak si\u0119 dzieje, niekoniecznie jest to wa\u017cne (chocia\u017c <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/delete_user\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">delete_user<\/a> nie jest trudny do wyobra\u017cenia, prawda?)<\/p>\n<p>Od samego pocz\u0105tku otrzymujemy:<\/p>\n<ul>\n<li>identyfikator poczty,<\/li>\n<li>imi\u0119 i nazwisko osoby do usuni\u0119cia.<\/li>\n<\/ul>\n<p>Jednym ze sposob\u00f3w na to by\u0142oby u\u017cycie kombinacji <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>. Wszystko z tego powodu:<\/p>\n<ul>\n<li>array do utworzenia tablicy osoby (poniewa\u017c jako tablica jest wymagana p\u00f3\u017aniej),<\/li>\n<li>array_map do przycinania bia\u0142ych znak\u00f3w po rozbiciu fragmentu na tablic\u0119,<\/li>\n<li>array_diff do wyszukiwania ci\u0105g\u00f3w znak\u00f3w, kt\u00f3re pozosta\u0142y po usuni\u0119ciu nazwy,<\/li>\n<li>i imploduj, aby przebudowa\u0107 wynik z powrotem na \u0142a\u0144cuch dla post_excerpt.<\/li>\n<\/ul>\n<p>Okej, wi\u0119c z tym powiedziawszy, oto przyk\u0142ad tego, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13ff8610716de3cb5b5e612d80267e9e#file-00-clever-code-with-arrays-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">jak mo\u017ce wygl\u0105da\u0107<\/a> sprytny kod w WordPressie :<\/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>Ale to du\u017co zagnie\u017cd\u017cania i zwykle musimy zacz\u0105\u0107 od zewn\u0105trz i wiedzie\u0107, co robi ka\u017cda funkcja, prawda?<\/p>\n<p>Aby to posprz\u0105ta\u0107, nadal mamy do czynienia z funkcjami wymienionymi powy\u017cej, ale mo\u017cemy podzieli\u0107 rzeczy na \u0142atwiejsze do odczytania kroki (wraz z komentarzami do kodu), aby u\u0142atwi\u0107 przeanalizowanie przez innego programist\u0119.<\/p>\n<p>By\u0107 mo\u017ce mog\u0142oby to wygl\u0105da\u0107 mniej wi\u0119cej <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13ff8610716de3cb5b5e612d80267e9e#file-00-verbose-with-arrays-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tak<\/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>Czy jest to spos\u00f3b na zrobienie tego? Nie wiem. Ale to spos\u00f3b na zrobienie tego. I jest to jedna z tych sytuacji, kt\u00f3r\u0105 \u0142atwiej czyta\u0107 i \u015bledzi\u0107.<\/p>\n<p>Mo\u017ce wi\u0119c nie jest to pisanie sprytnego kodu w WordPressie, ale nie wiem \u2013 ani nie s\u0105dz\u0119 \u2013 to powinno by\u0107 naszym celem.<\/p>\n<h2>Czy powinni\u015bmy d\u0105\u017cy\u0107 do napisania sprytnego kodu?<\/h2>\n<p>Podr\u0119cznik <a href=\"https:\/\/make.wordpress.org\/core\/handbook\/best-practices\/coding-standards\/php\/#clever-code\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPressa zawiera<\/a> nast\u0119puj\u0105ce informacje:<\/p>\n<blockquote>\n<p>Og\u00f3lnie rzecz bior\u0105c, czytelno\u015b\u0107 jest wa\u017cniejsza ni\u017c spryt czy zwi\u0119z\u0142o\u015b\u0107.<\/p>\n<\/blockquote>\n<p>A nast\u0119pnie przechodzi do podania przyk\u0142adu. W tym momencie mojej kariery zazwyczaj si\u0119 zgadzam:<\/p>\n<ul>\n<li>sprytny kod nie oznacza bardziej wydajnego kodu,<\/li>\n<li>sprytny kod cz\u0119sto zajmuje wi\u0119cej czasu, aby przeskoczy\u0107 przez wi\u0119cej mentalnych p\u0119tli ni\u017c pe\u0142ny kod,<\/li>\n<li>sprytny kod jest zatem trudniejszy do utrzymania, zw\u0142aszcza gdy przechodzi si\u0119 do starszej bazy kodu.<\/li>\n<\/ul>\n<p>Wreszcie, my\u015bl\u0119, \u017ce r\u00f3\u017cni ludzie mog\u0105 uwa\u017ca\u0107, \u017ce niekt\u00f3re kody s\u0105 bardziej sprytne ni\u017c inne, ale jest te\u017c taki kod, kt\u00f3ry wielu z nas uwa\u017ca za pr\u00f3b\u0119 bycia bardziej sprytnym ni\u017c nie.<\/p>\n<p>Ostatecznie staraj si\u0119 pisa\u0107 kod, niezale\u017cnie od tego, jaki chcesz pisa\u0107, ale pisz z my\u015bl\u0105 o innym programi\u015bcie: Je\u015bli kiedykolwiek narzeka\u0142e\u015b, \u017ce fragment kodu jest trudny do rozszyfrowania na pierwszy rzut oka, prawdopodobnie jest on \u017ale napisany lub by\u0142 staraj si\u0119 by\u0107 sprytny. Wi\u0119c nie b\u0105d\u017a tym facetem lub dziewczyn\u0105, kt\u00f3rzy przekazuj\u0105 pieni\u0105dze nast\u0119pnemu programi\u015bcie.<\/p>\n<p>Zamiast tego staraj si\u0119 napisa\u0107 przejrzysty kod i u\u017cywa\u0107 komentarzy, gdy jest to konieczne.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jak wygl\u0105da sprytny kod z tablicami w WordPressie w por\u00f3wnaniu z mniej sprytnym kodem? A czy powinni\u015bmy unika\u0107 d\u0105\u017cenia do pisania sprytnego kodu?<\/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":[721,897,805,866],"tags":[1169],"class_list":["post-228744","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-php-7","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=228744"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228744\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/220968"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}