{"id":229862,"date":"2022-11-12T12:30:00","date_gmt":"2022-11-12T09:30:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229862"},"modified":"2022-11-09T16:42:50","modified_gmt":"2022-11-09T13:42:50","slug":"myoehempien-tapahtumien-paeivittaeminen-tapahtumakalenterin-viesteissae","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/myoehempien-tapahtumien-paeivittaeminen-tapahtumakalenterin-viesteissae\/","title":{"rendered":"My\u00f6hempien tapahtumien p\u00e4ivitt\u00e4minen tapahtumakalenterin viesteiss\u00e4"},"content":{"rendered":"\n<p>T\u00e4m\u00e4 on todella vivahteikas tapaus, mutta ajattelin, ett\u00e4 voisi olla syyt\u00e4 yritt\u00e4\u00e4 yleist\u00e4\u00e4 postausta varten kaikille, jotka saattavat ty\u00f6skennell\u00e4 tulevien tapahtumien parissa Modern Triben tapahtumakalenterin avulla.<\/p>\n<p>Oletetaan, ett\u00e4 m\u00e4\u00e4rit\u00e4t jotain toistuvaa tapahtumaa ja haluat tapahtuman tekstiosassa (tai sopivammin <strong>post_content -kohdassa<\/strong>) sanoa jotain seuraavanlaista:<\/p>\n<blockquote>\n<p>On kulunut N vuotta [t\u00e4m\u00e4n tapahtuman] tapahtumisesta.<\/p>\n<\/blockquote>\n<p>Asia on, ett\u00e4 jokainen my\u00f6hempi tapahtuma on ilmeisesti vuoden pitempi kuin sit\u00e4 edelt\u00e4v\u00e4 tapahtuma. Joten et v\u00e4ltt\u00e4m\u00e4tt\u00e4 voi koodata arvoa tapahtumiin ilman, ett\u00e4 se sijoitetaan jokaisen tapahtuman julkaisusis\u00e4lt\u00f6\u00f6n.<\/p>\n<p>Joten mik\u00e4 on yksi tapa ratkaista t\u00e4m\u00e4?<\/p>\n<h2>My\u00f6hempien tapahtumien p\u00e4ivitt\u00e4minen<\/h2>\n<p>Kuten useimmat asiat, t\u00e4m\u00e4 riippuu siit\u00e4, kuinka koodikantasi on m\u00e4\u00e4ritetty, mutta olettaen, ett\u00e4 ty\u00f6skentelet sarjatapahtumien parissa, se ei ole huono.<\/p>\n<p>T\u00e4m\u00e4n postauksen osalta oletan:<\/p>\n<ol>\n<li>sinulla on tapahtumat asetettu siten, ett\u00e4 sinulla on sarjan ensimm\u00e4inen tapahtuma ja sitten seuraavat tapahtumat),<\/li>\n<li>voit suorittaa peruskyselyit\u00e4 k\u00e4ytt\u00e4m\u00e4ll\u00e4 <a href=\"https:\/\/codex.wordpress.org\/Class_Reference\/wpdb\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">$wpdb<\/a> :t\u00e4 ,<\/li>\n<li>olet tyytyv\u00e4inen peruss\u00e4\u00e4nn\u00f6llisiin lausekkeisiin,<\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_update_post\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_update_post<\/a> on sinulle tuttu<a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_update_post\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><\/li>\n<\/ol>\n<p>Yleinen prosessi, jolla voit p\u00e4ivitt\u00e4\u00e4 kunkin tapahtuman vastaamaan oikeaa vuosien m\u00e4\u00e4r\u00e4\u00e4 sen <strong>post_content<\/strong> sis\u00e4ll\u00e4, menee suunnilleen n\u00e4in:<\/p>\n<ol>\n<li>k\u00e4ytt\u00e4m\u00e4ll\u00e4 sarjan ensimm\u00e4ist\u00e4 tapahtumaa, etsi kaikki my\u00f6hemm\u00e4t viestit,<\/li>\n<li>etsi numero <strong>post_contentista<\/strong> ja lis\u00e4\u00e4 sit\u00e4 yhdell\u00e4,<\/li>\n<li>p\u00e4ivit\u00e4 viesti.<\/li>\n<\/ol>\n<p>Melko suoraviivaista, eik\u00f6? N\u00e4in se tehd\u00e4\u00e4n.<\/p>\n<h3>1 Etsi seuraavat tapahtumat<\/h3>\n<p>My\u00f6hempien tapahtumien p\u00e4ivitt\u00e4miseksi on t\u00e4rke\u00e4\u00e4, ett\u00e4 sinulla on p\u00e4\u00e4tapahtuman tunnus. T\u00e4m\u00e4 on yleens\u00e4 helppo saada, jos olet jo luonut tapahtuman ohjelmallisesti, koska <a href=\"https:\/\/theeventscalendar.com\/function\/tribe_create_event\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tribe_create_event<\/a> palauttaa viestitunnuksen.<\/p>\n<p>Muussa tapauksessa voit etsi\u00e4 viestin otsikon tai vastaavan perusteella. Ja kun sinulla on viesti, voit napata sen tunnuksen.<\/p>\n<p>Kun olet valmis, kirjoita nopea kysely hakeaksesi kaikki viestit, joiden alkuper\u00e4inen viestitunnus <a href=\"https:\/\/gist.github.com\/tommcfarlin\/db581f4871687c7a11c514a47aa6f618#file-00-find-all-events-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">on yl\u00e4tasonsa<\/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>Ilmeisesti mieluummin asetan t\u00e4m\u00e4n sen toimintoon, jotta voin kutsua sit\u00e4 useisiin paikkoihin koko sovelluksessa, korjata sen tarvittaessa ja erist\u00e4\u00e4 sen vastuun.<\/p>\n<p>Voit halutessasi palauttaa tulokset objektikokoelmana tai lis\u00e4t\u00e4 kyselyyn tarkenteita rajoittaaksesi palautettavien tulosten tyyppi\u00e4. Siit\u00e4 huolimatta t\u00e4m\u00e4n koodin t\u00e4rkein sis\u00e4lt\u00f6 on, ett\u00e4 nappaat kaikkien my\u00f6hempien viestien <strong>tunnukset<\/strong> ja <strong>post_content<\/strong> sarjassa alkuper\u00e4isen tapahtuman tunnuksen perusteella.<\/p>\n<h3>2 P\u00e4ivit\u00e4 viestin sis\u00e4lt\u00f6<\/h3>\n<p>Kun tapahtumat on palautettu, voidaan luoda silmukka iteroimaan niit\u00e4. Riippuen siit\u00e4, miten m\u00e4\u00e4rit\u00e4t silmukan, m\u00e4\u00e4ritt\u00e4\u00e4, kuinka asetat laskurin, mutta yksi yksinkertaisimmista tavoista tehd\u00e4 t\u00e4m\u00e4 on:<\/p>\n<ol>\n<li>m\u00e4\u00e4rit\u00e4 arvo, joka alkaa yhdest\u00e4 ja jonka voit lis\u00e4t\u00e4 ja kasvattaa jokaisen iteraation aikana,<\/li>\n<li>lis\u00e4\u00e4 t\u00e4m\u00e4 viestiss\u00e4 olevaan numeroon.<\/li>\n<\/ol>\n<p>Joten jos k\u00e4yt\u00e4t <strong>foreach<\/strong> -silmukkaa, koodi saattaa n\u00e4ytt\u00e4\u00e4 suunnilleen <a href=\"https:\/\/gist.github.com\/tommcfarlin\/db581f4871687c7a11c514a47aa6f618#file-01-update-future-events-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4<\/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>T\u00e4m\u00e4 on hieman monimutkaisempaa, jos viestisi rungossa on useita numeroita, mutta t\u00e4m\u00e4 riitt\u00e4\u00e4 antamaan k\u00e4sityksen siit\u00e4, kuinka voit ty\u00f6skennell\u00e4 ainakin yhden kanssa (kuten viestin yl\u00e4osassa olevassa esimerkiss\u00e4).<\/p>\n<h3>3 P\u00e4ivit\u00e4 The Post<\/h3>\n<p>Lopuksi, kun <strong>post_content<\/strong> on p\u00e4ivitetty, on todellakin vain kutsuttava WordPress API p\u00e4ivitt\u00e4m\u00e4\u00e4n viestin sis\u00e4lt\u00f6.<\/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>Tietenkin, kuten koko viestiss\u00e4 mainittiin, koodisi voi n\u00e4ytt\u00e4\u00e4 erilaiselta, t\u00e4m\u00e4n suorituskyvyn n\u00e4k\u00f6kohdat voivat olla erilaisia \u200b\u200btai vaatia muita n\u00e4k\u00f6kohtia (jotka k\u00e4sittelen hetken).<\/p>\n<p>Mutta jos ei muuta, t\u00e4m\u00e4 on ainakin l\u00e4ht\u00f6kohta.<\/p>\n<h2>Muut n\u00e4k\u00f6kohdat<\/h2>\n<p>Joskus viestin sis\u00e4lt\u00f6 voi sis\u00e4lt\u00e4\u00e4 useita numeroita, tai joskus voi olla tuhansia my\u00f6hempi\u00e4 tapahtumia. Kaikissa n\u00e4iss\u00e4 tapauksissa yll\u00e4 oleva l\u00e4hestymistapa ei v\u00e4ltt\u00e4m\u00e4tt\u00e4 sovi laskuun.<\/p>\n<p>Eli voit silti noudattaa n\u00e4it\u00e4 vaiheita, mutta ne eiv\u00e4t v\u00e4ltt\u00e4m\u00e4tt\u00e4 ole tehokkaimpia kirjoitetulla tavalla. Siin\u00e4 tapauksessa saatat joutua m\u00e4\u00e4ritt\u00e4m\u00e4\u00e4n er\u00e4prosessin k\u00e4sittelem\u00e4\u00e4n sit\u00e4 tai tekem\u00e4\u00e4n sen vapaa-aikaan k\u00e4ytt\u00e4m\u00e4ll\u00e4 cron-ty\u00f6t\u00e4 tai jotakin muuta tapaa ratkaista ongelma.<\/p>\n<p>Edell\u00e4 mainitut l\u00e4hestymistavat eiv\u00e4t kuulu t\u00e4m\u00e4n viran soveltamisalaan, mutta kolmivaiheinen l\u00e4hestymistapa pysyy samana. Kyse on enemm\u00e4n hajota ja hallitse ongelman ratkaisemisesta kuin siit\u00e4, miten se tehd\u00e4\u00e4n.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>T\u00e4ss\u00e4 on aloituskohta my\u00f6hempien tapahtumakalenterin luomien tapahtumien p\u00e4ivitt\u00e4miseen tietokantakyselyjen ja WordPressin natiivisovellusliittymien avulla.<\/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":[1018,719,895,864],"tags":[1166],"class_list":["post-229862","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hyodyllisia-sivustoja","category-kehittaejae","category-koodi","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229862","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=229862"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/229862\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/165867"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=229862"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=229862"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=229862"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}