{"id":229041,"date":"2022-10-23T10:17:00","date_gmt":"2022-10-23T07:17:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229041"},"modified":"2022-11-09T05:18:12","modified_gmt":"2022-11-09T02:18:12","slug":"opcoes-temporarias-no-wordpress-nossa-melhor-opcao","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/opcoes-temporarias-no-wordpress-nossa-melhor-opcao\/","title":{"rendered":"Op\u00e7\u00f5es tempor\u00e1rias no WordPress: nossa melhor op\u00e7\u00e3o?"},"content":{"rendered":"\n<p>Quando se trata de programa\u00e7\u00e3o, a ideia de valores tempor\u00e1rios ou vari\u00e1veis \u200b\u200btempor\u00e1rias ou qualquer forma de armazenar dados temporariamente na mem\u00f3ria n\u00e3o \u00e9 novidade.<\/p>\n<p>Mas ao trabalhar com o WordPress \u2013 que \u00e9 sem estado \u2013 nem sempre temos esse luxo. Ou seja, n\u00e3o \u00e9 simplesmente uma quest\u00e3o de, digamos, jogar algo na <a href=\"https:\/\/php.net\/manual\/en\/features.sessions.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sess\u00e3o<\/a> atual, l\u00ea-lo e remov\u00ea-lo quando terminarmos.<\/p>\n<p>E \u00e9 a\u00ed que tenho pensado cada vez mais na ideia de op\u00e7\u00f5es tempor\u00e1rias, por falta de um termo melhor, \u00e9 claro. Ou seja, sempre que eu precisar armazenar um valor de um \u00fanico carregamento de p\u00e1gina, ou solicita\u00e7\u00e3o, para ler em outro carregamento de p\u00e1gina, ou outra solicita\u00e7\u00e3o, lan\u00e7arei temporariamente o valor na <a href=\"https:\/\/codex.wordpress.org\/Database_Description#Table:_wp_options\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tabela de op\u00e7\u00f5es<\/a>.<\/p>\n<p>Op\u00e7\u00f5es tempor\u00e1rias: um exerc\u00edcio e representa\u00e7\u00e3o via esbo\u00e7o rudimentar<\/p>\n<p>Isso \u00e9 desleixado? Pode ser. Temos muitas outras op\u00e7\u00f5es? Depende de quanto da tecnologia de navegador moderno queremos usar. Esse n\u00e3o \u00e9 o objetivo deste post, no entanto.<\/p>\n<p>O ponto \u00e9 que, devido \u00e0 maneira como o WordPress funciona, eu me pergunto se nossa atual e melhor estrat\u00e9gia para manter os valores tempor\u00e1rios mais amplamente suportados nas instala\u00e7\u00f5es \u00e9 adicionar temporariamente um valor \u00e0 tabela de op\u00e7\u00f5es, l\u00ea-lo e exclu\u00ed-lo assim que for foi recuperado?<\/p>\n<h2>Nossas op\u00e7\u00f5es para op\u00e7\u00f5es tempor\u00e1rias<\/h2>\n<p>Pessoalmente, n\u00e3o tenho uma opini\u00e3o forte sobre se isso \u00e9 uma coisa ruim ou n\u00e3o. Se for a natureza de como funciona a base sobre a qual estou trabalhando em uma solu\u00e7\u00e3o, ent\u00e3o irei com ela.<\/p>\n<p>Ent\u00e3o, primeiro, \u00e9 assim que eu normalmente fa\u00e7o isso no WordPress:<\/p>\n<h3>1 Criando uma op\u00e7\u00e3o tempor\u00e1ria<\/h3>\n<p>Primeiro, configurei uma fun\u00e7\u00e3o que est\u00e1 ligada a <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/update_option\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">update_option<\/a>. Isso permite ver a op\u00e7\u00e3o <a href=\"https:\/\/gist.github.com\/tommcfarlin\/09c436b55f4c5eecc4187d7fc438ea40#file-00-init-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">que est\u00e1 sendo atualizada<\/a>, seu valor antigo e seu novo valor.<\/p>\n<pre><code>&lt;?php\n\npublic function init() {\n\n    add_action(\n        'update_option',\n        array( $this, 'manage_temporary_option' ),\n        10, 3\n    );\n}<\/code><\/pre>\n<p>Na fun\u00e7\u00e3o, posso olhar e ver se uma op\u00e7\u00e3o espec\u00edfica est\u00e1 sendo salva. Se n\u00e3o, ent\u00e3o posso simplesmente ignor\u00e1-lo; caso contr\u00e1rio, posso dar uma olhada e come\u00e7ar a trabalhar com <a href=\"https:\/\/gist.github.com\/tommcfarlin\/09c436b55f4c5eecc4187d7fc438ea40#file-01-manage-temporary-option-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">uma op\u00e7\u00e3o tempor\u00e1ria<\/a>.<\/p>\n<pre><code>&lt;?php\n\npublic function manage_temporary_option( $option_name, $old_value, $new_value) {\n\n    if ('an_irrelevant_option' !== $option_name) {\n        return;\n    }\n\n    $url = 'page-from-which-we-expect-to-come.php';\n    if ($url === $_SERVER['REQUEST_URI']) {\n\n        update_option(\n            'our_temporary_option',\n            $new_value\n        );\n    }\n}\n<\/code><\/pre>\n<p>Mas qual seria a op\u00e7\u00e3o tempor\u00e1ria?<\/p>\n<h3>2 Uma op\u00e7\u00e3o para op\u00e7\u00f5es tempor\u00e1rias<\/h3>\n<p>Digamos que voc\u00ea tenha uma op\u00e7\u00e3o em um plug-in que seja alternada. Talvez exija que o usu\u00e1rio insira algumas informa\u00e7\u00f5es antes de percorrer o restante de um processo.<\/p>\n<p>Caso em quest\u00e3o: digamos que voc\u00ea esteja trabalhando em uma experi\u00eancia de checkout e queira for\u00e7ar os usu\u00e1rios a criar uma conta, mas h\u00e1 uma op\u00e7\u00e3o que permite que os clientes fa\u00e7am checkout sem criar uma conta.<\/p>\n<p>Uma implementa\u00e7\u00e3o que poder\u00edamos usar \u00e9 esta:<\/p>\n<ol>\n<li>Antes que a p\u00e1gina de checkout seja carregada, verifique se o usu\u00e1rio pode efetuar o checkout como convidado.<\/li>\n<li>Em caso afirmativo, armazene o valor original da op\u00e7\u00e3o em uma op\u00e7\u00e3o tempor\u00e1ria.<\/li>\n<li>Altere o valor original para que exija que eles criem uma conta.<\/li>\n<li>Feito o processo de checkout, copie o valor da op\u00e7\u00e3o tempor\u00e1ria para a op\u00e7\u00e3o original.<\/li>\n<li>Exclua a op\u00e7\u00e3o tempor\u00e1ria.<\/li>\n<\/ol>\n<p>\u00c9 semelhante a todo o exerc\u00edcio em C quando voc\u00ea precisa de um ponteiro para <a href=\"http:\/\/www.c4learn.com\/c-programs\/interchanging-values-of-two-variables.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">trocar dois n\u00fameros<\/a> (para quem se lembrar ou para quem fez isso).<\/p>\n<h2>Nossa melhor op\u00e7\u00e3o?<\/h2>\n<p>O processo descrito acima \u00e9 apenas um exemplo e n\u00e3o pretende ser a forma definitiva de manter valores tempor\u00e1rios. Em segundo lugar, o exemplo de checkout n\u00e3o pretende associar esta postagem ao com\u00e9rcio eletr\u00f4nico.<\/p>\n<p>Em vez disso, pretende fornecer um caso de uso concreto para quando armazenar op\u00e7\u00f5es tempor\u00e1rias \u00e9 \u00fatil e como podemos querer faz\u00ea-lo.<\/p>\n<p>Portanto, a pergunta original permanece: Dada a maneira como o WordPress funciona, a falta de sess\u00f5es e sem a garantia de certos recursos do navegador, como localStorage, as op\u00e7\u00f5es tempor\u00e1rias na tabela de op\u00e7\u00f5es s\u00e3o o melhor caminho a seguir?<\/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>Dado como o WordPress funciona, a falta de sess\u00f5es e a falta de recursos do navegador, as op\u00e7\u00f5es tempor\u00e1rias na tabela de op\u00e7\u00f5es s\u00e3o o melhor caminho a seguir?<\/p>\n","protected":false},"author":1,"featured_media":221144,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,753,722,920,816,846,867],"tags":[1170],"class_list":["post-229041","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-codigo-aberto","category-desenvolvedor","category-outro","category-plug-ins","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229041","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=229041"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229041\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/221144"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229041"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229041"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229041"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}