{"id":228587,"date":"2022-10-27T15:42:00","date_gmt":"2022-10-27T12:42:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228587"},"modified":"2022-11-09T03:08:37","modified_gmt":"2022-11-09T00:08:37","slug":"programowo-tworz-wydarzenia-cykliczne-za-pomoca-kalendarza-wydarzen","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/programowo-tworz-wydarzenia-cykliczne-za-pomoca-kalendarza-wydarzen\/","title":{"rendered":"Programowo tw\u00f3rz wydarzenia cykliczne za pomoc\u0105 kalendarza wydarze\u0144"},"content":{"rendered":"\n<p>Kalendarz wydarze\u0144 Modern Tribe jest prawdopodobnie najpopularniejsz\u0105 wtyczk\u0105 kalendarza dost\u0119pn\u0105 dla WordPress. M\u00f3wi\u0142em o <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/odpytywanie-typow-postow-o-wydarzeniach-za-pomoca-zapytania-wp-i-kalendarza-wydarzen\/\" title=\"zapytaniach o zdarzenia za pomoc\u0105 WP_Query\" >zapytaniach o zdarzenia za pomoc\u0105 WP_Query<\/a> w poprzednim po\u015bcie, ale dotyczy to zar\u00f3wno wersji <a href=\"https:\/\/wordpress.org\/plugins-wp\/the-events-calendar\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bezp\u0142atnej<\/a>, jak i <a href=\"https:\/\/theeventscalendar.com\/product\/wordpress-events-calendar-pro\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">premium<\/a>.<\/p>\n<p>Wersja premium oferuje wiele wspania\u0142ych funkcji, ale je\u015bli chcesz programowo manipulowa\u0107 kalendarzem, praca z ni\u0105 jest nieco trudniejsza.<\/p>\n<ul>\n<li>nie ma jasnej dokumentacji, jak korzysta\u0107 z niekt\u00f3rych funkcji z perspektywy programisty<\/li>\n<li>miejsca, w kt\u00f3rych ludzie pytali, jak to zrobi\u0107, od czasu do czasu <a href=\"https:\/\/theeventscalendar.com\/support\/forums\/topic\/creating-recurring-events-programmatically\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pozostawiaj\u0105 wiele do \u017cyczenia<\/a>.<\/li>\n<\/ul>\n<p>Przyk\u0142ad: kiedy musimy programowo tworzy\u0107 zdarzenia cykliczne.<\/p>\n<p>Aby by\u0107 uczciwym, my\u015bl\u0119, \u017ce wtyczka jest przeznaczona dla u\u017cytkownik\u00f3w, a nie dla programist\u00f3w, wi\u0119c dostarczanie dokumentacji na temat tego, jak wykorzysta\u0107 niekt\u00f3re aspekty jej wewn\u0119trznego kodu, nie jest z ich strony obowi\u0105zkiem.<\/p>\n<p>Po drugie, to open source. Tak wi\u0119c dla tych z nas, kt\u00f3rzy potrzebuj\u0105 wywo\u0142a\u0107 cz\u0119\u015b\u0107 kodu, maj\u0105 czas i pod r\u0119k\u0105 debugger, nie jest strasznie trudno usi\u0105\u015b\u0107 i zobaczy\u0107, jak to dzia\u0142a.<\/p>\n<p>Zaleta open source, prawda?<\/p>\n<p>Maj\u0105c to na uwadze, spos\u00f3b programowego tworzenia wydarze\u0144 cyklicznych za pomoc\u0105 Kalendarza wydarze\u0144 wymaga u\u017cycia <code>Tribe__Events__Pro__Recurrence__Meta<\/code>klasy.<\/p>\n<p>Zak\u0142ada si\u0119, \u017ce u\u017cywasz najnowszej wersji wtyczki (jak w momencie tego posta) i \u017ce znasz mechanizm kolejkowania wbudowany we wtyczk\u0119. Om\u00f3wi\u0119 to bardziej po kodzie poni\u017cej.<\/p>\n<p>Aby utworzy\u0107 wydarzenie cykliczne, najbardziej podstawowe rzeczy, kt\u00f3rych potrzebujesz, to:<\/p>\n<ul>\n<li>rodzaj wydarzenia cyklicznego,<\/li>\n<li>jak to si\u0119 sko\u0144czy,<\/li>\n<li>data rozpocz\u0119cia,<\/li>\n<li>data zako\u0144czenia.<\/li>\n<\/ul>\n<p>Reszta mo\u017ce by\u0107 seri\u0105 warto\u015bci domy\u015blnych. Nast\u0119pnie jest to kwestia pobrania instancji do klasy, ustawienia warto\u015bci i wywo\u0142ania metody.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/37ba58ce84b174de8d314c5f53a2aa02\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Na przyk\u0142ad<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ First, create the main event. `$event` is defined prior to this call.\n$event_id = tribe_create_event( $event );\n\n\/\/ Set the arguments for the recurring event.\n$data = array(\n    'recurrence' =&gt; array(\n        'rules' =&gt; array(\n            array(\n                'type'                  =&gt; 'Every Year',\n                'end-type'              =&gt; 'Never',\n                'end'                   =&gt; '',\n                'end-count'             =&gt; '',\n                'EventStartDate'        =&gt; $start_date,\n                'EventEndDate'          =&gt; $end_date,\n                'custom'                =&gt; array(),\n                'occurrence-count-text' =&gt; 'events',\n            ),\n        ),\n    ),\n);\n\n\/\/ Instantiate and set it in motion.\n$recurrence_meta  = new Tribe__Events__Pro__Recurrence__Meta();\n$recurrence_meta-&gt;updateRecurrenceMeta( $event_id, $data );<\/code><\/pre>\n<p>Zwr\u00f3\u0107 uwag\u0119, \u017ce pierwszy parametr <code>updateRecurrenceMeta<\/code>funkcji zak\u0142ada, \u017ce \u200b\u200bmasz identyfikator zdarzenia (kt\u00f3ry jest pobierany podczas tworzenia zdarzenia po raz pierwszy).<\/p>\n<p>Po drugie, w zale\u017cno\u015bci od liczby zdarze\u0144, nad kt\u00f3rymi pracujesz, utworzenie wszystkich w bazie danych mo\u017ce zaj\u0105\u0107 kilka minut. Wynika to ze sposobu, w jaki wtyczka kolejkuje seri\u0119 zdarze\u0144.<\/p>\n<p>Zamiast tworzy\u0107 je wszystkie naraz, serializuje zdarzenia, a nast\u0119pnie tworzy je w partiach. To sprytny spos\u00f3b na poradzenie sobie z tym. A je\u015bli chcesz skorzysta\u0107 z tego programowo, jest to spos\u00f3b na uzyskanie wszystkich tych funkcji za darmo.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kalendarz wydarze\u0144 Modern Tribe ma \u015bwietne funkcje, ale je\u015bli chcesz programowo tworzy\u0107 wydarzenia cykliczne, wymaga to troch\u0119 pracy.<\/p>\n","protected":false},"author":1,"featured_media":223763,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[919,897,866,815],"tags":[1169],"class_list":["post-228587","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-inny","category-kod","category-wordpress-7","category-wtyczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228587","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=228587"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/228587\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/223763"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=228587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=228587"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=228587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}