{"id":230100,"date":"2022-11-12T13:03:00","date_gmt":"2022-11-12T10:03:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230100"},"modified":"2022-11-09T20:05:36","modified_gmt":"2022-11-09T17:05:36","slug":"aggiornamento-degli-eventi-successivi-nei-post-del-calendario-degli-eventi","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/aggiornamento-degli-eventi-successivi-nei-post-del-calendario-degli-eventi\/","title":{"rendered":"Aggiornamento degli eventi successivi nei post del calendario degli eventi"},"content":{"rendered":"\n<p>Questo \u00e8 un caso davvero sfumato, ma ho pensato che valesse la pena provare a generalizzare per un post per chiunque possa lavorare con eventi futuri con il Calendario degli eventi di Modern Tribe.<\/p>\n<p>Supponiamo che tu stia impostando un evento ricorrente e all&#8217;interno del corpo dell&#8217;evento (o, pi\u00f9 appropriatamente, <strong>post_content<\/strong>) vuoi dire qualcosa del tipo:<\/p>\n<blockquote>\n<p>Sono passati N-anni da quando [questo evento] si \u00e8 verificato.<\/p>\n<\/blockquote>\n<p>Il fatto \u00e8 che ogni evento successivo sar\u00e0 ovviamente un anno maggiore di quello precedente. Quindi non puoi necessariamente codificare il valore negli eventi senza che venga inserito nel contenuto del post di ogni evento.<\/p>\n<p>Allora, qual \u00e8 un modo per affrontare questo?<\/p>\n<h2>Aggiornamento di eventi successivi<\/h2>\n<p>Come per la maggior parte delle cose, questo dipender\u00e0 da come \u00e8 impostata la tua base di codice, ma supponendo che tu stia lavorando con eventi di serie, non \u00e8 male.<\/p>\n<p>Per questo post presumo:<\/p>\n<ol>\n<li>hai eventi impostati in modo tale da avere il primo evento di una serie e poi gli eventi successivi),<\/li>\n<li>ti senti a tuo agio nell&#8217;eseguire query di base usando <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$wpdb<\/a> ,<\/li>\n<li>sei a tuo agio con le espressioni regolari di base,<\/li>\n<li>hai familiarit\u00e0 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>Il processo generale mediante il quale puoi aggiornare ogni evento per riflettere il numero corretto di anni all&#8217;interno del suo <strong>post_content<\/strong> sar\u00e0 simile a questo:<\/p>\n<ol>\n<li>utilizzando il primo evento della serie, trova tutti i post successivi,<\/li>\n<li>individua il numero nel <strong>post_content<\/strong> e incrementalo di uno,<\/li>\n<li>aggiorna il post.<\/li>\n<\/ol>\n<p>Abbastanza semplice, giusto? Ecco come farlo.<\/p>\n<h3>1 Trova eventi successivi<\/h3>\n<p>Per aggiornare gli eventi successivi, \u00e8 importante avere l&#8217;ID dell&#8217;evento principale. Questo \u00e8 solitamente facile da ottenere se hai gi\u00e0 creato l&#8217;evento a livello di codice perch\u00e9 <a href=\"https:\/\/theeventscalendar.com\/function\/tribe_create_event\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">trib\u00f9_create_event<\/a> restituisce l&#8217;ID del post.<\/p>\n<p>Altrimenti, puoi fare qualcosa come trovare un post in base al titolo o qualcosa di simile. E una volta che hai quel post, puoi prendere il suo ID.<\/p>\n<p>Una volta terminato, scrivi una query rapida per recuperare tutti i post con l&#8217;ID post iniziale <a href=\"https:\/\/gist.github.com\/tommcfarlin\/db581f4871687c7a11c514a47aa6f618#file-00-find-all-events-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">come genitore<\/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>Ovviamente, preferisco inserirlo nella sua funzione in modo da poterlo chiamare pi\u00f9 posti nell&#8217;applicazione, eseguirne il debug secondo necessit\u00e0 e isolarne la responsabilit\u00e0.<\/p>\n<p>Potresti voler restituire i risultati come una raccolta di oggetti o aggiungere pi\u00f9 qualificatori alla query per limitare il tipo di risultati che vengono restituiti. Indipendentemente da ci\u00f2, il principale risultato di questo codice \u00e8 che stai acquisendo gli <strong>ID<\/strong> e\u00a0 i <strong>post_content<\/strong> di tutti i post successivi di una serie in base all&#8217;ID dell&#8217;evento iniziale.<\/p>\n<h3>2 Aggiorna il contenuto del post<\/h3>\n<p>Una volta che gli eventi sono stati restituiti, \u00e8 possibile impostare un ciclo per iterarli. A seconda di come definisci il ciclo, determiner\u00e0 come impostare un contatore, ma uno dei modi pi\u00f9 semplici per farlo \u00e8:<\/p>\n<ol>\n<li>definire un valore, a partire da uno, che puoi aggiungere e incrementare durante ogni iterazione,<\/li>\n<li>aggiungi questo alla cifra trovata nel post.<\/li>\n<\/ol>\n<p>Quindi, se dovessi usare un\u00a0 ciclo <strong>foreach<\/strong>, il codice potrebbe assomigliare <a href=\"https:\/\/gist.github.com\/tommcfarlin\/db581f4871687c7a11c514a47aa6f618#file-01-update-future-events-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">a questo<\/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>Questo sar\u00e0 un po&#8217; pi\u00f9 complicato se hai pi\u00f9 cifre nel corpo del tuo post, ma questo \u00e8 sufficiente per dare l&#8217;idea di come lavorare con almeno uno (come nell&#8217;esempio in cima al post).<\/p>\n<h3>3 Aggiorna il post<\/h3>\n<p>Infine, una volta <strong>che post_content<\/strong> \u00e8 stato aggiornato, si tratta semplicemente di chiamare un&#8217;API di WordPress per aggiornare il contenuto del 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>Ovviamente, come accennato in tutto il post, il tuo codice potrebbe avere un aspetto diverso, gli aspetti relativi alle prestazioni di questo potrebbero essere diversi o richiedere alcune altre considerazioni (che tratter\u00f2 momentaneamente).<\/p>\n<p>Ma, se non altro, questo \u00e8 almeno un punto di partenza.<\/p>\n<h2>altre considerazioni<\/h2>\n<p>Potrebbero esserci momenti in cui il contenuto del post contiene pi\u00f9 numeri o potrebbero esserci migliaia di eventi successivi. In ciascuno di questi casi, l&#8217;approccio di cui sopra potrebbe non adattarsi al conto.<\/p>\n<p>Cio\u00e8, puoi ancora seguire questi passaggi, ma potrebbero non essere i pi\u00f9 performanti come scritti. In tal caso, potrebbe essere necessario impostare un processo batch per gestirlo o eseguirlo durante le ore di riposo utilizzando un lavoro cron o uno dei tanti altri modi per affrontare il problema.<\/p>\n<p>Gli approcci summenzionati esulano dallo scopo di questo post, ma l&#8217;approccio in tre fasi rimane lo stesso. Si tratta pi\u00f9 di dividere e conquistare per affrontare il problema che di come farlo.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ecco un punto di partenza su come aggiornare gli eventi successivi creati da Event Calendar utilizzando query di database e API native di 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":[896,1019,720,865],"tags":[1168],"class_list":["post-230100","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-siti-utili","category-sviluppatore","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230100","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=230100"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230100\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/165867"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=230100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=230100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=230100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}