{"id":229219,"date":"2022-10-27T16:04:00","date_gmt":"2022-10-27T13:04:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229219"},"modified":"2022-11-09T06:01:14","modified_gmt":"2022-11-09T03:01:14","slug":"criar-eventos-recorrentes-programaticamente-com-o-calendario-de-eventos","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/criar-eventos-recorrentes-programaticamente-com-o-calendario-de-eventos\/","title":{"rendered":"Criar eventos recorrentes programaticamente com o calend\u00e1rio de eventos"},"content":{"rendered":"\n<p>O Calend\u00e1rio de Eventos da Tribo Moderna \u00e9 provavelmente o plugin de calend\u00e1rio mais popular dispon\u00edvel para WordPress. Eu falei sobre <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/consultando-tipos-de-postagem-de-evento-com-wp-query-e-o-calendario-de-eventos\/\" title=\"consultar eventos usando WP_Query\" >consultar eventos usando WP_Query<\/a> em um post anterior, mas isso se aplica \u00e0s vers\u00f5es <a href=\"https:\/\/wordpress.org\/plugins-wp\/the-events-calendar\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">gratuita<\/a> e <a href=\"https:\/\/theeventscalendar.com\/product\/wordpress-events-calendar-pro\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">premium<\/a>.<\/p>\n<p>A vers\u00e3o premium oferece muitos recursos excelentes, mas se voc\u00ea deseja manipular programaticamente o calend\u00e1rio, \u00e9 um pouco mais dif\u00edcil trabalhar com ele.<\/p>\n<ul>\n<li>n\u00e3o h\u00e1 documenta\u00e7\u00e3o clara sobre como tirar proveito de certos recursos da perspectiva de um desenvolvedor<\/li>\n<li>os lugares onde as pessoas perguntaram como faz\u00ea-lo ocasionalmente <a href=\"https:\/\/theeventscalendar.com\/support\/forums\/topic\/creating-recurring-events-programmatically\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">deixam algo a desejar<\/a>.<\/li>\n<\/ul>\n<p>Caso em quest\u00e3o: quando precisamos criar eventos recorrentes programaticamente.<\/p>\n<p>Para ser justo, acho que o plugin \u00e9 para usu\u00e1rios versus desenvolvedores e, portanto, fornecer documenta\u00e7\u00e3o sobre como aproveitar algum aspecto de seu c\u00f3digo interno n\u00e3o \u00e9 uma obriga\u00e7\u00e3o da parte deles.<\/p>\n<p>Em segundo lugar, \u00e9 de c\u00f3digo aberto. Portanto, para aqueles de n\u00f3s que precisam invocar alguns de seus c\u00f3digos, t\u00eam tempo e um depurador \u00e0 m\u00e3o, n\u00e3o \u00e9 muito dif\u00edcil sentar e ver como funciona.<\/p>\n<p>A vantagem do c\u00f3digo aberto, certo?<\/p>\n<p>Com isso dito, a maneira de criar eventos recorrentes programaticamente com o Calend\u00e1rio de Eventos exige que usemos a <code>Tribe__Events__Pro__Recurrence__Meta<\/code>classe.<\/p>\n<p>Isso pressup\u00f5e que voc\u00ea esteja usando a vers\u00e3o mais recente do plug-in (como no momento desta postagem) e que esteja familiarizado com o mecanismo de enfileiramento integrado ao plug-in. Eu vou cobrir isso mais depois do c\u00f3digo abaixo.<\/p>\n<p>Para criar um evento recorrente, as coisas mais b\u00e1sicas que voc\u00ea precisa s\u00e3o:<\/p>\n<ul>\n<li>o tipo de evento recorrente,<\/li>\n<li>como vai acabar,<\/li>\n<li>a data de in\u00edcio,<\/li>\n<li>a data de t\u00e9rmino.<\/li>\n<\/ul>\n<p>O resto pode ser uma s\u00e9rie de valores padr\u00e3o. Ent\u00e3o \u00e9 uma quest\u00e3o de pegar uma inst\u00e2ncia de uma classe, definir os valores e chamar um m\u00e9todo.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/37ba58ce84b174de8d314c5f53a2aa02\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Por exemplo<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ First, create the main event. `$event` is defined prior to this call.\n$event_id = tribe_create_event( $event );\n\n\/\/ Set the arguments for the recurring event.\n$data = array(\n    'recurrence' =&gt; array(\n        'rules' =&gt; array(\n            array(\n                'type'                  =&gt; 'Every Year',\n                'end-type'              =&gt; 'Never',\n                'end'                   =&gt; '',\n                'end-count'             =&gt; '',\n                'EventStartDate'        =&gt; $start_date,\n                'EventEndDate'          =&gt; $end_date,\n                'custom'                =&gt; array(),\n                'occurrence-count-text' =&gt; 'events',\n            ),\n        ),\n    ),\n);\n\n\/\/ Instantiate and set it in motion.\n$recurrence_meta  = new Tribe__Events__Pro__Recurrence__Meta();\n$recurrence_meta-&gt;updateRecurrenceMeta( $event_id, $data );<\/code><\/pre>\n<p>Observe que o primeiro par\u00e2metro da <code>updateRecurrenceMeta<\/code>fun\u00e7\u00e3o pressup\u00f5e que voc\u00ea tenha o ID de um evento (que \u00e9 recuperado quando voc\u00ea cria um evento pela primeira vez).<\/p>\n<p>Em segundo lugar, dependendo do n\u00famero de eventos em que voc\u00ea est\u00e1 trabalhando, pode levar alguns minutos para que todos sejam criados no banco de dados. Isso ocorre devido \u00e0 maneira como o plug-in enfileira uma s\u00e9rie de eventos.<\/p>\n<p>Em vez de cri\u00e1-los todos de uma vez, ele serializar\u00e1 os eventos e os criar\u00e1 em lotes. Esta \u00e9 uma maneira inteligente de lidar com isso. E se voc\u00ea deseja aproveit\u00e1-lo programaticamente, essa \u00e9 uma maneira de obter toda essa funcionalidade gratuitamente.<\/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>O Calend\u00e1rio de Eventos da Tribo Moderna tem \u00f3timos recursos, mas se voc\u00ea deseja criar eventos recorrentes programaticamente, d\u00e1 um pouco de trabalho.<\/p>\n","protected":false},"author":1,"featured_media":223763,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,920,816,867],"tags":[1170],"class_list":["post-229219","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-outro","category-plug-ins","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229219","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=229219"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/229219\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/223763"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=229219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=229219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=229219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}