{"id":229749,"date":"2022-11-12T13:03:00","date_gmt":"2022-11-12T10:03:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229749"},"modified":"2022-11-09T16:13:09","modified_gmt":"2022-11-09T13:13:09","slug":"mise-a-jour-des-evenements-ulterieurs-dans-les-publications-du-calendrier-des-evenements","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/mise-a-jour-des-evenements-ulterieurs-dans-les-publications-du-calendrier-des-evenements\/","title":{"rendered":"Mise \u00e0 jour des \u00e9v\u00e9nements ult\u00e9rieurs dans les publications du calendrier des \u00e9v\u00e9nements"},"content":{"rendered":"\n<p>Il s&rsquo;agit d&rsquo;un cas tr\u00e8s nuanc\u00e9, mais j&rsquo;ai pens\u00e9 qu&rsquo;il pourrait \u00eatre utile d&rsquo;essayer de g\u00e9n\u00e9raliser un article pour toute personne susceptible de travailler sur des \u00e9v\u00e9nements futurs avec le calendrier des \u00e9v\u00e9nements de Modern Tribe.<\/p>\n<p>Supposons que vous configuriez un \u00e9v\u00e9nement r\u00e9current et que, dans le corps de l&rsquo;\u00e9v\u00e9nement (ou, plus pr\u00e9cis\u00e9ment, le <strong>post_content<\/strong> ), vous vouliez dire quelque chose comme\u00a0:<\/p>\n<blockquote>\n<p>Cela fait N ans que [cet \u00e9v\u00e9nement] s&rsquo;est produit.<\/p>\n<\/blockquote>\n<p>Le fait est que chaque \u00e9v\u00e9nement ult\u00e9rieur sera \u00e9videmment sup\u00e9rieur d&rsquo;un an \u00e0 celui qui le pr\u00e9c\u00e8de. Vous ne pouvez donc pas n\u00e9cessairement coder en dur la valeur dans les \u00e9v\u00e9nements sans qu&rsquo;elle soit plac\u00e9e dans le contenu de la publication de chaque \u00e9v\u00e9nement.<\/p>\n<p>Alors, quelle est une fa\u00e7on d&rsquo;aborder cela?<\/p>\n<h2>Mise \u00e0 jour des \u00e9v\u00e9nements ult\u00e9rieurs<\/h2>\n<p>Comme pour la plupart des choses, cela d\u00e9pendra de la configuration de votre base de code, mais en supposant que vous travaillez avec des \u00e9v\u00e9nements de s\u00e9rie, ce n&rsquo;est pas trop mal.<\/p>\n<p>Pour ce post, je suppose :<\/p>\n<ol>\n<li>vous avez des \u00e9v\u00e9nements configur\u00e9s de telle mani\u00e8re que vous avez le premier \u00e9v\u00e9nement d&rsquo;une s\u00e9rie, puis vous avez des \u00e9v\u00e9nements suivants),<\/li>\n<li>vous \u00eates \u00e0 l&rsquo;aise pour ex\u00e9cuter des requ\u00eates de base en utilisant <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$wpdb<\/a> ,<\/li>\n<li>vous \u00eates \u00e0 l&rsquo;aise avec les expressions r\u00e9guli\u00e8res de base,<\/li>\n<li>vous connaissez <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>Le processus g\u00e9n\u00e9ral par lequel vous pouvez mettre \u00e0 jour chaque \u00e9v\u00e9nement pour refl\u00e9ter le bon nombre d&rsquo;ann\u00e9es dans son <strong>post_content<\/strong> ressemblera \u00e0 ceci\u00a0:<\/p>\n<ol>\n<li>en utilisant le premier \u00e9v\u00e9nement de la s\u00e9rie, trouver tous les messages suivants,<\/li>\n<li>localisez le num\u00e9ro dans le <strong>post_content<\/strong> et incr\u00e9mentez-le de un,<\/li>\n<li>mettre \u00e0 jour le poste.<\/li>\n<\/ol>\n<p>Assez simple, non? Voici comment proc\u00e9der.<\/p>\n<h3>1 Rechercher des \u00e9v\u00e9nements ult\u00e9rieurs<\/h3>\n<p>Pour mettre \u00e0 jour les \u00e9v\u00e9nements suivants, il est important d&rsquo;avoir l&rsquo;ID de l&rsquo;\u00e9v\u00e9nement principal. Ceci est g\u00e9n\u00e9ralement facile \u00e0 obtenir si vous avez d\u00e9j\u00e0 cr\u00e9\u00e9 l&rsquo;\u00e9v\u00e9nement par programmation, car <a href=\"https:\/\/theeventscalendar.com\/function\/tribe_create_event\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tribe_create_event<\/a> renvoie l&rsquo;ID de publication.<\/p>\n<p>Sinon, vous pouvez faire quelque chose comme rechercher un message par son titre ou quelque chose de similaire. Et une fois que vous avez ce message, vous pouvez r\u00e9cup\u00e9rer son identifiant.<\/p>\n<p>Une fois cela fait, \u00e9crivez une requ\u00eate rapide pour r\u00e9cup\u00e9rer tous les messages avec l&rsquo;ID de message initial <a href=\"https:\/\/gist.github.com\/tommcfarlin\/db581f4871687c7a11c514a47aa6f618#file-00-find-all-events-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">comme parent<\/a>\u00a0:<\/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>\u00c9videmment, je pr\u00e9f\u00e8re mettre cela dans sa fonction afin de pouvoir l&rsquo;appeler \u00e0 plusieurs endroits dans l&rsquo;application, le d\u00e9boguer au besoin et isoler sa responsabilit\u00e9.<\/p>\n<p>Vous souhaiterez peut-\u00eatre renvoyer les r\u00e9sultats sous la forme d&rsquo;une collection d&rsquo;objets ou ajouter d&rsquo;autres qualificatifs \u00e0 la requ\u00eate pour limiter le type de r\u00e9sultats renvoy\u00e9s. Quoi qu&rsquo;il en soit, le principal avantage de ce code est que vous r\u00e9cup\u00e9rez les <strong>ID<\/strong> et <strong>post_content<\/strong> de tous les messages suivants d&rsquo;une s\u00e9rie en fonction de l&rsquo;ID de l&rsquo;\u00e9v\u00e9nement initial.<\/p>\n<h3>2 Mettre \u00e0 jour le contenu de la publication<\/h3>\n<p>Une fois les \u00e9v\u00e9nements renvoy\u00e9s, une boucle peut \u00eatre configur\u00e9e pour les parcourir. La mani\u00e8re dont vous d\u00e9finissez la boucle d\u00e9terminera la mani\u00e8re dont vous configurez un compteur, mais l&rsquo;une des mani\u00e8res les plus \u00e9l\u00e9mentaires de proc\u00e9der consiste \u00e0\u00a0:<\/p>\n<ol>\n<li>d\u00e9finir une valeur, \u00e0 partir de un, que vous pouvez ajouter et incr\u00e9menter \u00e0 chaque it\u00e9ration,<\/li>\n<li>ajoutez ceci au chiffre trouv\u00e9 dans le message.<\/li>\n<\/ol>\n<p>Donc, si vous deviez utiliser une\u00a0 boucle <strong>foreach<\/strong>, le code pourrait ressembler <a href=\"https:\/\/gist.github.com\/tommcfarlin\/db581f4871687c7a11c514a47aa6f618#file-01-update-future-events-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci<\/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>Ce sera un peu plus compliqu\u00e9 si vous avez plusieurs chiffres dans le corps de votre post, mais cela suffit pour donner une id\u00e9e de comment travailler avec au moins un (comme dans l&rsquo;exemple en haut du post).<\/p>\n<h3>3 Mettre \u00e0 jour la publication<\/h3>\n<p>Enfin, une fois le <strong>post_content<\/strong> mis \u00e0 jour, il suffit d&rsquo;appeler une API WordPress pour mettre \u00e0 jour le contenu du 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>Bien s\u00fbr, comme mentionn\u00e9 tout au long de l&rsquo;article, votre code peut sembler diff\u00e9rent, les aspects de performance peuvent \u00eatre diff\u00e9rents ou n\u00e9cessiter d&rsquo;autres consid\u00e9rations (que je couvrirai momentan\u00e9ment).<\/p>\n<p>Mais, si rien d&rsquo;autre, c&rsquo;est au moins un point de d\u00e9part.<\/p>\n<h2>autres consid\u00e9rations<\/h2>\n<p>Il peut y avoir des moments o\u00f9 le contenu de la publication contient plusieurs num\u00e9ros, ou il peut y avoir des moments o\u00f9 il peut y avoir des milliers d&rsquo;\u00e9v\u00e9nements ult\u00e9rieurs. Dans chacun de ces cas, l&rsquo;approche ci-dessus peut ne pas convenir.<\/p>\n<p>Autrement dit, vous pouvez toujours suivre ces \u00e9tapes, mais elles ne sont peut-\u00eatre pas les plus performantes telles qu&rsquo;elles sont \u00e9crites. Dans ce cas, vous devrez peut-\u00eatre configurer un traitement par lots pour le g\u00e9rer ou le faire pendant les heures creuses en utilisant une t\u00e2che cron, ou l&rsquo;une des nombreuses autres fa\u00e7ons de r\u00e9soudre le probl\u00e8me.<\/p>\n<p>Les approches susmentionn\u00e9es sortent du cadre de cet article, mais l&rsquo;approche en trois \u00e9tapes reste la m\u00eame. Il s&rsquo;agit plus de diviser pour r\u00e9gner pour s&rsquo;attaquer au probl\u00e8me que de savoir comment le faire.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voici un point de d\u00e9part pour savoir comment mettre \u00e0 jour les \u00e9v\u00e9nements ult\u00e9rieurs cr\u00e9\u00e9s par Event Calendar \u00e0 l&rsquo;aide de requ\u00eates de base de donn\u00e9es et d&rsquo;API WordPress natives.<\/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":[893,717,1016,862],"tags":[1167],"class_list":["post-229749","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-sites-utiles","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229749","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=229749"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229749\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/165867"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229749"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229749"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229749"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}