{"id":231669,"date":"2022-12-26T17:17:00","date_gmt":"2022-12-26T14:17:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231669"},"modified":"2022-12-26T17:19:54","modified_gmt":"2022-12-26T14:19:54","slug":"usando-transitorios-do-wordpress-em-vez-de-cookies","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/usando-transitorios-do-wordpress-em-vez-de-cookies\/","title":{"rendered":"Usando transit\u00f3rios do WordPress em vez de cookies?"},"content":{"rendered":"\n<p><a href=\"https:\/\/tommcfarlin.com\/set-cookies-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Eu escrevi sobre o uso de cookies no WordPress<\/a> antes, mas uma das coisas sobre fazer isso \u00e9 que eles normalmente s\u00e3o disparados no contexto de um gancho de <strong>inicializa\u00e7\u00e3o .<\/strong><\/p>\n<p>Ao trabalhar de forma orientada a objetos e tentar desacoplar certas partes da l\u00f3gica de forma que voc\u00ea possa us\u00e1-las sem precisar depender de outros ganchos, \u00e9 importante encontrar maneiras de lidar com isso.<\/p>\n<p>Caso contr\u00e1rio, o c\u00f3digo fica bem acoplado e voc\u00ea pode ter ganchos, chamadas <strong>do_action<\/strong> ou fun\u00e7\u00f5es an\u00f4nimas em todo lugar.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159955-61e70123bd8a1.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-159955-61e70123bd8a1.png\" alt=\"Usando transit\u00f3rios do WordPress em vez de cookies?\"><\/a><\/p>\n<p>Para simular a natureza dos cookies e seu recurso de expira\u00e7\u00e3o, o uso de transientes do WordPress por meio da <a href=\"https:\/\/codex.wordpress.org\/Transients_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">API Transients<\/a> apropriadamente nomeada pode ser uma solu\u00e7\u00e3o vi\u00e1vel.<\/p>\n<h2>Usando transit\u00f3rios do WordPress<\/h2>\n<p>Se voc\u00ea estiver familiarizado com qualquer uma das APIs de metadados que est\u00e3o no WordPress, provavelmente est\u00e1 familiarizado com as fun\u00e7\u00f5es que elas usam. Isso inclui opera\u00e7\u00f5es padr\u00e3o como <strong>adicionar<\/strong>, <strong>obter<\/strong>, <strong>atualizar<\/strong> e <strong>excluir<\/strong>.<\/p>\n<p>E com o WordPress, voc\u00ea pode simplific\u00e1-lo em muitos lugares para atualizar, obter e excluir, porque a <strong>atualiza\u00e7\u00e3o<\/strong> primeiro ver\u00e1 se uma informa\u00e7\u00e3o existe e, se n\u00e3o, a adicionar\u00e1.<\/p>\n<h3>Projetando uma interface de classe<\/h3>\n<p>Assim, a interface para uma classe que envolve a API Transients pode ser reduzida para:<\/p>\n<ul>\n<li>definir,<\/li>\n<li>pegue,<\/li>\n<li>excluir.<\/li>\n<\/ul>\n<p>Onde <strong>set<\/strong> substitui <strong>add<\/strong> e <strong>update<\/strong>. Al\u00e9m disso, \u00e9 bom ter fun\u00e7\u00f5es auxiliares como <strong>has<\/strong> que nos permitem escrever condicionais no c\u00f3digo que chama a biblioteca.<\/p>\n<p>Por exemplo, se voc\u00ea quiser fazer algo como &quot;se isso n\u00e3o tiver valor, ent\u00e3o retorne&quot;.<\/p>\n<p>Assim, a interface para o c\u00f3digo pode ser algo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/f6f57f45405f609fcd14905c54b30f25#file-00-data-store-interface-1-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">assim:<\/a><\/p>\n<pre><code>&lt;?php\n\/**\n * A wrapper for the Transients API. Because using `setcookie` only works in the `init`\n * hook of WordPress, then we need a way to simulate it. That's what the purpose of this class\n * does.\n *\n * It will use the ID of the user who is currently logged in (or the PHP's get_current_user value if\n * they are not logged in).\n *\n * @author Tom McFarlin &lt;tom@tommcfarlin.com&gt;\n *\/\ninterface DataStore {\n    \/**\n     * Determines if a transient value already exists identified with the incoming key.\n     *\n     * @param string $key The key used to identify the key in the database.\n     *\n     * @return bool       True if a transient exists; otherwise, false.\n     *\/\n    public function has( string $key );\n\n    \/**\n     * Saves the specified value for 24 hours.\n     *\n     * @param string $key   The key used to identify the key in the database.\n     * @param string $value The value to save for 24 hours.\n     *\/\n    public function set( string $key, string $value );\n\n    \/**\n     * Retrieves the transient value from the database.\n     *\n     * @param string $key The key used to identify the key in the database.\n     *\n     * @return string     The value associated with the incoming transient.\n     *\/\n    public function get( string $key );\n\n    \/**\n     * Deletes the transient data.\n     *\n     * @param string $key The key used to identify the key in the database.\n     *\/\n    public function delete( string $key );\n}\n<\/code><\/pre>\n<p>H\u00e1 algumas ressalvas a serem consideradas ao trabalhar com c\u00f3digo como esse tamb\u00e9m. Ou seja, e o caso de usu\u00e1rios autenticados e usu\u00e1rios n\u00e3o autenticados?<\/p>\n<p>Quando isso acontece, h\u00e1 outra maneira pela qual os dados transit\u00f3rios podem precisar ser tratados (dependendo do seu m\u00e9todo de implementa\u00e7\u00e3o acima).<\/p>\n<p>Eu posso cobrir isso em um post de acompanhamento, no entanto.<\/p>\n<h2>Uma palavra de cautela<\/h2>\n<p>Aqui est\u00e1 uma coisa a ser lembrada: n\u00e3o \u00e9 uma boa ideia <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/nao-polua-a-tabela-de-opcoes-do-wordpress\/\" title=\"poluir a tabela de op\u00e7\u00f5es do WordPress\">poluir a tabela de op\u00e7\u00f5es do WordPress<\/a>. E \u00e9 precisamente aqui que os transientes s\u00e3o armazenados.<\/p>\n<p>Portanto, se voc\u00ea for usar transientes do WordPress, certifique-se de n\u00e3o lan\u00e7ar uma tonelada de valores no banco de dados.<\/p>\n<p>Apenas o que \u00e9 necess\u00e1rio. E se muitos dados forem necess\u00e1rios, talvez voc\u00ea precise examinar a arquitetura do seu c\u00f3digo ou considerar outro tipo de banco de dados.<\/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>Para simular cookies e seu recurso de expira\u00e7\u00e3o, usar transientes do WordPress pode ser uma solu\u00e7\u00e3o vi\u00e1vel.<\/p>\n","protected":false},"author":1,"featured_media":237021,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,722,806,846,867],"tags":[1170],"class_list":["post-231669","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-php-8","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231669","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=231669"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231669\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/237021"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231669"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231669"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231669"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}