{"id":231600,"date":"2022-12-24T12:50:00","date_gmt":"2022-12-24T09:50:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231600"},"modified":"2022-12-07T10:58:47","modified_gmt":"2022-12-07T07:58:47","slug":"usando-filtros-personalizados-com-codigos-de-acesso","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/usando-filtros-personalizados-com-codigos-de-acesso\/","title":{"rendered":"Usando filtros personalizados com c\u00f3digos de acesso"},"content":{"rendered":"\n<p>Depois de entender a <a href=\"https:\/\/codex.wordpress.org\/Shortcode_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">API Shortcode<\/a> e como os <a href=\"https:\/\/tommcfarlin.com\/wordpress-hooks\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">filtros<\/a> funcionam, \u00e9 f\u00e1cil implement\u00e1-los no WordPress.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160133-61e705f31918c.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-160133-61e705f31918c.png\" alt=\"Usando filtros personalizados com c\u00f3digos de acesso\" ><\/a><\/p>\n<p>E quando voc\u00ea consegue misturar os dois, pode fazer muito mais do que o normal do que quando eles est\u00e3o operando independentemente um do outro.<\/p>\n<p>Especificamente, voc\u00ea pode filtrar dados que est\u00e3o no resultado do shortcode, e isso pode ser especialmente \u00fatil para outros desenvolvedores. Se voc\u00ea estiver familiarizado com a implementa\u00e7\u00e3o de filtros personalizados, fazer isso no contexto de um c\u00f3digo curto n\u00e3o \u00e9 muito diferente.<\/p>\n<p>Mas se voc\u00ea nunca usou a API de shortcode ou a funcionalidade antes, ainda \u00e9 f\u00e1cil de fazer.<\/p>\n<h2>Filtros personalizados com c\u00f3digos de acesso<\/h2>\n<p>Para este post, usaremos um exemplo relativamente artificial. Ou seja, o shortcode resultar\u00e1 em algo est\u00e1tico. O motivo \u00e9 que facilita a demonstra\u00e7\u00e3o em um post e a implementa\u00e7\u00e3o em seu c\u00f3digo.<\/p>\n<h3>O c\u00f3digo de acesso<\/h3>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/b264ef7e0af29b42651bf45ba50c64b2#file-00-a-simple-example-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Para implementar um shortcode<\/a>, voc\u00ea precisa de duas coisas:<\/p>\n<ol>\n<li>um nome personalizado para o shortcode,<\/li>\n<li>uma fun\u00e7\u00e3o que \u00e9 usada para colocar informa\u00e7\u00f5es onde quer que o shortcode seja usado.<\/li>\n<\/ol>\n<pre><code>&lt;?php\n\nnamespace Acme;\n\nadd_shortcode('a_simple_example', __NAMESPACE__. 'aSimpleExample');\n\/**\n * Replaces [a_simple_example] short code with the text \"This is the result of an example shortcode.\"\n * whenever the shortcode is placed in a post or page.\n *\/\nfunction aSimpleExample()\n{\n  return 'This is the result of an example shortcode.';\n}<\/code><\/pre>\n<p>Observe no c\u00f3digo acima; Eu prefixei a fun\u00e7\u00e3o com. <code>__NAMESPACE__<\/code>Isso ocorre porque a fun\u00e7\u00e3o reside em um namespace personalizado (que voc\u00ea pode ver na parte superior do arquivo).<\/p>\n<p>Sem este prefixo, a fun\u00e7\u00e3o n\u00e3o ser\u00e1 chamada. Se voc\u00ea optar por n\u00e3o usar namespaces, poder\u00e1 renunciar ao prefixo e \u00e0s barras iniciais do nome da fun\u00e7\u00e3o.<\/p>\n<p>Observe que revisitaremos essa fun\u00e7\u00e3o assim que tivermos o filtro instalado.<\/p>\n<h3>O filtro<\/h3>\n<p>Adicionar um filtro personalizado \u00e9 semelhante a adicionar um shortcode. Voc\u00ea precisa:<\/p>\n<ol>\n<li>um nome de filtro personalizado,<\/li>\n<li>uma fun\u00e7\u00e3o que \u00e9 usada para filtrar as informa\u00e7\u00f5es recebidas (e os filtros geralmente devem aceitar pelo menos um par\u00e2metro que \u00e9, obviamente, os dados a serem filtrados):<\/li>\n<\/ol>\n<p>Para manter a consist\u00eancia com o exemplo acima, digamos que queremos apenas <a href=\"https:\/\/gist.github.com\/tommcfarlin\/b264ef7e0af29b42651bf45ba50c64b2#file-01-a-simple-filter-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">substituir algumas palavras no shortcode<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace Acme;\n\nadd_filter('custom_shortcode_example', __NAMESPACE__. 'aSimpleShortcodeFilter');\n\/**\n * Replaces [a simple example] short code with the text \"This is the result of an example shortcode.\"\n * whenever the shortcode is placed in a post or page.\n *\n * @param string $input the input to filter.\n *\n * @return string       the result of the filter running on the input\n *\/\nfunction aSimpleShortcodeFilter(string $input): string\n{\n  return str_ireplace(\n    'an example shortcode.',\n    'a filtered shortcode',\n    $input\n  );\n}<\/code><\/pre>\n<p>Isso substituir\u00e1 o conte\u00fado de:<\/p>\n<p>Este \u00e9 o resultado de um shortcode de exemplo.<\/p>\n<p>Para:<\/p>\n<p>Este \u00e9 o resultado de um shortcode filtrado.<\/p>\n<p>Mas ainda temos que amarrar os dois juntos.<\/p>\n<h2>Revisitando o Shortcode<\/h2>\n<p>Para associar as duas fun\u00e7\u00f5es, precisamos ter certeza de que a fun\u00e7\u00e3o do shortcode aplica o filtro ao valor que ele retorna.<\/p>\n<p>Felizmente, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/b264ef7e0af29b42651bf45ba50c64b2#file-02-a-filtered-shortcode-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">implement\u00e1-lo \u00e9 simples,<\/a> especialmente porque temos tudo o que precisamos:<\/p>\n<pre><code>&lt;?php\n\nnamespace Acme;\n\nadd_shortcode('a_simple_example', __NAMESPACE__. 'aSimpleExample');\n\/**\n * Replaces [a_simple_example] short code with the text \"This is the result of an example shortcode.\"\n * whenever the shortcode is placed in a post or page.\n *\/\nfunction aSimpleExample()\n{\n  return apply_filters('custom_shortcode_example', 'This is the result of an example shortcode.');\n}\n<\/code><\/pre>\n<p>Em um exemplo mais concreto, sempre recomendo verificar se o resultado do par\u00e2metro n\u00e3o est\u00e1 vazio, se cont\u00e9m a string que estou procurando ou algo semelhante.<\/p>\n<p>Ou seja, muitas vezes gosto de abrir com uma cl\u00e1usula de guarda. Se o teste falhar, eu apenas retorno o valor recebido; caso contr\u00e1rio, filtrarei os dados e retornarei qualquer que seja o resultado dessa opera\u00e7\u00e3o.<\/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>Mesmo que voc\u00ea nunca tenha usado a API ou a funcionalidade antes, \u00e9 f\u00e1cil come\u00e7ar a implementar filtros personalizados com c\u00f3digos de acesso.<\/p>\n","protected":false},"author":1,"featured_media":235705,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,722,806,867],"tags":[1170],"class_list":["post-231600","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-php-8","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231600","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=231600"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231600\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/235705"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231600"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231600"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231600"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}