{"id":229852,"date":"2022-11-12T12:42:00","date_gmt":"2022-11-12T09:42:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229852"},"modified":"2022-11-09T16:40:06","modified_gmt":"2022-11-09T13:40:06","slug":"atualizando-eventos-subsequentes-em-postagens-do-calendario-de-eventos","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/atualizando-eventos-subsequentes-em-postagens-do-calendario-de-eventos\/","title":{"rendered":"Atualizando eventos subsequentes em postagens do calend\u00e1rio de eventos"},"content":{"rendered":"\n<p>Este \u00e9 um caso realmente cheio de nuances, mas achei que valeria a pena tentar generalizar para um post para quem pode estar trabalhando com eventos futuros com o Calend\u00e1rio de Eventos da Tribo Moderna.<\/p>\n<p>Digamos que voc\u00ea esteja configurando algum evento recorrente e dentro do corpo do evento (ou, mais apropriadamente, o <strong>post_content<\/strong>) voc\u00ea queira dizer algo como:<\/p>\n<blockquote>\n<p>J\u00e1 se passaram N anos desde que [este evento] ocorreu.<\/p>\n<\/blockquote>\n<p>O fato \u00e9 que cada evento subsequente ser\u00e1 obviamente um ano maior do que o anterior. Portanto, voc\u00ea n\u00e3o pode necessariamente codificar o valor nos eventos sem que ele seja colocado no conte\u00fado do post de cada evento.<\/p>\n<p>Ent\u00e3o, qual \u00e9 uma maneira de lidar com isso?<\/p>\n<h2>Atualizando eventos subsequentes<\/h2>\n<p>Como na maioria das coisas, isso depender\u00e1 de como sua base de c\u00f3digo est\u00e1 configurada, mas supondo que voc\u00ea esteja trabalhando com eventos em s\u00e9rie, n\u00e3o \u00e9 t\u00e3o ruim.<\/p>\n<p>Para este post, estou supondo:<\/p>\n<ol>\n<li>voc\u00ea tem eventos configurados de forma que voc\u00ea tenha o primeiro evento de uma s\u00e9rie e, em seguida, eventos subsequentes),<\/li>\n<li>voc\u00ea se sente confort\u00e1vel executando consultas b\u00e1sicas usando <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$wpdb<\/a> ,<\/li>\n<li>voc\u00ea se sente confort\u00e1vel com express\u00f5es regulares b\u00e1sicas,<\/li>\n<li>voc\u00ea est\u00e1 familiarizado com <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_update_post\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_update_post<\/a><\/li>\n<\/ol>\n<p>O processo geral pelo qual voc\u00ea pode atualizar cada evento para refletir o n\u00famero adequado de anos em seu <strong>post_content<\/strong> ser\u00e1 algo assim:<\/p>\n<ol>\n<li>usando o primeiro evento da s\u00e9rie, encontre todas as postagens subsequentes,<\/li>\n<li>localize o n\u00famero no <strong>post_content<\/strong> e incremente-o em um,<\/li>\n<li>atualize a postagem.<\/li>\n<\/ol>\n<p>Bem direto, certo? Aqui est\u00e1 como faz\u00ea-lo.<\/p>\n<h3>1 Encontre eventos subsequentes<\/h3>\n<p>Para atualizar eventos subsequentes, \u00e9 importante ter o ID do evento principal. Isso geralmente \u00e9 f\u00e1cil de obter se voc\u00ea j\u00e1 criou programaticamente o evento porque <a href=\"https:\/\/theeventscalendar.com\/function\/tribe_create_event\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tribe_create_event<\/a> retorna o ID da postagem.<\/p>\n<p>Caso contr\u00e1rio, voc\u00ea pode fazer algo como encontrar uma postagem pelo t\u00edtulo ou algo semelhante. E uma vez que voc\u00ea tenha esse post, voc\u00ea pode pegar seu ID.<\/p>\n<p>Uma vez feito, escreva uma consulta r\u00e1pida para recuperar todas as postagens com o ID da postagem inicial <a href=\"https:\/\/gist.github.com\/tommcfarlin\/db581f4871687c7a11c514a47aa6f618#file-00-find-all-events-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como pai<\/a> :<\/p>\n<pre><code>&lt;?php\n\nprivate function find_all_events( $event_id) {\n\n  global $wpdb;\n  $events = $wpdb-&gt;get_results(\n    $wpdb-&gt;prepare(\"\n      SELECT ID, post_content\n      FROM   $wpdb-&gt;posts\n      WHERE  post_parent = '%d'\n      AND    post_status = 'publish'\n    \", $event_id),\n    ARRAY_A\n  );\n\n  return $events;\n}<\/code><\/pre>\n<p>Obviamente, prefiro colocar isso em sua fun\u00e7\u00e3o para poder cham\u00e1-lo em v\u00e1rios lugares em todo o aplicativo, depur\u00e1-lo conforme necess\u00e1rio e isolar sua responsabilidade.<\/p>\n<p>Voc\u00ea pode querer retornar os resultados como uma cole\u00e7\u00e3o de objetos ou adicionar mais qualificadores \u00e0 consulta para limitar o tipo de resultados que s\u00e3o retornados. Independentemente disso, a principal conclus\u00e3o desse c\u00f3digo \u00e9 que voc\u00ea est\u00e1 pegando os <strong>IDs<\/strong> e <strong>post_content<\/strong> de todas as postagens subsequentes em uma s\u00e9rie com base no ID do evento inicial.<\/p>\n<h3>2 Atualizar o conte\u00fado da postagem<\/h3>\n<p>Depois que os eventos forem retornados, um loop pode ser configurado para iterar por eles. Dependendo de como voc\u00ea define o loop, determinar\u00e1 como voc\u00ea configura um contador, mas uma das maneiras mais b\u00e1sicas de fazer isso \u00e9:<\/p>\n<ol>\n<li>defina um valor, come\u00e7ando em um, que voc\u00ea pode adicionar e incrementar durante cada itera\u00e7\u00e3o,<\/li>\n<li>adicione isso ao d\u00edgito encontrado no post.<\/li>\n<\/ol>\n<p>Ent\u00e3o, se voc\u00ea usar um\u00a0 loop <strong>foreach<\/strong>, o c\u00f3digo pode ser algo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/db581f4871687c7a11c514a47aa6f618#file-01-update-future-events-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">assim<\/a> :<\/p>\n<pre><code>&lt;?php\n\npublic function update_future_events( $event_id) {\n\n  $events = $this-&gt;find_all_events( $event_id );\n\n  $iteration = 1;\n  foreach ($events as $event) {\n\n    preg_match_all( '\/(d+)\/', $anniversary['post_content'], $matches );\n\n    $original_year = $matches[0];\n    $original_year = intval( $original_year[0] );\n    $new_year      = ($original_year + $iteration );\n    $iteration++;\n\n    \/\/ See forth-coming gist.\n  }\n}<\/code><\/pre>\n<p>Isso ser\u00e1 um pouco mais complicado se voc\u00ea tiver v\u00e1rios d\u00edgitos no corpo do seu post, mas isso \u00e9 suficiente para dar a ideia de como trabalhar com pelo menos um (como no exemplo no topo do post).<\/p>\n<h3>3 Atualize a postagem<\/h3>\n<p>Finalmente, uma vez que o <strong>post_content<\/strong> foi atualizado, \u00e9 uma quest\u00e3o de chamar uma API do WordPress para atualizar o conte\u00fado do post.<\/p>\n<pre><code>&lt;?php\n\npublic function update_future_events( $event_id) {\n\n  $events = $this-&gt;find_all_events( $event_id );\n\n  $iteration = 1;\n  foreach ($events as $event) {\n\n    \/\/ See previous gist.\n\n    $event['post_content'] = str_ireplace( $original_year, $new_year, $event['post_content'] );\n    wp_update_post(array(\n      'ID'           =&gt; $event['ID'],\n      'post_content' =&gt; $event['post_content'],\n    ));\n  }\n}<\/code><\/pre>\n<p>\u00c9 claro que, conforme mencionado ao longo do post, seu c\u00f3digo pode parecer diferente, os aspectos de desempenho disso podem ser diferentes ou exigir algumas outras considera\u00e7\u00f5es (que abordarei momentaneamente).<\/p>\n<p>Mas, se nada mais, este \u00e9 pelo menos um ponto de partida.<\/p>\n<h2>outras considera\u00e7\u00f5es<\/h2>\n<p>Pode haver momentos em que o conte\u00fado da postagem cont\u00e9m v\u00e1rios n\u00fameros, ou pode haver momentos em que pode haver milhares de eventos subsequentes. Em cada um desses casos, a abordagem acima pode n\u00e3o ser adequada.<\/p>\n<p>Ou seja, voc\u00ea ainda pode seguir essas etapas, mas elas podem n\u00e3o ter o melhor desempenho conforme escrito. Nesse caso, pode ser necess\u00e1rio configurar um processo em lote para lidar com isso ou faz\u00ea-lo fora do hor\u00e1rio comercial usando um cron job ou uma das v\u00e1rias outras maneiras de resolver o problema.<\/p>\n<p>As abordagens acima mencionadas est\u00e3o al\u00e9m do escopo deste post, mas a abordagem de tr\u00eas etapas permanece a mesma. \u00c9 mais sobre dividir e conquistar para resolver o problema do que como isso \u00e9 feito.<\/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>Aqui est\u00e1 um ponto de partida sobre como atualizar eventos subsequentes que s\u00e3o criados pelo Calend\u00e1rio de Eventos usando consultas de banco de dados e APIs nativas do WordPress.<\/p>\n","protected":false},"author":1,"featured_media":165867,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,722,1021,867],"tags":[1170],"class_list":["post-229852","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-sites-uteis","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229852","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=229852"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229852\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/165867"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229852"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229852"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}