{"id":488,"date":"2017-06-24T17:50:12","date_gmt":"2017-06-24T15:50:12","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=488"},"modified":"2017-06-24T17:59:39","modified_gmt":"2017-06-24T15:59:39","slug":"hooks-jetzt-kommt-action-ins-spiel","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2017\/06\/24\/hooks-jetzt-kommt-action-ins-spiel\/","title":{"rendered":"Hooks &#8211; jetzt kommt Action ins Spiel"},"content":{"rendered":"<h2>Was sind WordPress Hooks?<\/h2>\n<p>Das kann man googlen, und z.B. die netzialisten haben <a href=\"https:\/\/die-netzialisten.de\/allgemein\/was-ist-eigentlich-ein-hook\/\">einen sehr informativen Beitrag<\/a> zu dem Thema geschrieben. Sehr kurz und knapp gesagt, Hooks sind definierte Ankerpunkte im WordPress-Code, an denen man eigene Funktionen einh\u00e4ngen kann. Dabei unterscheidet man zwischen Action Hooks und Filter Hooks, dazu gleich mehr. Eine umfassende Liste aller WordPress Hooks hat Adam R. Brown in seiner <a href=\"http:\/\/adambrown.info\/p\/wp_hooks\">Hook Database<\/a> zusammengetragen. Auch der <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\">Codex zur Plugin API<\/a> bietet umfangreiche Information zum Thema.<\/p>\n<h2>Unterschied zwischen Action und Filter<\/h2>\n<p>Ich zitiere hier mal schlicht und unbefangen den Codex:<\/p>\n<blockquote><p>You can sometimes accomplish the same goal with either an action or a filter. For example, if you want your plugin to change the text of a post, you might add an <strong>action<\/strong> function to <tt>publish_post<\/tt> (so the post is modified as it is saved to the database), or a <strong>filter<\/strong> function to <tt>the_content<\/tt> (so the post is modified as it is displayed in the browser screen)<\/p><\/blockquote>\n<p>Also: wenn man Beitr\u00e4ge gezielt ver\u00e4ndern m\u00f6chte, z.B. eine Copyright-Zeile an jeden ver\u00f6ffentlichten Beitrag anh\u00e4ngen, gibt es (mindestens) zwei Wege zum Ziel. Hier wird empfohlen: entweder man verwendet einen action-Hook auf den Event <em>publish_post<\/em>, der beim Speichern eines Beitrags in der Datenbank die Copyright-Zeile anh\u00e4ngt. Oder man hakt sich mit einem Filter auf <em>the_content<\/em> an den Inhalt des Beitrags ran, und h\u00e4ngt die Copyright-Zeile beim Anzeigen des Beitrags in der Einzelansicht an. So weit so gut &#8211; ich hab mir allerdings einen Wolf gegooglet, um ein funktionierendes Beispiel f\u00fcr den <em>action hook<\/em> zu finden, leider bis jetzt ohne brauchbares Ergebnis. Das mit dem Filter dagegen geht relativ easy:<\/p>\n<h2>Der Filter<\/h2>\n<p>k\u00f6nnte zum Beispiel so aussehen:<\/p>\n<pre>function copyright_nach_post_content($content){\r\nif (is_single()) {\t\r\n\t$content .= '&lt;p&gt;Hier kommt dein Copyright (C) EL 2017<code><\/code> hin &lt;\/p&gt;';\r\n}\r\n\treturn $content;\r\n}\r\nadd_filter( \"the_content\", \"copyright_nach_post_content\" );<\/pre>\n<p>Dieser Code kommt in die functions.php unseres Child-Themes und zieht jedesmal, wenn ein Beitrag aufgerufen wird. Die Abfrage auf <em>if(is_single())<\/em> stellt sicher, dass auch wirklich nur Beitr\u00e4ge in der Einzelansicht betroffen sind.<\/p>\n<h2>Der entsprechende Action-Hook<\/h2>\n<p>war wie oben bereits gesagt nicht aufzufinden. Dann machen wir halt was anderes, wo richtig Action drin ist:<\/p>\n<h2>Wir versenden eine Email, wenn ein neuer Beitrag ver\u00f6ffentlicht wurde<\/h2>\n<p>Dabei stelle ich euch die simple, aber sehr effektive Funktion wp_mail vor. Der Code sieht so aus:<\/p>\n<pre>add_action('publish_post', 'send_emails_on_new_post');\r\n\r\nfunction send_emails_on_new_post($post)\r\n{\r\n\u00a0\u00a0\u00a0 $emails = \"evi.s.leu@gmx.de\"; \r\n\u00a0\u00a0\u00a0 $title = get_the_title($post-&gt;ID);\r\n\u00a0\u00a0\u00a0 $url = get_permalink($post-&gt;ID);\r\n\u00a0\u00a0\u00a0 $message = \"Link zum Beitrag: \\n{$url}\";\r\n\u00a0\r\n\u00a0\u00a0\u00a0 wp_mail($emails, \"Neuer Beitrag! {$title}\", $message); \r\n}\r\n<\/pre>\n<p>Zuerst wird der action-hook auf das Ereignis publish_post gesetzt und mit unserer Funktion verkn\u00fcpft. Diese bekommt als Parameter den <em>$post<\/em> mit, dar\u00fcber k\u00f6nnen wir auf die Attribute des aktuellen Beitrags zugreifen, das tun wir mit der <em>$post-&gt;ID<\/em>. Wir holen uns den Titel und den Permalink und basteln uns daraus eine kleine E-Mail-Nachricht an den oben eingesetzten Empf\u00e4nger.Die Funktion wp_mail braucht ganz minimalistisch wirklich nur 3 Parameter, den Empf\u00e4nger, den Betreff und den Inhalt, und schon fluppts! Der Empf\u00e4nger wird jedesmal benachrichtigt, wenn ein neuer Beitrag ver\u00f6ffentlicht wurde.<\/p>\n<p>Ein \u00fcbersichtlicher Beitrag zur wp_mail-Funktion ist <a href=\"https:\/\/www.ostraining.com\/blog\/wordpress\/wp-mail\/\">hier bei OSTraining<\/a> zu finden, die kompletten Informationen findet ihr nat\u00fcrlich <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_mail\/\">im Codex<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was sind WordPress Hooks? Das kann man googlen, und z.B. die netzialisten haben einen sehr informativen Beitrag zu dem Thema geschrieben. Sehr kurz und knapp gesagt, Hooks sind definierte Ankerpunkte im WordPress-Code, an denen man eigene Funktionen einh\u00e4ngen kann. Dabei unterscheidet man zwischen Action Hooks und Filter Hooks, dazu gleich mehr. Eine umfassende Liste aller [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[23,4,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/488"}],"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=488"}],"version-history":[{"count":6,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/488\/revisions"}],"predecessor-version":[{"id":495,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/488\/revisions\/495"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=488"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=488"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=488"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}