{"id":229424,"date":"2022-11-12T12:32:00","date_gmt":"2022-11-12T09:32:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229424"},"modified":"2022-11-09T06:59:18","modified_gmt":"2022-11-09T03:59:18","slug":"actualizacion-de-eventos-subsiguientes-en-publicaciones-del-calendario-de-eventos","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/actualizacion-de-eventos-subsiguientes-en-publicaciones-del-calendario-de-eventos\/","title":{"rendered":"Actualizaci\u00f3n de eventos subsiguientes en publicaciones del calendario de eventos"},"content":{"rendered":"\n<p>Este es un caso realmente matizado, pero pens\u00e9 que podr\u00eda valer la pena tratar de generalizar para una publicaci\u00f3n para cualquier persona que pueda estar trabajando con eventos futuros con el Calendario de eventos de Modern Tribe.<\/p>\n<p>Digamos que est\u00e1 configurando un evento recurrente y dentro del cuerpo del evento (o, m\u00e1s apropiadamente, <strong>post_content<\/strong>) quiere decir algo como:<\/p>\n<blockquote>\n<p>Han pasado N a\u00f1os desde que ocurri\u00f3 [este evento].<\/p>\n<\/blockquote>\n<p>La cuesti\u00f3n es que cada evento subsiguiente obviamente ser\u00e1 un a\u00f1o mayor que el anterior. Por lo tanto, no necesariamente puede codificar el valor en los eventos sin que se coloque en el contenido de la publicaci\u00f3n de cada evento.<\/p>\n<p>Entonces, \u00bfcu\u00e1l es una forma de abordar esto?<\/p>\n<h2>Actualizaci\u00f3n de eventos posteriores<\/h2>\n<p>Como con la mayor\u00eda de las cosas, esto depender\u00e1 de c\u00f3mo est\u00e9 configurado su c\u00f3digo base, pero asumiendo que est\u00e1 trabajando con eventos de series, no es tan malo.<\/p>\n<p>Para esta publicaci\u00f3n, asumo:<\/p>\n<ol>\n<li>tiene eventos configurados de tal manera que tiene el primer evento de una serie y luego tiene eventos posteriores),<\/li>\n<li>te sientes c\u00f3modo ejecutando 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>te sientes c\u00f3modo con las expresiones regulares b\u00e1sicas,<\/li>\n<li>est\u00e1s familiarizado con <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>El proceso general mediante el cual puede actualizar cada evento para reflejar la cantidad adecuada de a\u00f1os dentro de su <strong>post_content<\/strong> ser\u00e1 algo as\u00ed:<\/p>\n<ol>\n<li>utilizando el primer evento de la serie, busque todas las publicaciones posteriores,<\/li>\n<li>localice el n\u00famero en <strong>post_content<\/strong> e increm\u00e9ntelo en uno,<\/li>\n<li>actualice la publicaci\u00f3n.<\/li>\n<\/ol>\n<p>Bastante sencillo, \u00bfverdad? Aqu\u00ed est\u00e1 c\u00f3mo hacerlo.<\/p>\n<h3>1 Buscar eventos posteriores<\/h3>\n<p>Para actualizar eventos posteriores, es importante tener el ID del evento principal. Por lo general, esto es f\u00e1cil de obtener si ya ha creado el evento mediante programaci\u00f3n porque <a href=\"https:\/\/theeventscalendar.com\/function\/tribe_create_event\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tribe_create_event<\/a> devuelve el ID de la publicaci\u00f3n.<\/p>\n<p>De lo contrario, puede hacer algo como encontrar una publicaci\u00f3n por su t\u00edtulo o algo similar. Y una vez que tenga esa publicaci\u00f3n, puede obtener su ID.<\/p>\n<p>Una vez hecho esto, escriba una consulta r\u00e1pida para recuperar todas las publicaciones con el ID de publicaci\u00f3n 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 principal<\/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, prefiero poner esto en su funci\u00f3n para poder llamarlo en varios lugares de la aplicaci\u00f3n, depurarlo seg\u00fan sea necesario y aislar su responsabilidad.<\/p>\n<p>Es posible que desee devolver los resultados como una colecci\u00f3n de objetos o agregar m\u00e1s calificadores a la consulta para limitar el tipo de resultados que se devuelven. De todos modos, la conclusi\u00f3n principal de este c\u00f3digo es que est\u00e1 tomando los <strong>ID<\/strong> y <strong>post_content<\/strong> de todas las publicaciones posteriores en una serie en funci\u00f3n del ID del evento inicial.<\/p>\n<h3>2 Actualizar el contenido de la publicaci\u00f3n<\/h3>\n<p>Una vez que se han devuelto los eventos, se puede configurar un bucle para recorrerlos en iteraci\u00f3n. Dependiendo de c\u00f3mo defina el bucle, determinar\u00e1 c\u00f3mo configurar un contador, pero una de las formas m\u00e1s b\u00e1sicas de hacerlo es:<\/p>\n<ol>\n<li>defina un valor, comenzando en uno, que puede agregar e incrementar durante cada iteraci\u00f3n,<\/li>\n<li>agregue esto al d\u00edgito que se encuentra en la publicaci\u00f3n.<\/li>\n<\/ol>\n<p>Entonces, si tuviera que usar un\u00a0 bucle <strong>foreach<\/strong>, el c\u00f3digo podr\u00eda verse <a href=\"https:\/\/gist.github.com\/tommcfarlin\/db581f4871687c7a11c514a47aa6f618#file-01-update-future-events-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">as\u00ed<\/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>Esto ser\u00e1 un poco m\u00e1s complicado si tiene varios d\u00edgitos en el cuerpo de su publicaci\u00f3n, pero esto es suficiente para dar una idea de c\u00f3mo trabajar con al menos uno (como en el ejemplo en la parte superior de la publicaci\u00f3n).<\/p>\n<h3>3 Actualizar la publicaci\u00f3n<\/h3>\n<p>Finalmente, una vez que se ha actualizado <strong>post_content, se trata de simplemente llamar a una API de WordPress para actualizar el contenido de la publicaci\u00f3n.<\/strong><\/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>Por supuesto, como se menciona a lo largo de la publicaci\u00f3n, su c\u00f3digo puede verse diferente, los aspectos de rendimiento de esto pueden ser diferentes o requerir algunas otras consideraciones (que cubrir\u00e9 moment\u00e1neamente).<\/p>\n<p>Pero, si nada m\u00e1s, esto es al menos un punto de partida.<\/p>\n<h2>Otras Consideraciones<\/h2>\n<p>Puede haber momentos en los que el contenido de la publicaci\u00f3n contenga varios n\u00fameros, o puede haber momentos en los que puede haber miles de eventos posteriores. En cada uno de estos casos, el enfoque anterior puede no ser el adecuado.<\/p>\n<p>Es decir, a\u00fan puede seguir estos pasos, pero es posible que no sean los m\u00e1s eficaces tal como est\u00e1n escritos. En ese caso, es posible que deba configurar un proceso por lotes para manejarlo o hacerlo fuera del horario laboral mediante un trabajo cron, o una de varias otras formas de abordar el problema.<\/p>\n<p>Los enfoques antes mencionados est\u00e1n m\u00e1s all\u00e1 del alcance de esta publicaci\u00f3n, pero el enfoque de tres pasos sigue siendo el mismo. Se trata m\u00e1s de dividir y vencer para abordar el problema que de c\u00f3mo se hace.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aqu\u00ed hay un punto de partida sobre c\u00f3mo actualizar los eventos subsiguientes creados por Event Calendar usando consultas de bases de datos y API nativas de 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":[892,716,1015,861],"tags":[1172],"class_list":["post-229424","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-sitios-utiles","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229424","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=229424"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229424\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/165867"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=229424"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=229424"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=229424"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}