{"id":231635,"date":"2022-12-25T11:38:00","date_gmt":"2022-12-25T08:38:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231635"},"modified":"2022-12-07T11:04:50","modified_gmt":"2022-12-07T08:04:50","slug":"usando-funcoes-no-lugar-de-globais-get_post_field","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/usando-funcoes-no-lugar-de-globais-get_post_field\/","title":{"rendered":"Usando fun\u00e7\u00f5es no lugar de globais: get_post_field"},"content":{"rendered":"\n<p>Como o PHP continuou avan\u00e7ando e o WordPress (e sua economia de desenvolvimento) trabalha para come\u00e7ar a usar mais recursos mais modernos, uma das coisas que ainda vemos acontecendo \u00e9 o uso de globais dentro do WordPress.<\/p>\n<p>At\u00e9 certo ponto, \u00e9 inevit\u00e1vel: partes significativas do aplicativo foram criadas usando globais quando esse era o recurso principal; outras partes, no entanto, avan\u00e7aram fornecendo classes ou fun\u00e7\u00f5es que nos impedem de fazer isso.<\/p>\n<p>Caso em quest\u00e3o: <code>get_post_field<\/code>\u00e9 uma alternativa s\u00f3lida ao uso do <code>$post<\/code>global que fornece muitas das mesmas informa\u00e7\u00f5es de uma maneira um pouco mais moderna (e sem d\u00favida mais segura) de ler os dados.<\/p>\n<p>Para muitos, usar <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f8ff8302439616caaf433f48aa85fe99#file-00-get-post-slug-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">algo como o seguinte<\/a> \u00e9 uma pr\u00e1tica comum:<\/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>N\u00e3o \u00e9 incomum ver algo como <code>get_the_title(get_the_ID());<\/code>em todo o c\u00f3digo, o que \u00e9 uma coisa boa, mas ainda h\u00e1 momentos em que vemos c\u00f3digo escrito que acessa certos aspectos do post atual.<\/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=\"Usando fun\u00e7\u00f5es no lugar de globais: get_post_field\" ><\/a><\/p>\n<p>E eu questiono o qu\u00e3o necess\u00e1ria essa pr\u00e1tica realmente \u00e9 dada a <code>get_post_field<\/code>fun\u00e7\u00e3o. Da <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_post_field\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">refer\u00eancia de c\u00f3digo:<\/a><\/p>\n<blockquote>\n<p>Recupere dados de um campo de postagem com base no ID da postagem.<\/p>\n<p>Exemplos do campo post ser\u00e3o, &#8216;post_type&#8217;, &#8216;post_status&#8217;, &#8216;post_content&#8217;, etc e baseados na propriedade do objeto post ou nos nomes das chaves.<\/p>\n<\/blockquote>\n<p>Um exemplo semelhante a essa fun\u00e7\u00e3o seria a <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>fun\u00e7\u00e3o em que voc\u00ea passa uma string espec\u00edfica para a fun\u00e7\u00e3o para a qual deseja recuperar informa\u00e7\u00f5es, bem como um ID (ou o objeto post completo, mas quando o ID \u00e9 suficiente, por que n\u00e3o?).<\/p>\n<p>A diferen\u00e7a aqui \u00e9 que voc\u00ea recuperar\u00e1 o valor do campo solicitado ou uma string vazia (em vez de um erro ou nulo ou falso) quando a solicita\u00e7\u00e3o falhar. Isso significa que precisar\u00edamos escrever uma cl\u00e1usula condicional ou de guarda para lidar com esse caso.<\/p>\n<p>Portanto, um caso de uso completo dessa fun\u00e7\u00e3o e do c\u00f3digo pode exigir <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\">algumas fun\u00e7\u00f5es<\/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>Isso tudo pode ser amarrado <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f8ff8302439616caaf433f48aa85fe99#file-03-get-post-slug-example-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">assim:<\/a><\/p>\n<pre><code>&lt;?php\n\nif (hasPostSlug()) {\n  echo getPostSlug();\n}<\/code><\/pre>\n<p>O objetivo de compartilhar esse tipo de c\u00f3digo \u00e9 ajudar a compartilhar algumas das alternativas que temos \u00e0s vari\u00e1veis \u200b\u200bglobais para tamb\u00e9m compartilhar APIs que existem, mas podem ser subutilizadas.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <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 \u00e9 uma alternativa ao uso de fun\u00e7\u00f5es no lugar de globais. E \u00e9 um dos muitos que devemos usar \u00e0 medida que avan\u00e7amos.<\/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":[898,722,846,867],"tags":[1170],"class_list":["post-231635","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231635","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=231635"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231635\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/235955"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}