{"id":230993,"date":"2022-12-25T11:26:00","date_gmt":"2022-12-25T08:26:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230993"},"modified":"2022-12-07T11:04:48","modified_gmt":"2022-12-07T08:04:48","slug":"uzywanie-funkcji-zamiast-globalnych-get_post_field","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/uzywanie-funkcji-zamiast-globalnych-get_post_field\/","title":{"rendered":"U\u017cywanie funkcji zamiast globalnych: get_post_field"},"content":{"rendered":"\n<p>Poniewa\u017c PHP nadal si\u0119 rozwija, a WordPress (i jego ekonomia programistyczna) zaczyna korzysta\u0107 z bardziej nowoczesnych funkcji, jedn\u0105 z rzeczy, kt\u00f3re wci\u0105\u017c widzimy, jest korzystanie z globalnych element\u00f3w w WordPressie.<\/p>\n<p>Do pewnego stopnia jest to nieuniknione: znacz\u0105ce cz\u0119\u015bci aplikacji zosta\u0142y zbudowane przy u\u017cyciu globalnych, kiedy to w\u0142a\u015bnie ta funkcja by\u0142a g\u0142\u00f3wn\u0105 funkcj\u0105; jednak inne cz\u0119\u015bci posun\u0119\u0142y si\u0119 naprz\u00f3d, udost\u0119pniaj\u0105c klasy lub funkcje, kt\u00f3re uniemo\u017cliwiaj\u0105 nam to.<\/p>\n<p>Przyk\u0142ad: <code>get_post_field<\/code>jest to solidna alternatywa dla u\u017cywania <code>$post<\/code>globalnego, kt\u00f3ra dostarcza wiele tych samych informacji w nieco bardziej nowoczesny (i prawdopodobnie bezpieczniejszy) spos\u00f3b odczytywania danych.<\/p>\n<p>Dla wielu powszechn\u0105 praktyk\u0105 jest u\u017cywanie <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f8ff8302439616caaf433f48aa85fe99#file-00-get-post-slug-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">czego\u015b takiego jak poni\u017cej :<\/a><\/p>\n<pre><code>&lt;?php\n\/**\n * Retrieves the slug for the current post via the current post's\n * post_name property.\n *\n * @return string the slug of the post.\n *\/\nfunction getPostSlug(): string\n{\n  global $post;\n  return $post-&gt;post_name;\n}<\/code><\/pre>\n<p>Nierzadko mo\u017cna zobaczy\u0107 co\u015b takiego <code>get_the_title(get_the_ID());<\/code>w ca\u0142ym kodzie, co jest dobr\u0105 rzecz\u0105, ale wci\u0105\u017c zdarzaj\u0105 si\u0119 sytuacje, w kt\u00f3rych widzimy kod napisany, kt\u00f3ry ma dost\u0119p do pewnych aspekt\u00f3w bie\u017c\u0105cego posta.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160029-61e703811521c.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-160029-61e703811521c.png\" alt=\"U\u017cywanie funkcji zamiast globalnych: get_post_field\" ><\/a><\/p>\n<p>I zastanawiam si\u0119, jak bardzo potrzebna jest ta praktyka <code>get_post_field<\/code>. Z <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_post_field\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">odniesienia do kodu:<\/a><\/p>\n<blockquote>\n<p>Pobierz dane z pola wpisu na podstawie identyfikatora wpisu.<\/p>\n<p>Przyk\u0142adami pola post b\u0119d\u0105: 'post_type&#8217;, 'post_status&#8217;, 'post_content&#8217; itp. i oparte na w\u0142a\u015bciwo\u015bciach obiektu post lub nazwach kluczy.<\/p>\n<\/blockquote>\n<p>Podobnym przyk\u0142adem do tej funkcji mo\u017ce by\u0107 <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_user_by\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>get_user_by<\/code><\/a>funkcja, w kt\u00f3rej przekazujesz okre\u015blony ci\u0105g do funkcji, dla kt\u00f3rej chcesz pobra\u0107 informacje, a tak\u017ce identyfikator (lub pe\u0142ny obiekt postu, ale je\u015bli identyfikator wystarczy, dlaczego nie?).<\/p>\n<p>R\u00f3\u017cnica polega na tym, \u017ce w przypadku niepowodzenia \u017c\u0105dania pobierzesz warto\u015b\u0107 \u017c\u0105danego pola lub pusty ci\u0105g (zamiast b\u0142\u0119du, warto\u015bci null lub false). Oznacza to, \u017ce musieliby\u015bmy napisa\u0107 klauzul\u0119 warunkow\u0105 lub klauzul\u0119 ochronn\u0105, aby obs\u0142u\u017cy\u0107 taki przypadek.<\/p>\n<p>Tak wi\u0119c pe\u0142ny przypadek u\u017cycia tej funkcji i kodu mo\u017ce wymaga\u0107 <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f8ff8302439616caaf433f48aa85fe99#file-01-get-post-slug-via-field-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kilku funkcji<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Generates a boolean value based on the presence of a post slug.\n *\n * @return bool True if there is a slug; otherwise, false.\n *\/\nfunction hasPostSlug(): bool\n{\n  return ('' === getPostSlug());\n}\n\n\/**\n * Retrieves the slug for the current post via the get_post_field\n * API function.\n *\n * @return string the slug of the post.\n *\/\nfunction getPostSlug(): string\n{\n  return get_post_field('post_name', get_the_ID());\n}<\/code><\/pre>\n<p>To wszystko mo\u017cna po\u0142\u0105czy\u0107 w <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f8ff8302439616caaf433f48aa85fe99#file-03-get-post-slug-example-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ten spos\u00f3b:<\/a><\/p>\n<pre><code>&lt;?php\n\nif (hasPostSlug()) {\n  echo getPostSlug();\n}<\/code><\/pre>\n<p>Celem udost\u0119pniania tego rodzaju kodu jest pomoc w udost\u0119pnianiu niekt\u00f3rych alternatyw, jakie mamy dla zmiennych globalnych, aby r\u00f3wnie\u017c udost\u0119pnia\u0107 interfejsy API, kt\u00f3re istniej\u0105, ale mog\u0105 by\u0107 niewykorzystane.<\/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>get_post_field jest alternatyw\u0105 dla u\u017cywania funkcji zamiast globalnych. I jest jednym z wielu, kt\u00f3rych powinni\u015bmy u\u017cywa\u0107, gdy idziemy naprz\u00f3d.<\/p>\n","protected":false},"author":1,"featured_media":235955,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,897,845,866],"tags":[1169],"class_list":["post-230993","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-kod","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230993","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=230993"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230993\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/235955"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}