{"id":496,"date":"2017-06-25T14:31:53","date_gmt":"2017-06-25T12:31:53","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=496"},"modified":"2017-06-25T14:31:53","modified_gmt":"2017-06-25T12:31:53","slug":"wahrscheinlich-guckt-wieder-kein-schwein-scheduled-eventsschen-eigen-scheduled-events","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2017\/06\/25\/wahrscheinlich-guckt-wieder-kein-schwein-scheduled-eventsschen-eigen-scheduled-events\/","title":{"rendered":"Wahrscheinlich guckt wieder kein Schwein: Scheduled events"},"content":{"rendered":"<h2>Was ist ein Scheduled Event?<\/h2>\n<p>Das ist im Prinzip so etwas wie ein Cron-Job, und hier h\u00f6re ich alle alten Programmierer &#8222;Aha!&#8220; rufen. Jeder kennt die M\u00f6glichkeit, in Unix\/Linux zeitlich wiederkehrende Aufgaben per Cron-Job zu steuern. WordPress bietet mit den Scheduled events eine \u00e4hnliche zeitabh\u00e4ngige Funktionssteuerung, und das ist prinzipiell eine schicke Sache, aber es gilt ein paar Eigenheiten zu beachten. Man kann schon festlegen, zu welcher Uhrzeit eine Funktion ausgef\u00fchrt werden soll, ob sie t\u00e4glich oder zweimal am Tag oder w\u00f6chentlich ausgef\u00fchrt werden soll und all sowas, aaaber&#8230;<\/p>\n<h2>Wahrscheinlich guckt wieder kein Schwein<\/h2>\n<p>Ein WordPress Scheduled event wird erst ausgef\u00fchrt, wenn die Blogseite auch aufgerufen wird. Dann guckt WordPress nach, ob es Events gibt, <strong>deren festgelegte Uhrzeit bereits abgelaufen<\/strong> <strong>ist<\/strong>, und erst jetzt wird die geplante Aktion gegebenfalls ausgef\u00fchrt. Hei\u00dft im Klartext: wenn kein Besucher auf die Webseite kommt, wird auch kein Event ausgef\u00fchrt. Nein, ich ver\u00e4ppel euch nicht, das ist so. Schlimmstenfalls wird der Event erst genau dann ausgef\u00fchrt, wenn man selber mal auf seine Webseite geht um zu gucken ob schon was passiert ist. Das ist nat\u00fcrlich datenverarbeitungstechnisch Bockmist, weil es dem reinen Zufall \u00fcberlassen ist, wann die gew\u00fcnschte Funktion nun tats\u00e4chlich ausgef\u00fchrt wird.<\/p>\n<h2>Und, ist das so schlimm?<\/h2>\n<p>Das kommt darauf an. Wenn ich \u00fcber einen Scheduled Event einen gr\u00f6\u00dferen Datenbankabgleich mit richtig vielen Datens\u00e4tzen fahren will, h\u00e4tte ich schon gern dass der wie geplant Nachts um 2:00 \u00fcber die B\u00fchne geht und nicht erst Morgens wenn der erste Besucher auf meiner Webseite hereinschneit. Wenn ich zu bestimmten Zeiten E-Mails mit Informationen \u00fcber &#8222;Neues zum Tage&#8220; an meine Abonennten verschicken m\u00f6chte, sollen die schon zu einer bestimmten Tageszeit abgesetzt werden und nicht erst Stunden sp\u00e4ter. Das mal nur so als Beispiele.<\/p>\n<p>Wir wollen mal nicht so kleinlich sein, in den meisten F\u00e4llen wird es nicht so gravierend sein, wenn eine geplante Funktion statt um 0:00 erst um 6:27 beim ersten Besucher der Webseite getriggert wird. Man muss es halt wissen, und sich genau \u00fcberlegen ob es im Einzelfall etwas ausmacht, da\u00df ein geplanter Event erst &#8222;irgendwann&#8220; stattfinden wird, und nicht genau zur geplanten Zeit.<\/p>\n<h2>Wie plane ich einen Scheduled Event?<\/h2>\n<p>Daf\u00fcr verweise ich auf <a href=\"https:\/\/www.sitepoint.com\/wordpress-scheduling\/\">diesen ausgezeichneten Artikel bei sitepoint<\/a>, da steht alles in komprimierter, bestens verst\u00e4ndlicher Form drin. Ich renne hier nur mal im Schnellgang durch.<\/p>\n<p>Zuerst definieren wir die Funktion, die ausgef\u00fchrt werden soll,<\/p>\n<pre class=\"programlisting\">function mein_event(){  \/\/ Mach irgendwas.}<\/pre>\n<p>Wir verkn\u00fcpfen die Funktion mit einem neuen Action hook:<\/p>\n<pre class=\"programlisting\">add_action('mein_action_hook','mein_event');<\/pre>\n<p>Schlie\u00dflich setzen wir die Parameter f\u00fcr den Event, dabei nutzen wir die PHP-Funktion time(), die den UNIX-Timestamp f\u00fcr &#8222;jetzt&#8220; zur\u00fcckgibt:<\/p>\n<pre class=\"programlisting\">wp_schedule_event(time(), 'hourly', 'mein_action_hook');\r\n\r\n<\/pre>\n<p>Das alles kommt in die functions.php unseres Child-Themes, und sollte daf\u00fcr sorgen, dass unsere Funktion ab sofort st\u00fcndlich ausgef\u00fchrt wird&#8230; jedenfalls so ungef\u00e4hr, wann halt der n\u00e4chste Besucher hereinschneit. Also ehrlich, mir str\u00e4uben sich da s\u00e4mtliche Nackenhaare, aber anders kann es WordPress halt nicht. Da d\u00fcrfen sich die Entwickler aber schon nochmal was einfallen lassen!<\/p>\n<h2>Workaround und Helferlein<\/h2>\n<p>Ja, ich habs geh\u00f6rt, die alten Programmierer habens alle schon eingeworfen: dann basteln wir uns halt einen Cron-Job, der unsere WordPress-Seite automatisch aufruft, sagen wir mal eine Minute nachdem der Scheduled Event f\u00e4llig war. Wie das geht steht z.B. <a href=\"https:\/\/www.sebastian-widmann.de\/url-per-cronjob-aufrufen\/\">hier bei Sebastian Widmann<\/a> , aber das f\u00fchrt mir jetzt endg\u00fcltig zu weit, das kann sich jeder der m\u00f6chte selber zusammenpfriemeln.<\/p>\n<p>Wenn man unbedingt mit Wordpess Scheduled events arbeiten will, kommt man an einem sehr ausgefeilten und n\u00fctzlichen Plugin kaum vorbei:<br \/>\n<a href=\"https:\/\/de.wordpress.org\/plugins\/wp-crontrol\/\">WP Crontrol<\/a> bietet eine komfortable Benutzeroberfl\u00e4che zur Steuerung von Events und Schedules und macht einem das Leben hier deutlich leichter. \u00c4ndert zwar nix an der grundlegenden Problematik von &#8222;wahrscheinlich guckt wieder kein Schwein&#8220;, aber ist zumindest sehr einleuchtend zu bedienen und hilft einem bei mehreren Scheduled Events wirklich, den \u00dcberblick zu bewahren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was ist ein Scheduled Event? Das ist im Prinzip so etwas wie ein Cron-Job, und hier h\u00f6re ich alle alten Programmierer &#8222;Aha!&#8220; rufen. Jeder kennt die M\u00f6glichkeit, in Unix\/Linux zeitlich wiederkehrende Aufgaben per Cron-Job zu steuern. WordPress bietet mit den Scheduled events eine \u00e4hnliche zeitabh\u00e4ngige Funktionssteuerung, und das ist prinzipiell eine schicke Sache, aber es [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/496"}],"collection":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/comments?post=496"}],"version-history":[{"count":3,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/496\/revisions"}],"predecessor-version":[{"id":499,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/496\/revisions\/499"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=496"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=496"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=496"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}