{"id":229107,"date":"2022-11-12T12:55:00","date_gmt":"2022-11-12T09:55:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229107"},"modified":"2022-11-09T05:33:30","modified_gmt":"2022-11-09T02:33:30","slug":"uppdatering-av-efterfoeljande-haendelser-i-haendelsekalenderinlaegg","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/uppdatering-av-efterfoeljande-haendelser-i-haendelsekalenderinlaegg\/","title":{"rendered":"Uppdatering av efterf\u00f6ljande h\u00e4ndelser i h\u00e4ndelsekalenderinl\u00e4gg"},"content":{"rendered":"\n<p>Det h\u00e4r \u00e4r ett riktigt nyanserat fall men jag t\u00e4nkte att det kan vara v\u00e4rt att f\u00f6rs\u00f6ka generalisera f\u00f6r ett inl\u00e4gg f\u00f6r alla som kanske jobbar med framtida evenemang med Modern Tribe&#8217;s Event Calendar.<\/p>\n<p>S\u00e4g att du st\u00e4ller in n\u00e5gon \u00e5terkommande h\u00e4ndelse och inom evenemangets br\u00f6dtext (eller, mer l\u00e4mpligt, <strong>post_content<\/strong>) vill du s\u00e4ga n\u00e5got i stil med:<\/p>\n<blockquote>\n<p>Det har g\u00e5tt N-\u00e5r sedan [den h\u00e4r h\u00e4ndelsen] intr\u00e4ffade.<\/p>\n<\/blockquote>\n<p>Saken \u00e4r den att varje efterf\u00f6ljande h\u00e4ndelse uppenbarligen kommer att vara ett \u00e5r l\u00e4ngre \u00e4n den f\u00f6re den. S\u00e5 du kan inte n\u00f6dv\u00e4ndigtvis h\u00e5rdkoda v\u00e4rdet i h\u00e4ndelserna utan att det placeras i postinneh\u00e5llet f\u00f6r varje h\u00e4ndelse.<\/p>\n<p>S\u00e5 vad \u00e4r ett s\u00e4tt att tackla detta?<\/p>\n<h2>Uppdatering av efterf\u00f6ljande h\u00e4ndelser<\/h2>\n<p>Som med de flesta saker kommer detta att bero p\u00e5 hur din kodbas \u00e4r inst\u00e4lld, men om du antar att du arbetar med serieh\u00e4ndelser \u00e4r det inte s\u00e5 illa.<\/p>\n<p>F\u00f6r det h\u00e4r inl\u00e4gget utg\u00e5r jag fr\u00e5n:<\/p>\n<ol>\n<li>du har evenemang inr\u00e4ttade p\u00e5 ett s\u00e5dant s\u00e4tt att du har den f\u00f6rsta h\u00e4ndelsen i en serie, och sedan har du efterf\u00f6ljande h\u00e4ndelser),<\/li>\n<li>du \u00e4r bekv\u00e4m med att k\u00f6ra grundl\u00e4ggande fr\u00e5gor med <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$wpdb<\/a> ,<\/li>\n<li>du \u00e4r bekv\u00e4m med grundl\u00e4ggande regulj\u00e4ra uttryck,<\/li>\n<li>du \u00e4r bekant med <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>Den allm\u00e4nna processen genom vilken du kan uppdatera varje h\u00e4ndelse f\u00f6r att \u00e5terspegla r\u00e4tt antal \u00e5r inom dess <strong>post_content<\/strong> kommer att se ut s\u00e5 h\u00e4r:<\/p>\n<ol>\n<li>genom att anv\u00e4nda den f\u00f6rsta h\u00e4ndelsen i serien, hitta alla efterf\u00f6ljande inl\u00e4gg,<\/li>\n<li>hitta numret i <strong>post_content<\/strong> och \u00f6ka det med ett,<\/li>\n<li>uppdatera inl\u00e4gget.<\/li>\n<\/ol>\n<p>Ganska okomplicerat, eller hur? S\u00e5 h\u00e4r g\u00f6r du.<\/p>\n<h3>1 Hitta efterf\u00f6ljande h\u00e4ndelser<\/h3>\n<p>F\u00f6r att uppdatera efterf\u00f6ljande h\u00e4ndelser \u00e4r det viktigt att ha ID f\u00f6r huvudevenemanget. Detta \u00e4r vanligtvis l\u00e4tt att f\u00e5 tag p\u00e5 om du redan har skapat h\u00e4ndelsen programmatiskt eftersom <a href=\"https:\/\/theeventscalendar.com\/function\/tribe_create_event\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tribe_create_event<\/a> returnerar post-ID:t.<\/p>\n<p>Annars kan du g\u00f6ra n\u00e5got som att hitta ett inl\u00e4gg efter dess titel eller n\u00e5got liknande. Och n\u00e4r du v\u00e4l har det inl\u00e4gget kan du h\u00e4mta dess ID.<\/p>\n<p>N\u00e4r du \u00e4r klar skriver du en snabbfr\u00e5ga f\u00f6r att h\u00e4mta alla inl\u00e4gg med det ursprungliga inl\u00e4ggs-ID :t <a href=\"https:\/\/gist.github.com\/tommcfarlin\/db581f4871687c7a11c514a47aa6f618#file-00-find-all-events-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">som dess f\u00f6r\u00e4lder<\/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>Uppenbarligen f\u00f6redrar jag att s\u00e4tta detta i dess funktion s\u00e5 att jag kan kalla det flera st\u00e4llen i programmet, fels\u00f6ka det efter behov och isolera dess ansvar.<\/p>\n<p>Du kanske vill returnera resultaten som en samling objekt eller l\u00e4gga till fler kvalificerare i fr\u00e5gan f\u00f6r att begr\u00e4nsa typen av resultat som returneras. Oavsett vilket, det viktigaste med den h\u00e4r koden \u00e4r att du tar tag i <strong>ID<\/strong> :n och <strong>post_content<\/strong> f\u00f6r alla efterf\u00f6ljande inl\u00e4gg i en serie baserat p\u00e5 ID:t f\u00f6r den f\u00f6rsta h\u00e4ndelsen.<\/p>\n<h3>2 Uppdatera inl\u00e4ggets inneh\u00e5ll<\/h3>\n<p>N\u00e4r h\u00e4ndelserna har returnerats kan en loop st\u00e4llas in f\u00f6r att iterera genom dem. Beroende p\u00e5 hur du definierar slingan avg\u00f6r hur du st\u00e4ller in en r\u00e4knare, men ett av de mest grundl\u00e4ggande s\u00e4tten att g\u00f6ra detta \u00e4r att:<\/p>\n<ol>\n<li>definiera ett v\u00e4rde, som b\u00f6rjar med ett, som du kan l\u00e4gga till och \u00f6ka under varje iteration,<\/li>\n<li>l\u00e4gg till detta till siffran som finns i inl\u00e4gget.<\/li>\n<\/ol>\n<p>S\u00e5 om du skulle anv\u00e4nda en <strong>foreach<\/strong> loop, kan koden se ut ungef\u00e4r <a href=\"https:\/\/gist.github.com\/tommcfarlin\/db581f4871687c7a11c514a47aa6f618#file-01-update-future-events-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e5 h\u00e4r<\/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>Detta kommer att bli lite mer komplicerat om du har flera siffror i br\u00f6dtexten i ditt inl\u00e4gg, men detta r\u00e4cker f\u00f6r att ge en id\u00e9 om hur man arbetar med minst en (som i exemplet \u00f6verst i inl\u00e4gget).<\/p>\n<h3>3 Uppdatera inl\u00e4gget<\/h3>\n<p>Slutligen, n\u00e4r <strong>post_content<\/strong> har uppdaterats, \u00e4r det en fr\u00e5ga om att egentligen bara ringa ett WordPress-API f\u00f6r att uppdatera inl\u00e4ggets inneh\u00e5ll.<\/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>Naturligtvis, som n\u00e4mnts i hela inl\u00e4gget, kan din kod se annorlunda ut, prestandaaspekterna av detta kan vara annorlunda eller kr\u00e4va n\u00e5gra andra \u00f6verv\u00e4ganden (som jag kommer att t\u00e4cka ett \u00f6gonblick).<\/p>\n<p>Men om inte annat \u00e4r detta \u00e5tminstone en utg\u00e5ngspunkt.<\/p>\n<h2>Andra \u00f6verv\u00e4ganden<\/h2>\n<p>Det kan finnas tillf\u00e4llen d\u00e5 inl\u00e4ggets inneh\u00e5ll inneh\u00e5ller flera nummer, eller det kan finnas tillf\u00e4llen d\u00e5 det kan finnas tusentals efterf\u00f6ljande h\u00e4ndelser. I vart och ett av dessa fall kanske ovanst\u00e5ende tillv\u00e4gag\u00e5ngss\u00e4tt inte passar r\u00e4kningen.<\/p>\n<p>Det vill s\u00e4ga, du kan fortfarande f\u00f6lja dessa steg, men de kanske inte \u00e4r de mest presterande som skrivits. I s\u00e5 fall kan du beh\u00f6va st\u00e4lla in en batchprocess f\u00f6r att hantera det eller g\u00f6ra det under lediga timmar med hj\u00e4lp av ett cron-jobb, eller ett av flera andra s\u00e4tt att ta itu med problemet.<\/p>\n<p>De ovann\u00e4mnda tillv\u00e4gag\u00e5ngss\u00e4tten ligger utanf\u00f6r ramen f\u00f6r detta inl\u00e4gg, men trestegsmetoden f\u00f6rblir densamma. Det handlar mer om dela-och-h\u00e4rska f\u00f6r att ta itu med problemet \u00e4n hur det g\u00f6rs.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>H\u00e4r \u00e4r en utg\u00e5ngspunkt f\u00f6r hur du uppdaterar efterf\u00f6ljande h\u00e4ndelser som skapas av Event Calendar med hj\u00e4lp av databasfr\u00e5gor och inbyggda WordPress API:er.<\/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":[1022,901,724,868],"tags":[1173],"class_list":["post-229107","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-anvandbara-webbplatser","category-koda","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229107","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=229107"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229107\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/165867"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=229107"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=229107"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=229107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}