{"id":35217,"date":"2020-06-10T23:28:33","date_gmt":"2020-06-11T06:28:33","guid":{"rendered":"https:\/\/kinsta.com\/?p=72202"},"modified":"2023-07-27T11:42:12","modified_gmt":"2023-07-27T10:42:12","slug":"wordpress-hooks","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/","title":{"rendered":"Das WordPress Hooks Bootcamp: Wie man Aktionen, Filter und benutzerdefinierte Hooks verwendet"},"content":{"rendered":"<p>WordPress Hooks sind eines der wichtigsten Werkzeuge, die man im <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-entwickler-engagiert\/\" target=\"_blank\" rel=\"noopener noreferrer\">Arsenal eines WordPress Entwicklers<\/a> haben sollte. Sie sind die Grundlage f\u00fcr die Entwicklung von WordPress Plugins und Themes. Du kannst die vielen eingebauten Hooks von WordPress benutzen, um dich mit deinem eigenen Code in den WordPress Core &#8218;einzuklinken&#8216; und etwas zu <strong>tun<\/strong> oder zu <strong>ver\u00e4ndern<\/strong>.<\/p>\n<p>Es gibt zwei Arten von WordPress-Hooks: <strong>Aktionen<\/strong> und <strong>Filter<\/strong>. Hooks sind so weit verbreitet, dass sogar der WordPress Core selbst sie ausgiebig nutzt. WordPress beinhaltet auch eine M\u00f6glichkeit f\u00fcr dich, <strong>deine eigenen Hooks zu definieren<\/strong>, so dass sich andere Entwickler in deinen Code einklinken k\u00f6nnen.<\/p>\n<p>Zu lernen, wie Aktionen, Filter und benutzerdefinierte Hooks funktionieren, ist essentiell, um die Entwicklung von WordPress zu beherrschen.<\/p>\n<p>Die erste H\u00e4lfte dieses Artikels behandelt die Grundlagen der WordPress-Hooks und erkl\u00e4rt anhand mehrerer Beispiele, wie sie funktionieren. In der zweiten H\u00e4lfte lernst du, wie du Hooks benutzen kannst, um WordPress anzupassen, deine eigenen Hooks zu erstellen und sie zu benutzen, um deine eigenen erweiterbaren Plugins zu erstellen.<\/p>\n<p>Klingt aufregend? Lass uns loslegen!<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Was sind WordPress Hooks?<\/h2>\n<p>Eine <a href=\"https:\/\/kinsta.com\/de\/blog\/beitrag-in-wordpress-dupliziert\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress-Seite<\/a> wird durch Tonnen von Funktionen und Datenbankabfragen zusammengestellt. Der WordPress-Kern, Plugins und das Theme arbeiten zusammen, um die Seitenelemente wie Text, <a href=\"https:\/\/kinsta.com\/de\/blog\/jpg-vs-jpeg\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bilder<\/a>, Skripte und Stile auszugeben. Sobald sie vollst\u00e4ndig zusammengesetzt sind, setzt der Browser sie alle zusammen und rendert die Seite.<\/p>\n<p>WordPress Hooks erlauben es dir, dich an bestimmten Punkten in diesen Erstellungsprozess &#8218;einzuklinken&#8216; und deinen eigenen Code auszuf\u00fchren. Die Hauptfunktion von Hooks ist es, dir zu erlauben, WordPress zu ver\u00e4ndern oder Funktionen hinzuzuf\u00fcgen, ohne die <a href=\"https:\/\/kinsta.com\/de\/docs\/support\/umfang-des-supports\/managed-wordpress-support-umfang\/#what-is-wordpress-core\" target=\"_blank\" rel=\"noopener noreferrer\">Kerndateien<\/a> zu ber\u00fchren.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/grundlagen-von-wordpress-hooks.png\" alt=\"Hooks werden dir helfen WordPress mit deinem eigenen Code zu erweitern\" width=\"1100\" height=\"502\"><figcaption class=\"wp-caption-text\">Hooks werden dir helfen WordPress mit deinem eigenen Code zu erweitern<\/figcaption><\/figure>\n<p>Die <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress Plugin API<\/a> steuert die Funktionalit\u00e4t von WordPress Hooks. Du verwendest Hooks, indem du bestimmte WordPress-Funktionen, <strong>Hook-Funktionen<\/strong> genannt, an bestimmten Stellen w\u00e4hrend der WordPress-Laufzeit aufrufst.<\/p>\n<p>Mit Hilfe von Hook-Funktionen kannst du deinen eigenen Code innerhalb einer <strong>Callback-Funktion<\/strong> b\u00fcndeln und ihn mit jedem beliebigen Hook registrieren lassen. Einmal registriert, l\u00e4uft dieser Callback \u00fcberall dort, wo sich der Hook befindet, und erlaubt es dir, die Standard WordPress Funktionen zu erweitern oder zu ersetzen.<\/p>\n<p>Die Position des Hook im Code-Ausf\u00fchrungsprozess ist ein wichtiger Faktor. Mehr \u00fcber seine Bedeutung erf\u00e4hrst du in den kommenden Abschnitten.<\/p>\n\n<h3>Zwei Arten von WordPress Hooks: Aktionen und Filter<\/h3>\n<p>WordPress enth\u00e4lt zwei Arten von Hooks, die <strong>Aktionen<\/strong> und <strong>Filter<\/strong> genannt werden. Mit Aktionen kannst du an bestimmten vordefinierten Punkten in der WordPress Laufzeit etwas <strong>tun<\/strong>, w\u00e4hrend du mit Filtern alle von WordPress verarbeiteten Daten <strong>ver\u00e4ndern<\/strong> und <strong><code>zur\u00fcckgeben<\/code><\/strong> kannst.<\/p>\n<p>Aktionen werden im Code von WordPress definiert als:<\/p>\n<pre><code class=\"language-php\">do_action( 'action_name', [optional_arguments] );<\/code><\/pre>\n<p>Der <strong><code>action_name<\/code><\/strong> string ist der Name der Aktion. Du kannst die <strong><code>[optional_arguments<\/code>]<\/strong> Variable angeben, um zus\u00e4tzliche Argumente an die Callback-Funktion zu \u00fcbergeben. Wenn dieses Feld nicht angegeben wird, dann ist sein Standardwert leer.<\/p>\n<p><strong>Beispiel:<\/strong> Die Aktion <strong><code>do_action( 'wp_head' )<\/code><\/strong> kann eingeh\u00e4ngt werden, um jedes Mal, wenn WordPress den <a href=\"https:\/\/kinsta.com\/de\/blog\/code-wordpress-header-footer-hinzufugt\/\" target=\"_blank\" rel=\"noopener noreferrer\">Header der Webseite<\/a> verarbeitet, eigenen Code auszuf\u00fchren. Diese Aktion hat keine weiteren Argumente.<\/p>\n<p>Filter werden im Code von WordPress definiert als:<\/p>\n<pre><code class=\"language-php\">apply_filters( 'filter_name', 'value_to_be_filtered', [optional_arguments] );<\/code><\/pre>\n<p>Der <strong><code>filter_name<\/code><\/strong> string ist der Name des Filters, die Variable <code><strong>value_to_be_filtered<\/strong><\/code> ist der Wert, der gefiltert und zur\u00fcckgegeben werden muss, und die Variable <code><strong>[optional_arguments]<\/strong><\/code> kann zus\u00e4tzliche Argumente \u00fcbergeben, genau wie bei Aktionen.<\/p>\n<p><strong>Beispiel:<\/strong> Der <strong><code>apply_filters( 'admin_footer_text' , string $text )<\/code><\/strong> Filter kann eingehakt werden, um den in der Fu\u00dfzeile des Administrators angezeigten Text zu ver\u00e4ndern. Ab WordPress 5.4 zeigt sein Standardwert in der Fu\u00dfzeile des Adminbereichs den Satz <em><code>Danke, dass du mit <a href=\"https:\/\/wordpress.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress<\/a> erstellt hast<\/code><\/em>.<\/p>\n<p>Wie du dich in Aktionen und Filter einklinken kannst, erf\u00e4hrst du sp\u00e4ter an vielen Beispielen aus dem WordPress Core.<\/p>\n<p>Sobald du dich eingeklinkt hast, kannst du deinen Code anweisen, etwas auf deiner Webseite zu <strong>tun<\/strong> oder <strong>anzupassen<\/strong>. Zum Beispiel kannst du Hooks verwenden, um nach dem Ver\u00f6ffentlichen eines Beitrags eine <a href=\"https:\/\/kinsta.com\/de\/blog\/best-practices-email-marketing\/#email-marketing-platform\" target=\"_blank\" rel=\"noopener noreferrer\">automatische E-Mail<\/a> zu versenden, oder du kannst <a href=\"https:\/\/kinsta.com\/de\/blog\/child-theme-wordpress-erstellen\/#the-files-in-a-wordpress-child-theme\" target=\"_blank\" rel=\"noopener noreferrer\">benutzerdefinierte Stylesheets<\/a> laden, um das Aussehen deiner Webseite zu ver\u00e4ndern.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/wie-arbeiten-actions-und-filters.png\" alt=\"WordPress Hooks helfen dir, mit deiner Webseite zu interagieren oder sie zu ver\u00e4ndern\" width=\"1100\" height=\"600\"><figcaption class=\"wp-caption-text\">WordPress Hooks helfen dir, mit deiner Webseite zu interagieren oder sie zu ver\u00e4ndern<\/figcaption><\/figure>\n<p>Der einfachste Weg, Hooks zu verstehen, ist, sich vorzustellen, dass deine <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-site-beispiele\/\" target=\"_blank\" rel=\"noopener noreferrer\">Webseite mit WordPress<\/a> ein Haus baut.<\/p>\n<p>Haken sind so \u00e4hnlich wie ein Kran, mit dem man Baugegenst\u00e4nde hin und her bewegt. Die Gegenst\u00e4nde, die \u00fcbertragen werden, sind die <strong>Callback-Funktionen<\/strong>, die deinen <a href=\"https:\/\/kinsta.com\/de\/blog\/bearbeitest-wordpress-code\/\" target=\"_blank\" rel=\"noopener noreferrer\">eigenen Code<\/a> enthalten. Diese Gegenst\u00e4nde (oder Funktionen) k\u00f6nnen dir helfen, das Haus zu bauen oder zu ver\u00e4ndern.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/wp-head-action-beispiel.png\" alt=\"Beispiel f\u00fcr das Einhaken in die 'wp_head'-Aktion in WordPress\" width=\"1100\" height=\"636\"><figcaption class=\"wp-caption-text\">Beispiel f\u00fcr das Einhaken in die &#8218;wp_head&#8216;-Aktion in WordPress<\/figcaption><\/figure>\n<p>Callback-Funktionen k\u00f6nnen regul\u00e4re PHP-Funktionen, standardm\u00e4\u00dfige WordPress-Funktionen oder von dir definierte benutzerdefinierte Funktionen sein.<\/p>\n<p>Wir k\u00f6nnen bestimmte Gegenst\u00e4nde nur auf bestimmten Tr\u00e4gern transportieren, die an bestimmten Haken befestigt sind. So k\u00f6nnen Aktionen nur mit <strong>Aktionsfunktionen<\/strong> eingeh\u00e4ngt werden. Ebenso k\u00f6nnen Filter nur mit <strong>Filterfunktionen<\/strong> eingeh\u00e4ngt werden.<\/p>\n<p>Es ist zwar m\u00fchsam, die Haken und Tr\u00e4ger an einem Kran zu wechseln, aber WordPress macht es super einfach, indem es \u00fcber <a href=\"https:\/\/adambrown.info\/p\/wp_hooks\" target=\"_blank\" rel=\"noopener noreferrer\">2.200 Arten von Standard-Hooks<\/a> enth\u00e4lt.<\/p>\n<figure style=\"width: 900px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/wordpress-native-hooks.png\" alt=\"WordPress 5.1 hat \u00fcber 2200 native Hooks\" width=\"900\" height=\"357\"><figcaption class=\"wp-caption-text\">WordPress 5.1 hat \u00fcber 2200 native Hooks (Quelle: Adam Brown)<\/figcaption><\/figure>\n<p>Du kannst Hooks finden, die \u00fcber den WordPress Core verteilt sind und es dir erm\u00f6glichen, genau die Stelle anzutippen, an der du dich einklinken m\u00f6chtest, um deinen eigenen Code auszuf\u00fchren.<\/p>\n\n<h2>Hooks vs Actionen vs Filter<\/h2>\n<p>Wie im <a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress Plugin Handbuch<\/a> beschrieben:<\/p>\n<blockquote><p>&#8222;Hooks sind eine M\u00f6glichkeit f\u00fcr ein St\u00fcck Code, mit einem anderen St\u00fcck Code zu interagieren\/modifizieren&#8230; Es gibt zwei Arten von Hooks: Aktionen und Filter&#8220;.<\/p><\/blockquote>\n<p>Es gibt eine weit verbreitete Inkonsistenz mit der Art und Weise, wie die Begriffe <strong>Hook<\/strong>, <strong>Aktion<\/strong> und <strong>Filter<\/strong> verwendet werden. Ein paar Tutorials und Anleitungen vermischen sie mit den damit verbundenen Funktionen. Ein Hauptgrund f\u00fcr diese Verwirrung liegt in der komplexen Natur der Funktionsweise von Hooks.<\/p>\n<p>Selbst wenn du genau in den WordPress Core schaust, wirst du feststellen, dass es keinen gro\u00dfen Unterschied zwischen dem Hinzuf\u00fcgen von Aktionen und Filtern gibt. Hier ist der <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/5.4\/src\/wp-includes\/plugin.php#L403\" target=\"_blank\" rel=\"noopener noreferrer\">Quellcode f\u00fcr die add_action()-Funktion<\/a> aus der <strong><code>wp-includes\/plugin.php<\/code><\/strong>-Datei:<\/p>\n<pre><code class=\"language-php\">function add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {\u00a0 \u00a0 \u00a0 \n    return add_filter( $tag, $function_to_add, $priority, $accepted_args );\n}<\/code><\/pre>\n<p>Die add_action()-Funktion ruft einfach die add_filter()-Funktion auf und gibt ihren Wert zur\u00fcck. Warum? Weil beide im Grunde genommen auf die gleiche Weise funktionieren, bis auf einen Unterschied.<\/p>\n<p>Die <strong><code>apply_filters<\/code>()<\/strong>-Funktion gibt einen Wert zur\u00fcck, der bestehende Datentypen ver\u00e4ndern kann, w\u00e4hrend die <strong><code>do_action()<\/code><\/strong>-Funktion nichts zur\u00fcckgibt (<a href=\"https:\/\/www.php.net\/manual\/en\/functions.returning-values.php\" target=\"_blank\" rel=\"noopener noreferrer\">NULL-Wert in PHP<\/a>).<\/p>\n<p>Wenn du immer noch verwirrt bist, mach dir keine Sorgen! Wenn du die erste H\u00e4lfte dieses Artikels durchgelesen hast, wird alles klar sein. Wir werden uns an die offizielle WordPress-Codex-Terminologie halten, da sie klar, pr\u00e4zise und universell ist.<\/p>\n<p>Macht euch vorerst mit der unten gezeigten Hook-Routine vertraut.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/callback-functionen.png\" alt=\"Die Hook-Routine: Hooks, Hook-Funktionen und Callback-Funktionen\" width=\"1100\" height=\"1161\"><figcaption class=\"wp-caption-text\">Die Hook-Routine: Hooks, Hook-Funktionen und Callback-Funktionen<\/figcaption><\/figure>\n<p>Lasst uns die Unterschiede zwischen Aktionen und Hooks aufl\u00f6sen.<\/p>\n<table>\n<tbody>\n<tr>\n<td style=\"text-align: center\" colspan=\"2\"><strong>WordPress Hooks<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center\"><strong>Actionen<\/strong><\/td>\n<td style=\"text-align: center\"><strong>Filter<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Aktionen werden verwendet, um benutzerdefinierte Funktionen an einem bestimmten Punkt w\u00e4hrend der Ausf\u00fchrung von WordPress Core auszuf\u00fchren.<\/td>\n<td>Filter werden verwendet, um Daten zu modifizieren oder anzupassen, die von anderen Funktionen verwendet werden.<\/td>\n<\/tr>\n<tr>\n<td>Actions are defined\/created by the function <code><strong>do_action( 'action_name' )<\/strong><\/code> im Code von WordPress definiert\/erstellt.<\/td>\n<td>Filter werden durch die Funktion <code><strong>apply_filters( 'filter_name', 'value_to_be_filtered' )<\/strong><\/code> im Code von WordPress definiert\/erstellt.<\/td>\n<\/tr>\n<tr>\n<td>Aktionen werden auch <strong>Action-Hooks<\/strong> genannt.<\/td>\n<td>Filter werden auch <strong>Filter-Hooks<\/strong> genannt.<\/td>\n<\/tr>\n<tr>\n<td>Aktionen k\u00f6nnen nur mit Aktionsfunktionen eingeh\u00e4ngt werden. Z.B. <code><strong>add_action()<\/strong><\/code>, <code><strong>remove_action()<\/strong><\/code>.<\/td>\n<td>Filter k\u00f6nnen nur mit Filterfunktionen eingeh\u00e4ngt werden. Z.B <code><strong>add_filter()<\/strong><\/code>, <code><strong>remove_filter()<\/strong><\/code>.<\/td>\n<\/tr>\n<tr>\n<td>Action-Funktionen brauchen keine Argumente an ihre Callback-Funktionen zu \u00fcbergeben.<\/td>\n<td>Filterfunktionen ben\u00f6tigen mindestens ein Argument f\u00fcr ihre Callback-Funktionen.<\/td>\n<\/tr>\n<tr>\n<td>Action-Funktionen brauchen keine Argumente an ihre Callback-Funktionen zu \u00fcbergeben.<\/td>\n<td>Filterfunktionen ben\u00f6tigen mindestens ein Argument f\u00fcr ihre Callback-Funktionen.<\/td>\n<\/tr>\n<tr>\n<td>Aktionsfunktionen sollten nichts <strong><code>zur\u00fcckgeben<\/code><\/strong>. Sie k\u00f6nnen jedoch die Ausgabe <code><strong>echoen<\/strong><\/code> oder mit der Datenbank interagieren.<\/td>\n<td>Filterfunktionen m\u00fcssen ihre \u00c4nderungen als Ausgabe <strong><code>zur\u00fcckgeben<\/code><\/strong>. Selbst wenn eine Filterfunktion nichts \u00e4ndert, muss sie immer noch die unver\u00e4nderte Eingabe <strong><code>zur\u00fcckgeben<\/code><\/strong>.<\/td>\n<\/tr>\n<tr>\n<td>Aktionen k\u00f6nnen fast alles ausf\u00fchren, solange der Code g\u00fcltig ist.<\/td>\n<td>Die Filter sollten isoliert arbeiten, damit sie keine unbeabsichtigten Nebenwirkungen haben.<\/td>\n<\/tr>\n<tr>\n<td><strong>Zusammenfassung:<\/strong> Eine Aktion unterbricht den regul\u00e4ren Code-Ausf\u00fchrungsprozess, um etwas mit den erhaltenen Infos zu machen, gibt aber nichts zur\u00fcck und beendet sich dann.<\/td>\n<td><strong>Zusammenfassung<\/strong>: Ein Filter modifiziert die Informationen, die er erh\u00e4lt, gibt sie an die Calling Hook-Funktion zur\u00fcck, und andere Funktionen k\u00f6nnen den Wert, den er zur\u00fcckgibt, verwenden.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Manchmal kannst du entweder eine Aktion oder einen Filter verwenden, um dasselbe Ziel zu erreichen. Wenn du zum Beispiel den Text in einem Beitrag \u00e4ndern m\u00f6chtest, kannst du eine Callback-Funktion mit der Aktion <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/publish_post\" target=\"_blank\" rel=\"noopener noreferrer\">publish_post<\/a> registrieren und den Inhalt des Beitrags \u00e4ndern, wenn er in der <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-datenbank\/\" target=\"_blank\" rel=\"noopener noreferrer\">Datenbank<\/a> gespeichert wird.<\/p>\n<pre><code class=\"language-php\">\/\/ define the callback function to change the text\nfunction change_text_callback() { \n    \/\/ add the code to change text here\n}\n\n\/\/ hook in to the 'publish_post' action with the add_action() function\nadd_action( 'publish_post', 'change_text_callback' );<\/code><\/pre>\n<p>Oder du kannst eine weitere Callback-Funktion mit dem Inhaltsfilter <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/the_content\/\" target=\"_blank\" rel=\"noopener noreferrer\">the_content<\/a> registrieren, um den Inhalt des Beitrags zu \u00e4ndern, bevor er im Browser angezeigt wird.<\/p>\n<pre><code class=\"language-php\">\/\/ define the callback function to modify the text\nfunction change_text_another_callback( $content ) { \n    \/\/ add the code to change text here and then return it \n    return $filtered_content;\n}\n\n\/\/ hook in to 'the_content' filter with the add_filter() function\nadd_filter( 'the_content', 'change_text_another_callback');<\/code><\/pre>\n<p>Zwei verschiedene Ans\u00e4tze mit dem gleichen Ergebnis. Zu wissen, wann man den einen \u00fcber den anderen stellt, ist der Schl\u00fcssel zu einem <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-entwicklergehalt\/\" target=\"_blank\" rel=\"noopener noreferrer\">guten WordPress-Entwickler<\/a>.<\/p>\n<h2>Wie funktionieren WordPress Hooks?<\/h2>\n<p>Das Hausbeispiel war einfach genug, um die grundlegende Funktionsweise von Hooks zu verstehen, aber es erfasst nicht die Komplexit\u00e4t, wie sie funktionieren. Am wichtigsten sind die Konzepte der Hookstellung und der Spezifit\u00e4t.<\/p>\n<p>Ein besseres Beispiel w\u00e4re es, sich vorzustellen, eine WordPress-Webseite so zu bearbeiten, wie ein Auto zusammenzubauen. Im Gegensatz zur Herstellung eines Autos, die viel Zeit in Anspruch nimmt, erfolgt der Zusammenbau einer Webseite fast augenblicklich.<\/p>\n<figure style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/das-zusammensetzen-einer-webseite.png\" alt=\"Das Zusammensetzen einer Webseite ist wie das Zusammenbauen eines Autos\" width=\"1100\" height=\"1223\"><figcaption class=\"wp-caption-text\">Das Zusammensetzen einer Webseite ist wie das Zusammenbauen eines Autos<\/figcaption><\/figure>\n<p>\u00c4hnlich wie ein Auto in einem modernen Flie\u00dfband St\u00fcck f\u00fcr St\u00fcck zusammengesetzt wird, wird eine WordPress-Webseite Element f\u00fcr Element durch den Server und den Client zusammengesetzt.<\/p>\n<p>Der WordPress-Kern ist wie der Motor des Autos, das Fahrgestell und andere wesentliche Bestandteile, die den &#8222;Kern&#8220; der Webseite ausmachen.<\/p>\n<p>Man kann eine funktionelle Webseite nur mit dem WordPress Core haben, aber wo ist der Spa\u00df dabei? Du brauchst aufregende Funktionen f\u00fcr die Webseite. Hier kommen die <a href=\"https:\/\/kinsta.com\/de\/thema\/wordpress-plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress Plugins<\/a> und <a href=\"https:\/\/kinsta.com\/de\/blog\/schnellsten-wordpress-theme\/\" target=\"_blank\" rel=\"noopener noreferrer\">Themes<\/a> ins Spiel, die beide ausgiebig Hooks verwenden.<\/p>\n<p>Im obigen Beispiel ist jede nummerierte Station wie ein Hook im WordPress Core. Es gibt zwei Arten von Stationen, wie Aktionen und Filter. Jede Station enth\u00e4lt einen bestimmten Typ von Slot, der nur bestimmte Werkzeuge akzeptiert, \u00e4hnlich wie Aktionsfunktionen und Filterfunktionen.<\/p>\n<p>Alle Stationen sind aus Gr\u00fcnden der Modularit\u00e4t und Effizienz in regelm\u00e4\u00dfigen Abst\u00e4nden platziert.<\/p>\n<p>Je nach den Anforderungen an einer bestimmten Position k\u00f6nnen wir das f\u00fcr die Aufgabe am besten geeignete Werkzeug an dieser bestimmten Station anbringen (oder einhaken). Diese Tools sind wie die Callback-Funktionen, mit denen man mit WordPress interagieren oder WordPress modifizieren kann.<\/p>\n<p>Einige Tools k\u00f6nnen die Funktionsweise erheblich ver\u00e4ndern, \u00e4hnlich wie R\u00fcckrufe, die auf Aktionen registriert sind. Andere Werkzeuge werden nur dazu benutzt, das Aussehen des Autos zu ver\u00e4ndern, wie Callbacks, die f\u00fcr Filter registriert sind.<\/p>\n<p>Die Verwendung der richtigen Werkzeuge an den richtigen Stationen ist entscheidend, um ein erstklassiges Auto zu bauen. Auf die gleiche Weise helfen uns Hooks dabei, WordPress an unsere individuellen Bed\u00fcrfnisse anzupassen.<\/p>\n<p>Wenn man diese Analogie erweitert, sind Plugins wie das Hinzuf\u00fcgen hilfreicher Autofunktionen wie Airbags, Unterhaltungskonsole, ferngesteuertes schl\u00fcsselloses System usw. (wie diese, um die <a href=\"https:\/\/kinsta.com\/de\/blog\/woocommerce-plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">Funktionalit\u00e4t von WooCommerce zu verbessern<\/a>). Themes sind analog zur Anpassung des visuellen Teils des Autos, wie das Gesamtdesign, Lackierung, Felgen, etc. (hier ist, <a href=\"https:\/\/kinsta.com\/de\/blog\/wie-du-dein-wordpress-theme-anpasst\/\" target=\"_blank\" rel=\"noopener noreferrer\">wie ihr euer WordPress Theme anpasst<\/a>).<\/p>\n<h2>Wo registriert man Hooks und ihre Funktionen?<\/h2>\n<p>Es gibt zwei empfohlene Wege, um Hooks in WordPress hinzuzuf\u00fcgen:<\/p>\n<ul>\n<li><strong>Plugins<\/strong>: Erstelle dein eigenes Plugin und f\u00fcge deinen ganzen eigenen Code darin ein.<\/li>\n<li><strong>Child Themes<\/strong>: Registriere die Hooks und Callback-Funktionen in der <a href=\"https:\/\/kinsta.com\/de\/blog\/child-theme-wordpress-erstellen\/\" target=\"_blank\" rel=\"noopener noreferrer\">php-Datei deines Child Themes<\/a>.<\/li>\n<\/ul>\n<p>F\u00fcr dieses Tutorial wollen wir damit beginnen, ein Plugin zu erstellen. Um das zu tun, erstelle einen neuen Ordner in deinem \/wp-content\/plugins\/ Verzeichnis.<\/p>\n<p>Ich gebe meinem Plugin den Namen Salhooks, aber du kannst es nennen, wie du willst. Gem\u00e4\u00df den WordPress-Richtlinien ben\u00f6tigst du eine PHP-Datei mit dem gleichen Namen (salhooks.php) in deinem Plugin-Verzeichnis.<\/p>\n<p>F\u00fcge die folgenden Header-Felder zu deiner Plugin-Datei hinzu, um sie bei WordPress zu registrieren. Du kannst mehr \u00fcber die <a href=\"https:\/\/developer.wordpress.org\/plugins\/plugin-basics\/header-requirements\/\" target=\"_blank\" rel=\"noopener noreferrer\">Anforderungen an den Plugin-Header<\/a> im WordPress-Codex erfahren.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name:  Salhooks\nVersion    :  1.0\nDescription:  Demonstrating WordPress Hooks (Actions and Filters) with multiple examples.\nAuthor     :  Salman Ravoof\nAuthor URI :  https:\/\/www.salmanravoof.com\/\nLicense    :  GPLv2 or later\nLicense URI:  https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain:  salhooks\n*\/\n\n\/\/=================================================\n\/\/ Security: Abort if this file is called directly\n\/\/=================================================\nif ( !defined('ABSPATH') ) { \n    die;\n}<\/code><\/pre>\n<p>Speichere diese Datei und aktiviere dann das Plugin in deinem <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-admin\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress Dashboard<\/a>. Ich werde dieses Plugin innerhalb einer <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-lokal-installieren\/\" target=\"_blank\" rel=\"noopener noreferrer\">lokalen WordPress-Installation<\/a> verwenden, um zu demonstrieren, wie Hooks funktionieren.<\/p>\n<p>Nebenbei bemerkt, ihr k\u00f6nnt die WordPress Core Dateien auch direkt bearbeiten, um Hooks zu registrieren. Allerdings ist das nicht empfehlenswert, da bei jedem <a href=\"https:\/\/kinsta.com\/de\/blog\/automatischen-updates-wordpress\/\" target=\"_blank\" rel=\"noopener noreferrer\">Update von WordPress<\/a> dein ganzer benutzerdefinierter Code \u00fcberschrieben wird. Aus dem gleichen Grund solltest du auch keine Hooks in deinem Parent Theme hinzuf\u00fcgen.<\/p>\n<h2>WordPress Hooks benutzen<\/h2>\n<p>Ein WordPress Hook allein bewirkt nichts. Er sitzt nur im Code und wartet auf eine Hook-Funktion, die ihn aktiviert. Um einen Hook zu benutzen, brauchst du mindestens 2 andere Funktionen.<\/p>\n<p>Zuerst brauchst du den Hook mit einer Hook-Funktion registrieren und darin eine Callback-Funktion referenzieren. Und dann ben\u00f6tigst du die Callback-Funktion, die du zuvor in der Hook-Funktion erw\u00e4hnt hast. WordPress wird diese Callback-Funktion jedes Mal ausf\u00fchren, wenn der Hook gefeuert wird.<\/p>\n<p>Die Reihenfolge, in der du diese Funktionen definierst, spielt keine Rolle, aber es ist eine gute Idee, sie nahe beieinander zu platzieren.<\/p>\n<p>Aktionen und Filter haben unterschiedliche Hook-Funktionen. Von nun an werden sie als <strong>Aktionsfunktionen<\/strong> und <strong>Filterfunktionen<\/strong> bezeichnet. Wie ihr sehen werdet, haben sie ihre eigene Syntax und Parameteranforderungen.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"3\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Eine Aktion einh\u00e4ngen<\/h3>\n<p>Aktionen bieten dir die M\u00f6glichkeit, deinen benutzerdefinierten Code an einem bestimmten Punkt in der Ausf\u00fchrung von WordPress Core, Plugins oder Themes auszuf\u00fchren.<\/p>\n<h4>Die add_action() Action-Funktion<\/h4>\n<p>Du kannst eine Callback-Funktion mit einer Aktion registrieren, indem du diesen Schritten folgst:<\/p>\n<ol>\n<li>Definiere eine <strong>Callback-Funktion<\/strong> mit deinem eigenen Code darin. Diese Callback-Funktion wird ausgef\u00fchrt, wenn eine Aktion, f\u00fcr die sie registriert ist, w\u00e4hrend der Codeausf\u00fchrung von WordPress ausgel\u00f6st wird.<\/li>\n<li>H\u00e4nge deine Callback-Funktion mit der <strong><code>add_action()<\/code><\/strong>-Funktion an die gew\u00fcnschte Aktion an. Wie im WordPress-Codex vorgeschrieben, ben\u00f6tigt die <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_action\/\" target=\"_blank\" rel=\"noopener noreferrer\">add_action()<\/a>-Funktion mindestens zwei Parameter:\n<ol>\n<li>Name der Aktion, in die eingeklinkt werden soll.<\/li>\n<li>Name der Callback-Funktion, die ausgef\u00fchrt wird, wenn die Aktion ausgel\u00f6st wird.<\/li>\n<\/ol>\n<\/li>\n<li>Die <strong><code>add_action()<\/code><\/strong>-Funktion akzeptiert auch zwei optionale Parameter, um die <strong><code>Priorit\u00e4t<\/code><\/strong> und die <strong><code>Anzahl der Argumente<\/code><\/strong> festzulegen. Wir werden beide sp\u00e4ter besprechen.<\/li>\n<\/ol>\n<p>Es ist gute Praxis, die Parameter deiner Callbackfunktion so nah wie m\u00f6glich an die Parameter zu benennen, die von der Hookfunktion \u00fcbergeben werden.<\/p>\n<p>Schauen wir uns ein Beispiel f\u00fcr die Verwendung der <strong><code>add_action()<\/code><\/strong> Funktion an.<\/p>\n<pre><code class=\"language-php\">\/\/ define the callback function, the arguments are optional\nfunction example_callback( $arg1, $arg2 ) {\n\u00a0 \u00a0 \/\/ make your code do something with the arguments\n}\n\n\/\/ hook the callback function to the 'example_action'\nadd_action( 'example_action', 'example_callback', [priority], [no_of_args] );\n\n\/\/ 'priority' and 'number of arguments' are optional parameters<\/code><\/pre>\n<h4>Beispiel f\u00fcr das Einhaken einer Aktion<\/h4>\n<p>WordPress enth\u00e4lt eine eingebaute Aktion namens <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/init\/\" target=\"_blank\" rel=\"noopener noreferrer\">init<\/a>, die ausgel\u00f6st wird, nachdem WordPress fertig geladen und der Benutzer authentifiziert wurde, aber bevor irgendwelche Header gesendet werden. Viele Plugins benutzen diesen Hooks als Startpunkt, um ihren Code zu instanziieren, da fast alle wichtigen Funktionen von WordPress fertig geladen sind, wenn WordPress diese Aktion ausf\u00fchrt.<\/p>\n<p>WordPress hat eine \u00e4hnliche Aktion namens <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/admin_init\/\" target=\"_blank\" rel=\"noopener noreferrer\">admin_init<\/a>. Sie wird w\u00e4hrend der Initialisierung des Admin-Bildschirms ausgel\u00f6st, w\u00e4hrend die Aktion <strong><code>init<\/code><\/strong> erst dann ausgel\u00f6st wird, wenn WordPress fertig geladen ist.<\/p>\n<p>Lass uns einen benutzerdefinierten Code ausf\u00fchren, um eine einfache Nachricht w\u00e4hrend der Ausf\u00fchrung der <strong><code>init<\/code><\/strong>-Aktion zu <strong><code>echoen<\/code><\/strong>. Hier ist, wie man das macht:<\/p>\n<pre><code class=\"language-php\">function custom_callback_function(){\n\u00a0 \u00a0 \/\/ add your custom code here to do something\n\u00a0 \u00a0 echo 'I will be fired on WordPress initialization';\n}\nadd_action( 'init', 'custom_callback_function' );<\/code><\/pre>\n<p>Du kannst sehen, wie die Nachricht in der linken oberen Ecke meiner <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-lokal-installieren\/\" target=\"_blank\" rel=\"noopener noreferrer\">lokalen WordPress-Installation<\/a> wiedergegeben wird.<\/p>\n<figure id=\"attachment_72244\" aria-describedby=\"caption-attachment-72244\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72244 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/init-action-beispiel.jpg\" alt=\"Nicht so h\u00fcbsch, aber es ist ein toller Anfang!\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72244\" class=\"wp-caption-text\">Nicht so h\u00fcbsch, aber es ist ein toller Anfang!<\/figcaption><\/figure>\n<h4>Aktionen finden, die von WordPress unterst\u00fctzt werden<\/h4>\n<p>WordPress beinhaltet jedes Mal Aktionen, wenn es etwas tut, wie z.B. <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-url-loggst\/\" target=\"_blank\" rel=\"noopener noreferrer\">einen Benutzer einloggen<\/a> oder einen <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-missed-schedule\/\" target=\"_blank\" rel=\"noopener noreferrer\">neuen Beitrag ver\u00f6ffentlichen<\/a>. Eine umfassende Liste aller Aktionen, die von WordPress ausgef\u00fchrt werden, findest du auf der <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin API\/Action Reference<\/a> Seite.<\/p>\n<figure id=\"attachment_72247\" aria-describedby=\"caption-attachment-72247\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72247 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/es-gibt-eine-aktion-fur-fast-jeden-einsatz.png\" alt=\"Es gibt eine Aktion f\u00fcr fast jeden Einsatz\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72247\" class=\"wp-caption-text\">Es gibt eine Aktion f\u00fcr fast jeden Einsatz<\/figcaption><\/figure>\n<p>Der Kodex hat alle dort aufgef\u00fchrten Aktionen in verschiedene Kategorien aufgeteilt und von der ersten bis zur letzten in der WordPress-Ausf\u00fchrungsreihenfolge angeordnet.<\/p>\n<p>In den meisten F\u00e4llen werden viele dieser Aktionen nichts ausrichten, da nichts mit ihnen verbunden ist. Aber wenn du sie brauchst, sind sie f\u00fcr dich da, um dich einzuklinken.<\/p>\n<p>F\u00fchlst du dich ein bisschen \u00fcberfordert mit all den Aktionen? Das ist ganz nat\u00fcrlich. Je mehr Erfahrung du sammelst und den WordPress Core-Quellcode durchsiehst, desto einfacher wird es, den perfekten Hook f\u00fcr deine Bed\u00fcrfnisse zu finden. Suche einfach nach dem Begriff &#8222;<strong>do_action<\/strong>&#8220; und du wirst jede Menge Aktionen finden, in die du dich einklinken kannst.<\/p>\n<h4>Zus\u00e4tzliche Parameter f\u00fcr add_action()<\/h4>\n<p>Die <strong><code>add_action()<\/code><\/strong>-Funktion kann zwei weitere Parameter akzeptieren: einen zum Setzen der <strong><code>Priorit\u00e4t<\/code><\/strong> und den anderen zum Setzen der <code><strong>Anzahl der Argumente<\/strong><\/code>. Obwohl sie optional sind, k\u00f6nnen sie, wenn sie richtig verwendet werden, super hilfreich sein.<\/p>\n<h5>Priorit\u00e4t<\/h5>\n<p>Der erste zus\u00e4tzliche Parameter, der von der <strong><code>add_action<\/code>()<\/strong>-Funktion unterst\u00fctzt wird, setzt die <strong><code>Priorit\u00e4t<\/code><\/strong>. Dieser Parameter kann nur eine positive ganze Zahl sein. Je niedriger die Priorit\u00e4tszahl, desto fr\u00fcher wird die Funktion ausgef\u00fchrt. Der Standardwert ist 10, wenn du ihn nicht angibst.<\/p>\n<p>Um zu sehen, wie es funktioniert, lass uns drei Callback-Funktionen zur <strong><code>init<\/code><\/strong>-Aktion registrieren, aber jede mit einer anderen Priorit\u00e4t.<\/p>\n<pre><code class=\"language-php\">\/\/ priority is set to 9, which is lower than 10, hence it ranks higher\nadd_action( 'init', 'i_am_high_priority', 9 );\n\n\/\/ if no priority is set, the default value of 10 will be used\nadd_action( 'init', 'i_am_default_priority');\n\n\/\/ priority is set to 11, which is higher than 11, hence it ranks lower\nadd_action( 'init', 'i_am_low_priority', 11 );<\/code><\/pre>\n<p>In den obigen Beispielen l\u00e4uft die Callback-Funktion mit der niedrigsten Priorit\u00e4tsnummer zuerst und die mit der h\u00f6chsten Nummer zuletzt. Wenn ihre Priorit\u00e4ten gleich sind, dann laufen sie in der Reihenfolge, in der du sie registriert hast.<\/p>\n<p>Die Priorit\u00e4t spielt eine wichtige Rolle, wenn ein einzelner Hook mehrere Callback-Funktionen bei ihm registriert haben kann. Um unerwartete Ergebnisse zu vermeiden, kannst du f\u00fcr jede Callback-Funktion eine Priorit\u00e4t festlegen, so dass sie in der Reihenfolge ausgef\u00fchrt werden, in der du sie registrieren m\u00f6chtest.<\/p>\n<h5>Anzahl der Argumente<\/h5>\n<p>Standardm\u00e4\u00dfig erh\u00e4lt jede Callback-Funktion, die \u00fcber die <strong><code>add_action()<\/code><\/strong>-Funktion registriert wird, nur ein Argument. Manchmal ben\u00f6tigst du jedoch zus\u00e4tzliche Daten an die Callback-Funktion.<\/p>\n<p>Aus diesem Grund akzeptiert die <strong><code>add_action()<\/code><\/strong>-Funktion einen optionalen Parameter, um die Anzahl der Argumente festzulegen.<\/p>\n<p>Ein gutes Beispiel daf\u00fcr ist die <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/comment_post\/\">comment_post<\/a> action. Diese Aktion l\u00e4uft sofort nachdem <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-kommentar-plugins\/\">WordPress einen Kommentar in die Datenbank geschrieben hat<\/a>. Wenn du den Parameter f\u00fcr die <strong><code>Anzahl der Argumente<\/code><\/strong> nicht angibst, wird nur ein einziger Wert an die Callback-Funktion \u00fcbergeben, der in diesem Fall die <code><strong>comment_ID<\/strong><\/code> ist<\/p>\n<pre><code class=\"language-php\">\/\/ register the hook with 'priority' and 'number of arguments' parameters\nadd_action( 'comment_post', 'show_message_function', 10, 3 );\n\n\/\/ define the callback function\nfunction show_message_function( $comment_ID, $comment_approved, $commentdata ) {\n\u00a0 \u00a0 \/\/ check whether a comment is approved with the second parameter\n\u00a0 \u00a0 if( 1 === $comment_approved ){\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ runs the code only if the comment is approved\n\u00a0 \u00a0 }\n}<\/code><\/pre>\n<p>Wenn du den Parameter &#8222;<strong>Anzahl der Argumente<\/strong>&#8220; wie im obigen Beispiel auf <strong>3<\/strong> setzt, wird die Funktion action drei Werte \u00fcbergeben: <strong><code>comment_ID, comment_approved<\/code><\/strong> und commentdata.<\/p>\n<p>WordPress setzt den <strong><code>comment_approved<\/code><\/strong>-Wert auf <strong>1<\/strong> f\u00fcr genehmigte Kommentare, <strong>0<\/strong>, wenn nicht genehmigt, und <strong>&#8217;spam&#8216;<\/strong>, wenn der <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-spam-kommentare\/\" target=\"_blank\" rel=\"noopener noreferrer\">Kommentar als Spam markiert ist<\/a>.<\/p>\n<p>Die Variable benutze<strong><code>commentdata<\/code><\/strong> ist ein Array, das alle Kommentardaten enth\u00e4lt, wie den Namen des Kommentarautors, die E-Mail-Adresse, die Webseite und den Inhalt des Kommentars selbst. Im WordPress-Codex findet ihr alle <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_new_comment\/#parameters\" target=\"_blank\" rel=\"noopener noreferrer\">Schl\u00fcssel-Werte-Paare, die im Array &#8218;commentdata&#8216; enthalten sind.<\/a><\/p>\n<p>Du kannst so viele Argumente haben, wie du willst, aber die Callback-Funktion und die <strong><code>add_action()<\/code><\/strong>-Funktion ben\u00f6tigen die gleiche Anzahl von Argumenten.<\/p>\n<p>Indem du zus\u00e4tzliche Parameter an die Callback-Funktion \u00fcbergibst, kannst du mehr mit deinem Code machen. Zum Beispiel kannst du \u00fcberpr\u00fcfen, ob ein Kommentar genehmigt ist oder nicht und den <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-spam-kommentare\/#3-enable-comment-moderation\">Kommentartext automatisch an den Admin mailen, wenn er genehmigt ist<\/a>. Dies ist ohne Angabe der zus\u00e4tzlichen Argumente nicht m\u00f6glich, da deine Callback-Funktion keinen Zugriff auf die <strong><code>comment_content<\/code><\/strong> Daten hat.<\/p>\n<p>Wenn du die Priorit\u00e4t nicht setzen willst, sondern nur die Anzahl der Argumente \u00e4ndern willst, brauchst du trotzdem eine Priorit\u00e4t. Benutze einfach den Standardwert (z.B. 10).<\/p>\n<h4>Wie WordPress Core Aktionen benutzt<\/h4>\n<p>WordPress Core selbst verwendet viele seiner eingebauten Aktionen, um verschiedene Funktionen auszuf\u00fchren.<\/p>\n<p>Nimm zum Beispiel die <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/wp_head\/\" target=\"_blank\" rel=\"noopener noreferrer\">wp_head<\/a> Aktion. Sie wird ausgel\u00f6st, wenn WordPress den Header-Bereich der Webseiten ausgibt (der Code, der zwischen <code><strong>&lt;head&gt;<\/strong><\/code> und <code><strong>&lt;\/head&gt;<\/strong><\/code> liegt).<\/p>\n<p>Die meisten Funktionen der WordPress-Core-Aktion, die sich auf den <code><strong>wp_head<\/strong><\/code>-Hook beziehen, findest du in der <strong><code>wp-includes\/default-filters.php<\/code><\/strong>-Datei. Ich habe mich <a href=\"https:\/\/github.com\/WordPress\/WordPress\/blob\/master\/wp-includes\/default-filters.php\" target=\"_blank\" rel=\"noopener noreferrer\">durch den Code gearbeitet<\/a> und eine Liste aller <code><strong>add_action()<\/strong><\/code>-Funktionen zusammengestellt, die die <code><strong>wp_head<\/strong><\/code>-Aktion aufrufen.<\/p>\n<pre><code class=\"language-php\">add_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 );\nadd_action( 'wp_head', '_wp_render_title_tag', 1 );\nadd_action( 'wp_head', 'wp_enqueue_scripts', 1 );\nadd_action( 'wp_head', 'wp_resource_hints', 2 );\nadd_action( 'wp_head', 'feed_links', 2 );\nadd_action( 'wp_head', 'feed_links_extra', 3 );\nadd_action( 'wp_head', 'rsd_link' );\nadd_action( 'wp_head', 'wlwmanifest_link' );\nadd_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );\nadd_action( 'wp_head', 'locale_stylesheet' );\nadd_action( 'wp_head', 'noindex', 1 );\nadd_action( 'wp_head', 'print_emoji_detection_script', 7 );\nadd_action( 'wp_head', 'wp_print_styles', 8 );\nadd_action( 'wp_head', 'wp_print_head_scripts', 9 );\nadd_action( 'wp_head', 'wp_generator' );\nadd_action( 'wp_head', 'rel_canonical' );\nadd_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );\nadd_action( 'wp_head', 'wp_custom_css_cb', 101 );\nadd_action( 'wp_head', 'wp_site_icon', 99 );\nadd_action( 'wp_head', 'wp_no_robots' );<\/code><\/pre>\n<p>Das sind eine Menge Callback-Funktionen, die mit nur einer Aktion verbunden sind. Hier die <strong><code>Priorit\u00e4t<\/code><\/strong> zu setzen ist entscheidend, um sicherzustellen, dass die wichtigsten abh\u00e4ngigen Funktionen zuerst ausgef\u00fchrt werden.<\/p>\n<p>Im obigen Beispiel ist das Laden der Skripte mit der Callback-Funktion <strong><code>wp_enqueue_scripts()<\/code><\/strong> wichtiger (Priorit\u00e4t = 1) als das Laden der Icon-Meta-Tags der Webseite mit der Callback-Funktion <code><strong>wp_site_icon()<\/strong><\/code> (Priorit\u00e4t = 99).<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Alle Callback-Funktionen, die im obigen Beispiel verwendet werden, sind WordPress-Funktionen. Du kannst sie auch in jedem deiner Codes verwenden. Besuche die <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\" target=\"_blank\" rel=\"noopener noreferrer\">Seite Funktionsreferenz auf dem WordPress-Codex<\/a> f\u00fcr weitere Informationen.<\/p>\n<\/aside>\n\n<h4>Andere Action-Funktionen<\/h4>\n<p>W\u00e4hrend <strong><code>add_action()<\/code><\/strong> die meistgenutzte Action-Funktion ist, gibt es viele andere, die ebenso hilfreich sind. Schauen wir mal, wie sie alle funktionieren.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/has_action\">has_action()<\/a><\/li>\n<\/ul>\n<p>Diese Aktionsfunktion pr\u00fcft, ob eine Aktion eingehakt wurde. Sie akzeptiert zwei Parameter. Der erste Parameter ist der Name der Aktion. Der zweite Parameter ist optional und ist der Name der Callback-Funktion.<\/p>\n<pre><code class=\"language-php\">has_action( 'action_name', 'function_to_check' );<\/code><\/pre>\n<p>Wenn du nur den ersten Parameter angibst, gibt er <code><strong>true<\/strong><\/code> zur\u00fcck, wenn irgendeine Funktion mit dem Parameter <code><strong>action_name<\/strong><\/code> verkn\u00fcpft ist.<\/p>\n<p>Wenn du aber auch den zweiten Parameter angibst, gibt er false zur\u00fcck, wenn die angegebene Callback-Funktion nicht auf die erw\u00e4hnte Aktion registriert ist.<\/p>\n<p>Wenn die Callback-Funktion jedoch an den Action-Hook angeh\u00e4ngt ist, gibt sie die Priorit\u00e4t (eine ganze Zahl) zur\u00fcck, die f\u00fcr diese Funktion an diesem Action-Hook gesetzt wurde.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\">do_action()<\/a><\/li>\n<\/ul>\n<p>Wir sind dieser Aktionsfunktion schon einmal begegnet. WordPress benutzt sie, um alle seine Standardaktionen zu definieren, damit andere Funktionen sich in sie einklinken k\u00f6nnen. Genau wie WordPress kannst du auch die Funktion <code><strong>do_action()<\/strong><\/code> verwenden, um eine neue benutzerdefinierte Aktion zu erstellen, indem du einen neuen Aktionsnamen als Parameter angibst.<\/p>\n<pre><code class=\"language-php\">do_action( 'action_name', [argument1], [argument2] );<\/code><\/pre>\n<p>Nur diese Funktion zu deklarieren, wird von sich aus nichts bewirken. Aber sie wird im Code sitzen und darauf warten, dass andere Aktionsfunktionen sie aktivieren. Das \u00dcbergeben von zus\u00e4tzlichen Argumenten ist optional, aber es ist wichtig, wenn du willst, dass deine Callback-Funktionen sie benutzen.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/do_action_ref_array\">do_action_ref_array()<\/a><\/li>\n<\/ul>\n<p>Diese Action-Funktion ist identisch mit <code><strong>do_action<\/strong>()<\/code>, bis auf einen Unterschied. Alle Argumente, die sie durchlaufen, m\u00fcssen ein Array sein. Wenn du eine Menge Argumente zu \u00fcbergeben hast oder deine Argumente bereits in einem Array sind, ist diese Funktion super hilfreich.<\/p>\n<pre><code class=\"language-php\">\/\/ here's an example array\n$arguments_array = array( 'arg_1', 'foo', true, 'arg_4' );\n\ndo_action_ref_array( 'example_action', $arguments_array );<\/code><\/pre>\n<p>Da PHP-Arrays eine geordnete Karte sind, stelle sicher, dass die Argumente, die du \u00fcbergibst, in der richtigen Reihenfolge sind.<\/p>\n<p>Ein Beispiel f\u00fcr die Verwendung dieser Aktionsfunktion ist die Aktion <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/admin_bar_menu\/\" target=\"_blank\" rel=\"noopener noreferrer\">admin_bar_menu<\/a>. Sie kann eingehakt werden, um die verschiedenen Elemente der Admin-Leiste hinzuzuf\u00fcgen, zu manipulieren oder zu entfernen. Alle Elemente der Admin-Leiste sind als Elemente eines Arrays definiert.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/did_action\">did_action()<\/a><\/li>\n<\/ul>\n<p>Wenn du z\u00e4hlen m\u00f6chtest, wie oft eine Aktion abgefeuert wird, kannst du diese Aktionsfunktion aufrufen.<\/p>\n<pre><code class=\"language-php\">did_action( 'action_name' );<\/code><\/pre>\n<p>Diese Funktion gibt einen ganzzahligen Wert zur\u00fcck.<\/p>\n<p>Die <code><strong>did_action()<\/strong><\/code>-Funktion ist extrem praktisch, wenn du eine Callback-Funktion nur beim ersten Ausf\u00fchren einer Aktion ausf\u00fchren willst und nie wieder<\/p>\n<pre><code class=\"language-php\">function example_callback_function() {\n    if( did_action( 'example_action' ) === 1 ) {\n    \/\/ checks if the 'example_action' hook is fired once, and only runs then, and never again!\n    }\n}\nadd_action('example_action', 'example_callback_function');<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/remove_action\">remove_action()<\/a><\/li>\n<\/ul>\n<p>Diese Action-Funktion entfernt eine Callback-Funktion, die mit der angegebenen Aktion verbunden ist. Zum Beispiel kannst du diese Funktion benutzen, um die Standard WordPress Funktionen, die in eingebauten Aktionen gehakt sind, zu entfernen und sie durch deine eigenen zu ersetzen.<\/p>\n<pre><code class=\"language-php\">remove_action( 'action_name', 'function_to_be_removed', [priority] );<\/code><\/pre>\n<p>Es gibt ein paar Voraussetzungen f\u00fcr den Aufruf der <strong><code>remove_action()<\/code><\/strong>-Funktion:<\/p>\n<ol>\n<li>Die Parameter function_to_be_removed und priority m\u00fcssen die gleichen sein wie die, die urspr\u00fcnglich in der <strong><code>add_action()<\/code><\/strong>-Funktion verwendet wurden.<\/li>\n<li>Du kannst die <strong><code>remove_action()<\/code><\/strong>-Funktion nicht direkt aufrufen. Du brauchst sie aus einer anderen Funktion heraus aufzurufen.<\/li>\n<li>Wenn die Callback-Funktion von einer Klasse registriert ist, dann hat das Entfernen der Funktion andere Anforderungen. Du kannst die WordPress Codex-Dokumentation f\u00fcr weitere Details lesen.<\/li>\n<li>Du kannst die Callback-Funktion nicht entfernen, bevor sie registriert ist oder nachdem sie ausgef\u00fchrt wurde.<\/li>\n<\/ol>\n<p>Hier ist ein Beispiel daf\u00fcr, wie <a href=\"https:\/\/kinsta.com\/de\/blog\/woocommerce-tutorial\/\" target=\"_blank\" rel=\"noopener noreferrer\">WooCommerce<\/a> diese Aktionsfunktion verwendet, um die Standard-Produkt-Miniaturansicht auf der Hauptseite des Shops zu entfernen.<\/p>\n<pre><code class=\"language-php\">remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/remove_all_actions\">remove_all_actions()<\/a><\/li>\n<\/ul>\n<p>Diese Aktionsfunktion entfernt alles, was mit einer Aktion verbunden ist. Der Parameter priority ist optional.<\/p>\n<pre><code class=\"language-php\">remove_all_actions( 'action_name', [priority] );<\/code><\/pre>\n<p>Denke daran, dass diese Funktion nicht von der Aktion aus aufgerufen werden kann, von der du die Callback-Funktionen deregistrieren m\u00f6chtest. Das w\u00fcrde eine Endlosschleife verursachen. Du kannst dich in eine Aktion einklinken, die fr\u00fcher ausgel\u00f6st wurde, um diese Funktion ohne Fehler auszuf\u00fchren.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/doing_action\/\">doing_action()<\/a><\/li>\n<\/ul>\n<p>Diese Aktionsfunktion pr\u00fcft, ob die angegebene Aktion ausgef\u00fchrt wird oder nicht. Sie gibt einen booleschen Wert zur\u00fcck (<strong><code>true<\/code><\/strong> oder <strong><code>false<\/code><\/strong>).<\/p>\n<pre><code class=\"language-php\">\/\/ check whether the 'action_name' action is being executed\nif ( doing_action( 'action_name' ) ) {\n\u00a0 \u00a0 \/\/ execute your code here\n}<\/code><\/pre>\n<p>Du kannst den Parameter <strong><code>action_name<\/code><\/strong> leer lassen, um zu pr\u00fcfen, ob eine Aktion ausgef\u00fchrt wird. Er wird jedes Mal <strong><code>true<\/code><\/strong> zur\u00fcckgeben, wenn eine Aktion ausgel\u00f6st wird.<\/p>\n<pre><code class=\"language-php\">\/\/ check if any action is running and do something\nif ( doing_action() ) {\n  \u00a0 \/\/ the code here is run when any action is fired\n}<\/code><\/pre>\n<h4>Aktionen Beispiel 1: Zeige den Besuchern deiner Webseite eine Wartungsmeldung<\/h4>\n<p>Manchmal ist es am besten, deine Webseite offline zu nehmen und eine <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-wartungsmodus\/\" target=\"_blank\" rel=\"noopener noreferrer\">Wartungs-Seite<\/a> einzurichten. Gl\u00fccklicherweise bietet dir WordPress eine einfache M\u00f6glichkeit, genau das zu tun.<\/p>\n<pre><code class=\"language-php\">\/\/ show a maintenance message for all your site visitors\nadd_action( 'get_header', 'maintenance_message' );\nfunction maintenance_message() {\n    if (current_user_can( 'edit_posts' )) return;\n    wp_die( '&lt;h1&gt;Stay Pawsitive!&lt;\/h1&gt;&lt;br&gt;Sorry, we\\'re temporarily down for maintenance right meow.' );\n}<\/code><\/pre>\n<p>Lass uns den Code aufschl\u00fcsseln und jeden Schritt durchgehen:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/get_header\/\" target=\"_blank\" rel=\"noopener noreferrer\">get_header<\/a> ist eine Aktion, die ausgel\u00f6st wird, bevor die Header-Template-Datei der Webseite geladen wird. Es ist eine perfekte Aktion, die man sich einklinkt, wenn man das Laden der Hauptseite unterbrechen will.<\/li>\n<li>Hook dich in die <strong><code>get_header<\/code><\/strong>-Aktion ein, indem du die <code><strong>add_action()<\/strong><\/code>-Funktion mit der <code><strong>maintenance_message()<\/strong><\/code>-Callback-Funktion verwendest.<\/li>\n<li>Definiere die <code><strong>maintenance_message()<\/strong><\/code>-Callback-Funktion.<\/li>\n<li><code><strong>current_user_can( 'edit_posts' )<\/strong><\/code> ist eine <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/current_user_can\/\" target=\"_blank\" rel=\"noopener noreferrer\">Benutzerf\u00e4higkeitstest-Funktion<\/a>, die pr\u00fcft, ob der aktuelle Benutzer eingeloggt ist und <a href=\"https:\/\/wordpress.org\/support\/article\/roles-and-capabilities\/#edit_posts\" target=\"_blank\" rel=\"noopener noreferrer\">Beitr\u00e4ge bearbeiten kann<\/a>. <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-benutzerregistrierung-plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">Jeder Benutzer, der auf einer WordPress Webseite registriert ist<\/a>, mit Ausnahme derer, die die Rolle eines Abonnenten haben, hat die F\u00e4higkeit, Beitr\u00e4ge zu bearbeiten. Es gibt andere robuste Methoden, um diese Pr\u00fcfung durchzuf\u00fchren, aber wir bleiben hier bei dieser einfachen Methode.<\/li>\n<li>Benutze die Standardfunktion <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_die\/\" target=\"_blank\" rel=\"noopener noreferrer\">wp_die()<\/a>, um die Ausf\u00fchrung von WordPress zu beenden und eine HTML-Seite mit einer Fehlermeldung anzuzeigen. Du kannst die HTML-Syntax im Parameter &#8222;error message&#8220; verwenden, um sie zu formatieren.<\/li>\n<\/ul>\n<p>Nachdem ich den Code in meinem benutzerdefinierten Plugin gespeichert habe, habe ich meine lokale WordPress-Installation im privaten Browsermodus geladen. Die Seite \u201c<strong>Wartung<\/strong>\u201d funktioniert!<\/p>\n<figure id=\"attachment_72274\" aria-describedby=\"caption-attachment-72274\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72274 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/wordpress-wartungsmeldung.png\" alt=\"Den Besuchern der Webseite eine Fehlermeldung anzeigen\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72274\" class=\"wp-caption-text\">Den Besuchern der Webseite eine Fehlermeldung anzeigen<\/figcaption><\/figure>\n<p>Die Webseite wird erfolgreich geladen, wenn ich eingeloggt bin, wenn sie den Benutzerf\u00e4higkeitstest besteht. Du kannst nun weiter daran arbeiten, deine Webseite zu reparieren, w\u00e4hrend sie regelm\u00e4\u00dfigen Besuchern diese Seite anzeigt.<\/p>\n<h4>Aktionen Beispiel 2: Dashboard-Men\u00fcpunkte vor Nicht-Admin-Benutzern verstecken<\/h4>\n<p>Wenn du einen <a href=\"https:\/\/kinsta.com\/de\/blog\/wie-man-den-autor-in-wordpress-andert\/\" target=\"_blank\" rel=\"noopener noreferrer\">Multi-Autoren-Blog<\/a> betreibst oder eine <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-wartung\/\" target=\"_blank\" rel=\"noopener noreferrer\">Webseite f\u00fcr deine Kunden verwaltest<\/a>, dann ben\u00f6tigst du eventuell bestimmte Admin-Men\u00fcs aus dem <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-admin\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress-Dashboard<\/a> f\u00fcr Nicht-Admin-Benutzer auszublenden. Das kannst du tun, indem du dich in die Aktion <strong><code>admin_menu<\/code><\/strong> einh\u00e4ngst.<\/p>\n<pre><code class=\"language-php\">\/\/ remove specific dashboard menus for non-admin users\nadd_action( 'admin_menu', 'hide_admin_menus' );\nfunction hide_admin_menus() {\n    if (current_user_can( 'create_users' )) return;\n    if (wp_get_current_user()-&gt;display_name == \"Salman\") return; \n    remove_menu_page( 'plugins.php' ); \n    remove_menu_page( 'themes.php' ); \n    remove_menu_page( 'tools.php' ); \n    remove_menu_page( 'users.php' ); \n    remove_menu_page( 'edit.php?post_type=page' ); \n    remove_menu_page( 'options-general.php' );\n}<\/code><\/pre>\n<p>Hier ist eine Schritt-f\u00fcr-Schritt-Anleitung f\u00fcr den obigen Codeschnipsel:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/admin_menu\/\" target=\"_blank\" rel=\"noopener noreferrer\">admin_menu<\/a> ist eine Aktion, die ausgel\u00f6st wird, bevor das Admin-Men\u00fc im WordPress-Dashboard-Bereich geladen wird.<\/li>\n<li>Hake dich mit der <code><strong>add_action()<\/strong><\/code>-Funktion \u00fcber die <code><strong>hide_admin_menus<\/strong>()<\/code>-Callback-Funktion in die admin_menu-Aktion ein.<\/li>\n<li>Die <code><strong>hide_admin_menus()<\/strong><\/code>-Callback-Funktion definiert die Logik des Codes. Sie wird jedes Mal ausgef\u00fchrt, wenn die Admin_menu-Aktion ausgel\u00f6st wird.<\/li>\n<li>Innerhalb der Callback-Funktion pr\u00fcft die <code><strong>current_user_can( 'create_users' )<\/strong><\/code> Funktion, ob der eingeloggte Benutzer ein Admin ist. Da nur Webseiten-Administratoren die <code><strong>create_user<\/strong><\/code>-Funktion haben, endet die Funktion mit einem Return-Statement, wenn der Benutzer ein Admin ist.<\/li>\n<li>Die WordPress-Funktion <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_get_current_user\/\" target=\"_blank\" rel=\"noopener noreferrer\">wp_get_current_user()<\/a> ruft das aktuelle Benutzerobjekt ab. Mit dieser Funktion k\u00f6nnen wir \u00fcberpr\u00fcfen, ob der eingeloggte Benutzer einen bestimmten <code><strong>display_name<\/strong><\/code> gesetzt hat. Dies ist eine optionale Zeile, f\u00fcr den Fall, dass du bestimmte Nicht-Admin-Benutzer aufgrund dieser Callback-Funktion nicht aussperren m\u00f6chtest.<\/li>\n<li>Die <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/remove_menu_page\/\" target=\"_blank\" rel=\"noopener noreferrer\">remove_menu_page()<\/a> WordPress Funktion entfernt die Top-Level Admin-Men\u00fcs. Im obigen Codebeispiel entferne ich die folgenden Admin-Men\u00fcs: Plugins, Themes, Tools, Benutzer, Seiten und Optionen.<\/li>\n<\/ul>\n<p>Nachdem ich die Plugin-Datei gespeichert habe, hier ist ein Schnappschuss des WordPress-Dashboards mit einem eingeloggten Admin.<\/p>\n<figure id=\"attachment_72251\" aria-describedby=\"caption-attachment-72251\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72251 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/standardmassige-wordpress-admin-dashboard.png\" alt=\"Das standardm\u00e4\u00dfige WordPress-Admin-Dashboard\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72251\" class=\"wp-caption-text\">Das standardm\u00e4\u00dfige WordPress-Admin-Dashboard<\/figcaption><\/figure>\n<p>Und hier ist ein Screenshot des WordPress-Dashboards mit einem eingeloggten Nicht-Admin-Benutzer.<\/p>\n<figure id=\"attachment_72249\" aria-describedby=\"caption-attachment-72249\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72249 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/sensible-admin-menupunkte.png\" alt=\"Sensible Admin-Men\u00fcpunkte vor Nicht-Admin-Benutzern verstecken\" width=\"1100\" height=\"500\"><figcaption id=\"caption-attachment-72249\" class=\"wp-caption-text\">Sensible Admin-Men\u00fcpunkte vor Nicht-Admin-Benutzern verstecken<\/figcaption><\/figure>\n<p>Diese L\u00f6sung versteckt nur die angegebenen Admin-Men\u00fcpunkte vor dem Erscheinen im WordPress-Dashboard. Alle Benutzer k\u00f6nnen trotzdem auf sie zugreifen, indem sie die Men\u00fc-URLs in ihren Browsern eingeben.<\/p>\n<p>Um bestimmten <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-benutzerrollen\/\" target=\"_blank\" rel=\"noopener noreferrer\">Benutzerrollen<\/a> den Zugriff auf bestimmte Men\u00fcs zu verwehren, ben\u00f6tigst du deren F\u00e4higkeiten.<\/p>\n<h3>Einen Filter einh\u00e4ngen<\/h3>\n<p>Filter bieten dir eine M\u00f6glichkeit f\u00fcr deinen benutzerdefinierten Code, um Daten zu ver\u00e4ndern, die von anderen WordPress-Funktionen verwendet werden. Im Gegensatz zu Aktionen ben\u00f6tigen Funktionen, die von Filtern abh\u00e4ngig sind, einen Wert zur\u00fcckgeben.<\/p>\n<h4>Die add_filter() Filter Funktion<\/h4>\n<p>Du kannst eine Callback-Funktion an einen Filter anh\u00e4ngen, indem du diese Schritte befolgst:<\/p>\n<ol>\n<li>Definiere eine <strong>Callback-Funktion<\/strong>, die ausgef\u00fchrt wird, wenn WordPress den Filter feuert. Callback-Funktionen f\u00fcr Filter ben\u00f6tigen mindestens ein Argument, da alle Filter mindestens einen Wert an ihre Callback-Funktionen \u00fcbergeben.<\/li>\n<li>Registriere die Callback-Funktion f\u00fcr einen Filter mit der <strong><code>add_filter()<\/code><\/strong>-Funktion. Der Filter wird sich um den Aufruf der Callback-Funktion k\u00fcmmern. Wie im WordPress Codex vorgeschrieben, ben\u00f6tigt die <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_filter\/\" target=\"_blank\" rel=\"noopener noreferrer\">add_filter()<\/a>-Funktion mindestens zwei Parameter:\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li>Name des Filters, in den sie sich einklinken soll.<\/li>\n<li>Name der Callback-Funktion, die ausgef\u00fchrt wird, wenn der Filter feuert.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Die <strong><code>add_filter()<\/code><\/strong>-Funktion akzeptiert auch zwei zus\u00e4tzliche optionale Parameter, um die <strong><code>Priorit\u00e4t<\/code><\/strong> und die <strong><code>Anzahl der Argumente<\/code><\/strong> festzulegen. Diese Parameter funktionieren auf die gleiche Weise wie bei der <code><strong>add_action()<\/strong><\/code>-Funktion.<\/li>\n<\/ol>\n<p>Hier ist ein Beispiel, wie du die <strong><code>add_filter()<\/code><\/strong>-Funktion benutzen kannst, um eine Callback-Funktion mit einem Filter zu verbinden.<\/p>\n<pre><code class=\"language-php\">\/\/ define the filter callback function with at least one argument passed\n\/\/ the number of arguments that you can pass depends on how the filter is defined\nfunction filter_callback_function( $arg1, $arg2 ) {\n\u00a0 \u00a0 \/\/ make your code do something with the arguments and return something\n\u00a0 \u00a0 return $something;\n}\n\n\/\/ now hook the callback function to the 'example_filter'\nadd_filter( 'example_filter', 'filter_callback_function', [priority], [no_of_args] );\n\n\/\/ '10' is the default priority set for the callback function\n\/\/ and '1' is the default number of arguments passed<\/code><\/pre>\n<h4>Beispiel f\u00fcr das Einh\u00e4ngen eines Filters<\/h4>\n<p>WordPress bietet dir einen Filter namens <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/login_message\" target=\"_blank\" rel=\"noopener noreferrer\">login_message<\/a>, um die Nachricht zu filtern, die auf der Anmeldeseite \u00fcber dem Anmeldeformular angezeigt wird. Der von diesem Filter zur\u00fcckgegebene Wert kann <a href=\"https:\/\/kinsta.com\/de\/blog\/kostenlose-html-editoren\/\" target=\"_blank\" rel=\"noopener noreferrer\">HTML-Markup<\/a> haben.<\/p>\n<p>H\u00e4ngen wir uns in den Filter <strong><code>login_message<\/code><\/strong> ein und \u00e4ndern die Nachricht, die auf der Anmeldeseite angezeigt wird.<\/p>\n<pre><code class=\"language-php\">\/\/ show a custom login message above the login form\nfunction custom_login_message( $message ) {\n\u00a0 \u00a0 if ( empty( $message ) ) {\n\u00a0 \u00a0 \u00a0 \u00a0 return \"&lt;h2&gt;Welcome to Let's Develop by Salman Ravoof! Please log in to start learning.&lt;\/h2&gt;\";\n\u00a0 \u00a0 } \n    else {\n\u00a0 \u00a0 \u00a0 \u00a0 return $message;\n\u00a0 \u00a0 }\n}\nadd_filter( 'login_message', 'custom_login_message' );<\/code><\/pre>\n<p>Die <strong><code>if-else<\/code><\/strong>-Anweisung in der Callback-Funktion pr\u00fcft, ob die Login-Nachricht bereits gesetzt ist, meistens durch ein anderes Plugin oder Theme. In solchen F\u00e4llen gibt die Callback-Funktion den urspr\u00fcnglichen Wert zur\u00fcck und nimmt keine \u00c4nderungen vor. Dies ist eine M\u00f6glichkeit, Konflikte mit anderen Plugins oder Themes zu vermeiden.<\/p>\n<p>Du kannst sehen, dass die Nachricht \u00fcber dem Anmeldeformular auf der <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-url-loggst\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress-Anmeldeseite<\/a> angezeigt wird.<\/p>\n<figure id=\"attachment_72252\" aria-describedby=\"caption-attachment-72252\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72252 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/benutzerdefinierten-login-nachricht.png\" alt=\"Anzeigen einer benutzerdefinierten Login-Nachricht \u00fcber dem Login-Formular\" width=\"1100\" height=\"514\"><figcaption id=\"caption-attachment-72252\" class=\"wp-caption-text\">Anzeigen einer benutzerdefinierten Login-Nachricht \u00fcber dem Login-Formular<\/figcaption><\/figure>\n<p>Du kannst alle Elemente auf der Anmeldeseite stylen, indem du benutzerdefinierte Style Sheets in die Warteschlange stellst. Auf diese Weise kannst du deine standardm\u00e4\u00dfige WordPress-Anmeldeseite vollst\u00e4ndig anpassen.<\/p>\n<p>Im Abschnitt &#8222;Die WordPress-Anmeldeseite mit Hooks anpassen&#8220; erf\u00e4hrst du, wie du mithilfe von Aktionen benutzerdefinierte Stylesheets laden kannst.<\/p>\n<h4>Von WordPress unterst\u00fctzte Filter finden<\/h4>\n<p>\u00dcberall dort, wo WordPress Daten verarbeitet oder ver\u00e4ndert, kannst du mit ziemlicher Sicherheit einen Filter finden, in den du dich einklinken und ihn ver\u00e4ndern kannst. Stell dir Filter als Schnittstelle zwischen der <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-datenbankproblemen-repariert\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress-Datenbank<\/a> und dem Browser vor.<\/p>\n<p>Eine ausf\u00fchrliche Liste aller von WordPress unterst\u00fctzten Filter findest du auf der Seite <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin API\/Filter-Referenz<\/a>.<\/p>\n<figure id=\"attachment_72258\" aria-describedby=\"caption-attachment-72258\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72258 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/filtern-zum-einklinken.png\" alt=\"WordPress bietet dir eine Vielzahl von Filtern zum Einklinken\" width=\"1100\" height=\"514\"><figcaption id=\"caption-attachment-72258\" class=\"wp-caption-text\">WordPress bietet dir eine Vielzahl von Filtern zum Einklinken<\/figcaption><\/figure>\n<p>Alle dort aufgef\u00fchrten Filter sind in mehrere Kategorien aufgeteilt und in der WordPress-Ausf\u00fchrungsreihenfolge von oben nach unten angeordnet.<\/p>\n<p>Wenn du Filter zum Einklinken im WordPress-Quelltext finden m\u00f6chtest, dann suche nach dem Begriff &#8222;<strong>apply_filters<\/strong>&#8220; und du wirst tonnenweise Ergebnisse erhalten. Die <a href=\"https:\/\/developer.wordpress.org\/reference\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress Code-Referenz<\/a> ist auch ein gro\u00dfartiger Ort, um nach allem zu suchen, was in WordPress enthalten ist, einschlie\u00dflich Aktionen und Filter<\/p>\n<h4>Wie der Core von WordPress Filter verwendet<\/h4>\n<p>Der WordPress Core selbst verwendet eine Menge seiner eingebauten Filter, um die Daten zu ver\u00e4ndern, die von seinen verschiedenen Funktionen verwendet werden.<\/p>\n<p>Betrachte zum Beispiel den <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/the_content\/\" target=\"_blank\" rel=\"noopener noreferrer\">the_content<\/a>-Filter. Er filtert die Inhalte von Beitr\u00e4gen, nachdem sie aus der Datenbank abgerufen wurden und bevor sie im Browser angezeigt werden.<\/p>\n<p>Genau wie bei den Aktionen findest du die meisten Filterfunktionen des WordPress Core, die sich auf den <strong><code>the_content<\/code><\/strong>-Hook beziehen, in der <strong><code>wp-includes\/default-filters.php<\/code><\/strong>-Datei.<\/p>\n<p>Hier ist eine Liste aller <strong><code>core add_filter()<\/code><\/strong>-Funktionen, die sich auf den <strong><code>the_content<\/code><\/strong>-Filter beziehen:<\/p>\n<pre><code class=\"language-php\">add_filter( 'the_content', 'do_blocks', 9 );\nadd_filter( 'the_content', 'wptexturize' );\nadd_filter( 'the_content', 'convert_smilies', 20 );\nadd_filter( 'the_content', 'wpautop' );\nadd_filter( 'the_content', 'shortcode_unautop' );\nadd_filter( 'the_content', 'prepend_attachment' );\nadd_filter( 'the_content', 'wp_make_content_images_responsive' );\nadd_filter( 'the_content', 'do_shortcode', 11 ); \/\/ AFTER wpautop().\u00a0<\/code><\/pre>\n<p>Beachte die angegebene Priorit\u00e4t f\u00fcr bestimmte Callback-Funktionen.<\/p>\n<p>Zum Beispiel parst die Funktion <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_blocks\/\" target=\"_blank\" rel=\"noopener noreferrer\">do_blocks()<\/a> alle dynamischen Bl\u00f6cke des Beitragsinhalts und rendert sie neu, damit sie mit dem <a href=\"https:\/\/kinsta.com\/de\/blog\/gutenberg-wordpress-editor\/\" target=\"_blank\" rel=\"noopener noreferrer\">neuen Blockeditor von WordPress<\/a> kompatibel sind. Sie hat eine h\u00f6here Priorit\u00e4t als die Standardpriorit\u00e4t (10), um sicherzustellen, dass der Inhalt blocktauglich ist, bevor die anderen Funktionen ausgef\u00fchrt werden.<\/p>\n<p>Die <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/convert_smilies\/\" target=\"_blank\" rel=\"noopener noreferrer\">convert_smilies()<\/a>-Funktion wird mit niedrigerer Priorit\u00e4t ausgef\u00fchrt, da ihre Aufgabe darin besteht, Text-Smileys in Bild-Sprites zu konvertieren. Es macht Sinn, sie am Ende laufen zu lassen, nachdem der gesamte Inhalt des Beitrags gefiltert wurde.<\/p>\n<p>Fun Fact: Shortcodes sind eine Untermenge von Filtern. Sie nehmen Input vom Shortcode auf, verarbeiten ihn und geben dann den Output wieder zur\u00fcck. Mehr \u00fcber Shortcodes erf\u00e4hrst du in dieser <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-shortcodes\/\" target=\"_blank\" rel=\"noopener noreferrer\">ultimativen WordPress Shortcodes Anleitung<\/a>.<\/p>\n<h4>Andere Filterfunktionen<\/h4>\n<p>W\u00e4hrend <strong><code>add_filter()<\/code><\/strong> die meistgenutzte Filterfunktion ist, gibt es viele andere hilfreiche Filterfunktionen. Lass sie uns alle im Detail besprechen.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/has_filter\">has_filter()<\/a><\/li>\n<\/ul>\n<p>Diese Funktion pr\u00fcft, ob der angegebene Filter von einer Funktion abh\u00e4ngig ist. Sie akzeptiert zwei Parameter. Der erste Parameter ist f\u00fcr die Eingabe des Filternamens. Der zweite Parameter ist optional und dient dazu, den Namen der Callback-Funktion einzugeben.<\/p>\n<pre><code class=\"language-php\">has_filter( 'filter_name', 'function_to_check' );<\/code><\/pre>\n<p>Wenn du nur den ersten Parameter angibst, wird <strong><code>true<\/code><\/strong> zur\u00fcckgegeben, wenn der <strong><code>filter_name<\/code><\/strong> von irgendeiner Funktion angeh\u00e4ngt wird.<\/p>\n<p>Wenn du jedoch beide Parameter angibst, wird <strong><code>false<\/code><\/strong> zur\u00fcckgegeben, wenn die erw\u00e4hnte Callback-Funktion nicht bei dem angegebenen Filter registriert ist. Wenn er die Callback-Funktion findet, die im Filter registriert ist, dann gibt er die <strong><code>Priorit\u00e4t<\/code><\/strong> (eine ganze Zahl) zur\u00fcck, die f\u00fcr diese Funktion in diesem Filter gesetzt wurde.<\/p>\n<p>Eine m\u00f6gliche Anwendung der <strong><code>has_filter()<\/code><\/strong>-Funktion ist es, zu \u00fcberpr\u00fcfen, ob irgendein Filter bereits gehakt wurde, und basierend darauf mit der Codeausf\u00fchrung fortzufahren.<\/p>\n<pre><code class=\"language-php\">\/\/ check to see if 'the_content' filter has been hooked\nif ( ! has_filter( 'the_content' ) {\n\u00a0 \u00a0 \/\/ hook the filter if and only if it hasn't been hooked before\n\u00a0 \u00a0 add_filter( 'the_content', 'modify_the_content' );\n}<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/apply_filters\/\">apply_filters()<\/a><\/li>\n<\/ul>\n<p>Diese Filterfunktion ist wie die Aktionsfunktion <strong><code>do_action()<\/code><\/strong>. Alle Callback-Funktionen, die mit diesem Filter verbunden sind, werden ausgef\u00fchrt, wo auch immer diese Funktion im WordPress Code ist.<\/p>\n<p>Du kannst diese Funktion auch benutzen, um einen neuen benutzerdefinierten Filter zu erstellen, indem du den Filternamen und den Filterwert als Parameter angibst.<\/p>\n<pre><code class=\"language-php\">apply_filters( 'filter_name', 'value_to_filter', [argument1], [argument2] );<\/code><\/pre>\n<p>Vergiss nicht, zus\u00e4tzliche Argumente anzugeben, wenn du sie an deine Callback-Funktionen weitergeben m\u00f6chtest. Die meisten Filter verwenden nur ein Argument, so dass es leicht passieren kann, dass man die zus\u00e4tzlichen Argumente nicht definiert.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/apply_filters_ref_array\">apply_filters_ref_array()<\/a><\/li>\n<\/ul>\n<p>Diese Funktion ist wie die <strong><code>apply_filters()<\/code><\/strong>-Funktion, au\u00dfer dass alle Argumente, die sie akzeptiert, als Array geb\u00fcndelt sind.<\/p>\n<pre><code class=\"language-php\">\/\/ an example array\n$arguments_array = array( 'some_value', 'foo', false, 'another_value' );\n\napply_filters_ref_array( 'example_filter', $arguments_array );<\/code><\/pre>\n<p>Diese Filterfunktion kann n\u00fctzlich sein, wenn du viele Argumente zu \u00fcbergeben hast oder wenn sich alle Argumente bereits in einem Array befinden. Stelle sicher, dass die Argumente innerhalb des Arrays in der richtigen Reihenfolge sind.<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/current_filter\">current_filter()<\/a><\/li>\n<\/ul>\n<p>Diese Filterfunktion ruft den Namen des aktuellen Filters oder der gerade ausgef\u00fchrten Aktion ab. Du brauchst keine Parameter anzugeben, da sie innerhalb der Callback-Funktion l\u00e4uft.<\/p>\n<p>Hier ist ein Beispiel f\u00fcr ihre Verwendung:<\/p>\n<pre><code class=\"language-php\">function example_callback() {\n\u00a0 \u00a0 echo current_filter(); \/\/ 'the_title' will be echoed\n\u00a0 \u00a0 return\n}\nadd_filter( 'the_title', 'example_callback' );<\/code><\/pre>\n<p>Trotz ihres Namens kann diese Funktion den Namen sowohl von Aktionen als auch von Filtern abrufen.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/remove_filter\/\">remove_filter()<\/a><\/li>\n<\/ul>\n<p>Diese Filterfunktion entfernt die Callback-Funktion, die an den angegebenen Filter angeh\u00e4ngt ist. Sie funktioniert genau wie die <strong><code>remove_action()<\/code><\/strong>-Funktion. Du kannst sie benutzen, um mit einem bestimmten Filter registrierte WordPress-Standardfunktionen zu l\u00f6schen und sie gegebenenfalls durch deine eigenen Funktionen zu ersetzen.<\/p>\n<pre><code class=\"language-php\">remove_filter( 'filter_name', 'function_to_be_removed', [priority] );<\/code><\/pre>\n<p>Um eine Callback-Funktion, die an einen Filter gehookt wurde, wieder zu entfernen, m\u00fcssen die Parameter <strong><code>function_to_be_removed<\/code><\/strong> und <strong><code>priority<\/code><\/strong> identisch mit den Argumenten sein, die beim Hooking der Callback-Funktion verwendet wurden.<\/p>\n<p>Wenn der Filter von innerhalb einer Klasse hinzugef\u00fcgt wurde, was normalerweise der Fall ist, wenn sie von Plugins hinzugef\u00fcgt wurden, dann ben\u00f6tigt ihr <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/remove_filter\/#comment-613\" target=\"_blank\" rel=\"noopener noreferrer\">Zugriff auf die Klassenvariable, um den Filter zu entfernen.<\/a><\/p>\n<pre><code class=\"language-php\">\/\/ access the class variable first, and then remove the filter through it\nglobal $some_class;\n\nremove_filter( 'the_content', array($some_class, 'class_filter_callback') );<\/code><\/pre>\n<p>Sehen wir uns ein gro\u00dfartiges Beispiel f\u00fcr remove_filter() in Aktion an.<\/p>\n<p>Das <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-ecommerce-plugins\/#woocommerce\" target=\"_blank\" rel=\"noopener noreferrer\">WooCommerce-Plugin<\/a> verwendet die <a href=\"https:\/\/docs.woocommerce.com\/wc-apidocs\/source-function-wc_lostpassword_url.html#13-39\" target=\"_blank\" rel=\"noopener noreferrer\">wc_lostpassword_url()<\/a> Call Funktion, die an seinen <a href=\"https:\/\/docs.woocommerce.com\/wc-apidocs\/source-function-wc_lostpassword_url.html#41\" target=\"_blank\" rel=\"noopener noreferrer\">lostpassword_url<\/a>-Filter gekoppelt ist, um &#8222;<em>Passwort vergessen?<\/em>&#8222;-Versuche von Benutzern umzuleiten.<\/p>\n<p>Jeder Benutzer, der auf diesen Link klickt, wird zu einer benutzerdefinierten Frontend-Seite mit der URL <strong><code>\/my-account\/lost-password<\/code><\/strong> weitergeleitet. Ohne diesen Filter w\u00fcrden sie auf die Standard-WordPress-Login-URL unter <code><strong>\/wp-login.php<\/strong><\/code> weitergeleitet.<\/p>\n<p>Angenommen, du m\u00f6chtest diese Funktion zur\u00fccksetzen und deine Benutzer auf die <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-passworter-andern\/\">Standard-Passwortwiederherstellungsseite<\/a> oder auf eine separate Seite schicken. Du kannst diese Callback-Funktion wie folgt entfernen::<\/p>\n<pre><code class=\"language-php\">remove_filter( 'lostpassword_url', 'wc_lostpassword_url', 10 );\u00a0<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/remove_all_filters\">remove_all_filters()<\/a><\/li>\n<\/ul>\n<p>Diese Filterfunktion entfernt alle Callback-Funktionen, die in einem Filter registriert sind.<\/p>\n<pre><code class=\"language-php\">remove_all_filters( 'filter_name', [priority] );<\/code><\/pre>\n<p>Es ist \u00e4hnlich wie die <strong><code>remove_all_actions()<\/code><\/strong>-Funktion.<\/p>\n<p>Das beliebte <a href=\"https:\/\/github.com\/KimcoBlogSC\/Blog\/blob\/master\/wp-content\/plugins\/advanced-excerpt\/functions\/functions.php\" target=\"_blank\" rel=\"noopener noreferrer\">Advanced Excerpts Plugin<\/a> benutzt diese Funktion, um alle Standardfunktionen zu entfernen, die mit den Filtern <strong><code>the_excerpt<\/code><\/strong> und <strong><code>get_the_excerpt<\/code><\/strong> verbunden sind. Nachdem es das getan hat, h\u00e4ngt es dann seine eigene Callback-Funktion an den Filter an.<\/p>\n<pre><code class=\"language-php\">\/\/ Ensure our filter is hooked, regardless of the page type \nif ( ! has_filter( 'get_the_excerpt', array( $advanced_excerpt, 'filter_excerpt' ) ) ) {\n    remove_all_filters( 'get_the_excerpt' ); \n    remove_all_filters( 'the_excerpt' ); \n    add_filter( 'get_the_excerpt', array( $advanced_excerpt, 'filter_excerpt' ) );\n}<\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/doing_filter\/\">doing_filter()<\/a><\/li>\n<\/ul>\n<p>Diese Filterfunktion pr\u00fcft, ob der angegebene Filter gerade ausgef\u00fchrt wird.<\/p>\n<pre><code class=\"language-php\">if ( doing_filter( 'save_post' ) ) {\n  \u00a0 \/\/ run your code here\n}<\/code><\/pre>\n<p>Es gibt einen booleschen Wert zur\u00fcck (<code><strong>true<\/strong><\/code> oder <code><strong>false<\/strong><\/code>).<\/p>\n<p>Du solltest den Unterschied zwischen dieser Funktion und der <strong><code>current_filter()<\/code><\/strong>-Funktion beachten, die den Namen des Filters oder der Aktion, die gerade ausgef\u00fchrt wird, zur\u00fcckgibt (ein String).<\/p>\n<h4>Filters Beispiel 1: Hinzuf\u00fcgen eines Profanity-Filters f\u00fcr Kommentare<\/h4>\n<p>Die Verwaltung aller <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-kommentar-plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">Kommentare auf deiner WordPress Webseite<\/a> kann ein m\u00fchsamer Prozess sein. Mit dem <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/comment_text\/\" target=\"_blank\" rel=\"noopener noreferrer\">comment_text<\/a> Filter kannst du Regeln aufstellen, um die Kommentare zu \u00e4ndern, bevor sie auf der Seite angezeigt werden.<\/p>\n<figure id=\"attachment_72268\" aria-describedby=\"caption-attachment-72268\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72268 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/ungefilterte-kommentare .png\" alt=\"Ungefilterte Kommentare mit markierten Dummy-Schimpfw\u00f6rtern\" width=\"1100\" height=\"563\"><figcaption id=\"caption-attachment-72268\" class=\"wp-caption-text\">Ungefilterte Kommentare mit markierten Dummy-Schimpfw\u00f6rtern<\/figcaption><\/figure>\n<p>Du kannst WordPress anweisen, alle Schimpfw\u00f6rter automatisch zu entfernen, bevor sie den Besuchern deiner Webseite angezeigt werden. Lass uns zur Sache kommen.<\/p>\n<pre><code class=\"language-php\">\/\/ hook into the 'comment_text' filter with the callback function\nadd_filter( 'comment_text', 'the_profanity_filter' );\n\n\/\/ define a callback function to filter profanities in comments \nfunction the_profanity_filter( $comment_text ) {\n    \/\/ define an array of profane words and count how many are there \n    $profaneWords = array('fudge', 'darn', 'pickles', 'blows', 'dangit');\n    $profaneWordsCount = sizeof($profaneWords);\n    \n    \/\/ loop through the profanities in $comment_text and replace them with '*'\n    for($i=0; $i &lt; $profaneWordsCount; $i++) {\n        $comment_text = str_ireplace( $profaneWords[$i], str_repeat('*', strlen( $profaneWords[$i]) ), $comment_text );\n    } \n    \n    return $comment_text;\n}<\/code><\/pre>\n<p>Hier ist eine zeilenweise Aufschl\u00fcsselung des Codes:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/comment_text\/\" target=\"_blank\" rel=\"noopener noreferrer\">comment_text<\/a> ist ein Filter-Hook, mit dem du den Text eines Kommentars \u00e4ndern kannst, bevor der Browser ihn anzeigt. Du kannst deine Callback-Funktion bei ihm registrieren, um seine Ausgabe zu filtern.<\/li>\n<li>Mit der<strong><code>add_filter()<\/code><\/strong>-Funktion kannst du dich in den <strong><code>comment_text<\/code><\/strong>-Filter einklinken und ihm eine Callback-Funktion anh\u00e4ngen.<\/li>\n<li><strong><code>the_profanity_filter()<\/code><\/strong> ist der Name der Callback-Funktion. Sie akzeptiert nur einen Parameter, n\u00e4mlich einen String, der den Kommentartext enth\u00e4lt. Definiere diese benutzerdefinierte Funktion mit der entsprechenden Code-Logik.<\/li>\n<li>Speichere alle profanen W\u00f6rter in einem PHP-Array namens <strong><code>profaneWords<\/code><\/strong>. Du kannst diesem Array so viele W\u00f6rter hinzuf\u00fcgen, wie du willst. Die Gr\u00f6\u00dfe dieses Arrays speichere ich mit Hilfe der <a href=\"https:\/\/www.php.net\/manual\/en\/function.sizeof.php\" target=\"_blank\" rel=\"noopener noreferrer\">PHP-Funktion sizeof()<\/a> in der Variable profaneWordsCount.<\/li>\n<li>Gehe alle profanen W\u00f6rter durch und benutze die <a href=\"https:\/\/www.php.net\/manual\/en\/function.str-ireplace.php\" target=\"_blank\" rel=\"noopener noreferrer\">PHP-Standardfunktion str_ireplace()<\/a>, um alle \u00fcbereinstimmenden Schimpfw\u00f6rter durch <code><strong>*<\/strong><\/code>-Symbole zu ersetzen. Da dies eine Funktion zum Ersetzen von Strings ohne Ber\u00fccksichtigung der Gro\u00df- und Kleinschreibung ist, brauchst du dir keine Gedanken \u00fcber Gro\u00df- und Kleinschreibung zu machen. Sieh dir die verschiedenen M\u00f6glichkeiten an, wie du eine <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-suchen-und-ersetzen\/\">Suche und Ersetzung<\/a> durchf\u00fchren kannst.<\/li>\n<li>Benutze <strong><code>return<\/code><\/strong>, um den gefilterten Kommentartext auszugeben.<\/li>\n<\/ul>\n<p>Speichere die \u00c4nderungen in deiner eigenen Plugin-Datei und lade jeden Beitrag mit Kommentaren neu. Alle W\u00f6rter, die ihr in das <strong><code>profaneWords<\/code><\/strong>-Array aufgenommen habt, sollten nun durch &#8218;*&#8216;-Symbole ersetzt werden.<\/p>\n<figure id=\"attachment_72256\" aria-describedby=\"caption-attachment-72256\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72256 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/zensierung.png\" alt=\"Zensierung von Schimpfw\u00f6rtern in Kommentaren mit '*'-Symbolen\" width=\"1100\" height=\"563\"><figcaption id=\"caption-attachment-72256\" class=\"wp-caption-text\">Zensierung von Schimpfw\u00f6rtern in Kommentaren mit &#8218;*&#8216;-Symbolen<\/figcaption><\/figure>\n<p>Die Originalkommentare werden weiterhin in der Datenbank verf\u00fcgbar sein. Dieser Filter modifiziert nur den Kommentartext, bevor er auf dem Frontend ausgegeben wird.<\/p>\n<figure id=\"attachment_72263\" aria-describedby=\"caption-attachment-72263\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72263 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/originalkommentar-im-backend.png\" alt=\"Der Originalkommentar im Backend der Webseite\" width=\"1100\" height=\"498\"><figcaption id=\"caption-attachment-72263\" class=\"wp-caption-text\">Der Originalkommentar im Backend der Webseite<\/figcaption><\/figure>\n<p>Wenn du einmal in den richtigen Filter eingehakt bist, kannst du eine Menge cooler Sachen damit machen.<\/p>\n<p>Zum Beispiel kannst du auch den <strong><code>comment_text<\/code><\/strong> Filter benutzen, um alle URLs aus allen Kommentaren zu entfernen (lies unbedingt diese ausf\u00fchrliche Anleitung, <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-spam-kommentare\/\" target=\"_blank\" rel=\"noopener noreferrer\">wie man Spam-Kommentare in WordPress stoppt<\/a>).<\/p>\n<p>Oder du kannst dich in den <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/pre_comment_approved\/\" target=\"_blank\" rel=\"noopener noreferrer\">pre_comment_approved<\/a>-Filter einklinken und Kommentare anhand vordefinierter Kriterien als genehmigt, Spam oder Trash markieren.<\/p>\n<h4>Filter Beispiel 2: Inhalt nach einem Beitrag einf\u00fcgen<\/h4>\n<p>Du hast bereits gesehen, wie WordPress <strong><code>the_content<\/code><\/strong>-Filter benutzt, um Beitr\u00e4ge oder Seiteninhalte zu ver\u00e4ndern. Lass uns den gleichen Filter verwenden, um am Ende jedes Beitrags etwas hinzuzuf\u00fcgen.<\/p>\n<pre><code class=\"language-php\">\/\/ hook into 'the_content' filter with a callback function\nadd_filter( 'the_content', 'insert_content_below' );\n\n\/\/ define the callback function to insert something below the post\nfunction insert_content_below( $content ) {\n    \/\/ check to see if we're inside the main loop in a single post\n    if ( is_single() && in_the_loop() && is_main_query() ) {\n  \u00a0     return $content . \"&lt;h3 style=\\\"text-align: center;\\\"&gt;Let me insert myself here&lt;\/h3&gt;&lt;p style=\\\"text-align: center;border: 3px solid #5333ed;\\\"&gt;I'll appear after the post. You can insert anything here. Even HTML. Headers, links, images, scripts, I'll take them all and append it to the end of the post content. You can also give me a class, so you can style me easily with CSS style sheets.&lt;\/p&gt;\" ;\n    } \n    \n    return $content;\n}<\/code><\/pre>\n<p>Verstehen der Code-Logik im obigen Beispiel:<\/p>\n<ul>\n<li><strong><code>the_content<\/code><\/strong> filter Hook hilft dir, den Inhalt des aktuellen Beitrags zu erfassen und ihn anzupassen.<\/li>\n<li>Benutze die <strong><code>add_filter()<\/code><\/strong>-Funktion, um dich mit der <strong>insert_content_below()<\/strong>-Callback-Funktion in <strong>the_content<\/strong>-Filter einzuklinken.<\/li>\n<li>Definiere die Callback-Funktion, indem du den Inhalt des aktuellen Beitrags als Parameter \u00fcbergibst (<strong><code>$content<\/code><\/strong>).<\/li>\n<li>\u00dcberpr\u00fcfe innerhalb der Callback-Funktion, dass du nur den Inhalt der Hauptabfrage filterst, in diesem Fall den Inhalt des Beitrags. Wenn du dies nicht \u00fcberpr\u00fcfst, filtert der Code manchmal unbeabsichtigt Inhalte von anderen Stellen wie Seitenleisten und Fu\u00dfzeilen.<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/is_main_query\/\" target=\"_blank\" rel=\"noopener noreferrer\">is_main_query()<\/a> und <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/in_the_loop\/#comment-1364\" target=\"_blank\" rel=\"noopener noreferrer\">in_the_loop()<\/a> Bedingungen bestimmen, ob die Abfrage eine Hauptabfrage ist und innerhalb der WordPress Hauptschleife stattfindet.<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/is_single\/\" target=\"_blank\" rel=\"noopener noreferrer\">is_single()<\/a> conditionals pr\u00fcft, ob die Abfrage f\u00fcr einen einzelnen Beitrag ist.<\/li>\n<li>Benutze PHP&#8217;s <a href=\"https:\/\/www.php.net\/manual\/en\/language.operators.string.php\" target=\"_blank\" rel=\"noopener noreferrer\">String-Verkettungsoperator<\/a> (<strong><code>$content . \"deine Zus\u00e4tze\"<\/code><\/strong>), um zus\u00e4tzliche Dinge zum Seiteninhalt hinzuzuf\u00fcgen.<\/li>\n<li>gib den gefilterten Kommentar zur\u00fcck, wenn alle obigen conditionals zutreffen. Wenn nicht, dann gib einfach den Inhalt ohne \u00c4nderungen zur\u00fcck.<\/li>\n<\/ul>\n<p>Speichere deine Plugin-Datei, lade jeden Beitrag auf deiner Webseite und scrolle bis zum Ende.<\/p>\n<figure id=\"attachment_72261\" aria-describedby=\"caption-attachment-72261\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72261 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/etwas-am-ende-des-beitragsinhalts-einfugen.png\" alt=\"Etwas am Ende des Beitragsinhalts einf\u00fcgen\" width=\"1100\" height=\"491\"><figcaption id=\"caption-attachment-72261\" class=\"wp-caption-text\">Etwas am Ende des Beitragsinhalts einf\u00fcgen<\/figcaption><\/figure>\n<p>Du kannst die gleiche Logik verwenden, um am Anfang aller deiner Beitr\u00e4ge etwas hinzuzuf\u00fcgen, indem du die Position der String-Verkettungsparameter umkehrst (<strong>&#8222;<code>deine Zus\u00e4tze\" . $content<\/code><\/strong>).<\/p>\n<h3>Anpassen der WordPress-Anmeldeseite mit Hooks<\/h3>\n<p>Lass uns sowohl Aktionen als auch Filter verwenden, um die <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-url-loggst\/\" target=\"_blank\" rel=\"noopener noreferrer\">Standard-Anmeldeseite<\/a> von WordPress anzupassen. Dazu werde ich ein neues Plugin namens <strong>Sal Custom Login Page<\/strong> erstellen. Den vollst\u00e4ndigen Quellcode dieses Plugins findest du am Ende dieses Abschnitts.<\/p>\n<figure id=\"attachment_72243\" aria-describedby=\"caption-attachment-72243\" style=\"width: 1110px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72243 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/angepasste-wordpress-anmeldebildschirm.jpg\" alt=\"Der finale angepasste WordPress-Anmeldebildschirm\" width=\"1110\" height=\"700\"><figcaption id=\"caption-attachment-72243\" class=\"wp-caption-text\">Der finale angepasste WordPress-Anmeldebildschirm<\/figcaption><\/figure>\n<p>Fangen wir an, indem wir die Standard-Plugin-Header-Felder hinzuf\u00fcgen und es bei WordPress registrieren.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name:  Sal Custom Login Page\nVersion:  1.0\nDescription:  Demonstrating WordPress Hooks (Actions and Filters) by customizing the WordPress login page.\nAuthor:  Salman Ravoof\nAuthor URI:  https:\/\/www.salmanravoof.com\/License: GPLv2 or later\nLicense URI: https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain:  sal-custom-login-page\n*\/\n\n\/\/ enqueueing the custom style sheet on WordPress login page\nadd_action( 'login_enqueue_scripts', 'salhooks_login_stylesheet');\nfunction salhooks_login_stylesheet() {\n    \/\/ Load the style sheet from the plugin folder\n    wp_enqueue_style( 'sal-custom-login-page', plugin_dir_url( __FILE__ ).'sal-custom-login-page-styles.css' );\n}<\/code><\/pre>\n<p>Zuerst musst du dich in die Aktion <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_enqueue_scripts\/\" target=\"_blank\" rel=\"noopener noreferrer\">login_enque_scripts<\/a> einklinken, um dein benutzerdefiniertes Stylesheet in die Warteschlange zu stellen. Alle Skripte oder Styles, die du hier in die Warteschlange stellst, sind in der Kopfzeile deiner Login-Seite enthalten.<\/p>\n<p>Wenn du benutzerdefinierte Skripte und Stylesheets in das Frontend deiner Webseite laden willst (und nicht in das Admin-Backend oder den Login-Bereich), dann brauchst du die <strong><code>wp_enqueue_scripts<\/code><\/strong>-Aktion. Du kannst mehr dar\u00fcber im <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/wp_enqueue_scripts\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress-Codex<\/a> und in <a href=\"https:\/\/kinsta.com\/de\/blog\/wp-enqueue-scripts\/\" target=\"_blank\" rel=\"noopener noreferrer\">Kinstas Artikel \u00fcber die Verwendung von wp_enqueue_scripts<\/a> lesen.<\/p>\n<p>Innerhalb der <strong><code>salhooks_login_stylesheet()<\/code><\/strong>-Callback-Funktion, benutze die <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_enqueue_style\/\" target=\"_blank\" rel=\"noopener noreferrer\">wp_enqueue_style()<\/a>-Funktion, um das benutzerdefinierte Stylesheet (<strong><code>sal-custom-login-page-styles.css<\/code><\/strong>) zu laden, das sich im Verzeichnis desselben Plugins befindet. WordPress&#8216; eingebaute <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/plugin_dir_url\/\" target=\"_blank\" rel=\"noopener noreferrer\">plugin_dir_url( __FILE__ )<\/a> Funktion macht es einfach, den URL-Pfad (mit einem abschlie\u00dfenden Schr\u00e4gstrich) des aktuellen Plugin-Verzeichnisses zu ermitteln.<\/p>\n<p>Ich werde hier nicht die angewandten <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-css\/#wordpress-and-css\">CSS-Stile<\/a> erkl\u00e4ren, aber du kannst sie alle im Quellcode finden, der am Ende dieses Abschnitts verlinkt ist.<\/p>\n<pre><code class=\"language-php\">\/\/ Custom login ERROR message to keep the site more secure\nadd_filter( 'login_errors', 'salhooks_remove_login_errors', 10 );\nfunction salhooks_remove_login_errors() {\n    return 'Incorrect credentials. Please try again!';\n}<\/code><\/pre>\n<p>Als n\u00e4chstes hakst du dich in den Filter <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_errors\/\" target=\"_blank\" rel=\"noopener noreferrer\">login_errors<\/a> ein, um die Fehlermeldung zu \u00e4ndern, die angezeigt wird, wenn jemand falsche Anmeldedaten eingibt. Das Filtern der Fehlermeldung wird Angreifer daran hindern, deinen Benutzernamen leicht zu erraten.<\/p>\n<pre><code class=\"language-php\">\/\/ Remove the login form box shake animation for incorrect credentials\nadd_action( 'login_head', 'remove_login_error_shake' );\nfunction remove_login_error_shake() {\n    remove_action( 'login_head', 'wp_shake_js', 12 );\n}<\/code><\/pre>\n<p>Jedes Mal, wenn jemand falsche Anmeldedaten eingibt, sch\u00fcttelt die Login-Formularbox aggressiv. Dies ist ein optionaler Schritt, aber ich habe ihn eingef\u00fcgt, um zu zeigen, dass man bestimmte Funktionen auch von der Login-Seite entfernen kann.<\/p>\n<p>Mehr \u00fcber die <code><strong>remove_action()<\/strong><\/code> und <code><strong>remove_filter()<\/strong><\/code> -Funktionen erf\u00e4hrst du im letzten Abschnitt dieses Artikels.<\/p>\n<pre><code class=\"language-php\">\/\/ Change the logo and header link above the login form\nadd_filter( 'login_headerurl', 'salhooks_login_headerurl');\nfunction salhooks_login_headerurl( $url ) {\n    $url = 'https:\/\/salmanravoof.com';\n    return $url;\n}\n\nadd_filter( 'login_headertext', 'salhooks_login_headertext');\nfunction salhooks_login_headertext( $text ) {\n    $text = 'Salman Ravoof';\n    return $text;\n}<\/code><\/pre>\n<p>Der letzte Schritt besteht darin, die URL und den Text des Login-Headers zu \u00e4ndern. Du kannst dich in die Filter <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_headerurl\/\" target=\"_blank\" rel=\"noopener noreferrer\">login_headerurl<\/a> und <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/login_headertext\/\" target=\"_blank\" rel=\"noopener noreferrer\">login_headertext<\/a> einklinken, um sie beide zu \u00e4ndern.<\/p>\n<p>Wenn du auf diesem Plugin aufbauen und weiter experimentieren m\u00f6chtest, kannst du den <a href=\"https:\/\/github.com\/SalmanRavoof\/sal-custom-login-page\" target=\"_blank\" rel=\"noopener noreferrer\">Quellcode des Plugins herunterladen<\/a> und loslegen<\/p>\n<h2>WordPress Hooks Liste und Ressourcen<\/h2>\n<p>Es ist schwer, sich all die verschiedenen Hooks von WordPress zu merken. Es gibt tausende von eingebauten Aktionen und Filtern, in die man sich einklinken kann. Daher kann sich das Finden eines passenden Hooks manchmal wie eine Schnitzeljagd anf\u00fchlen.<\/p>\n<p>Gl\u00fccklicherweise gibt es verschiedene Ressourcen, die du nutzen kannst, um den perfekten Hook f\u00fcr deine Bed\u00fcrfnisse zu finden.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/\">WordPress Plugin Handbook \u2014 Hooks<\/a><\/li>\n<\/ul>\n<p>Der erste Ort, an dem man sich mit Hooks vertraut machen kann, ist der WordPress Codex, insbesondere die Hooks-Sektion im Plugin-Handbuch. Hier findest du wichtige Informationen \u00fcber Hooks und Links zur vollst\u00e4ndigen Dokumentation aller Aktionen und Filter.<\/p>\n<figure id=\"attachment_72272\" aria-describedby=\"caption-attachment-72272\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72272 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/wordpress-plugin-handbook-hooks.png\" alt=\"Fang an, Hooks mit dem WordPress Plugin-Handbuch zu lernen\" width=\"1100\" height=\"539\"><figcaption id=\"caption-attachment-72272\" class=\"wp-caption-text\">Fang an, Hooks mit dem WordPress Plugin-Handbuch zu lernen<\/figcaption><\/figure>\n<p>Setze ein Lesezeichen f\u00fcr diese hilfreichen Links aus dem Plugin-Handbuch, um deine Suche zu beschleunigen:<\/p>\n<ul>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API#Function_Reference\">Plugin API \u2014 Hooks Funktionreferenz<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\">Plugin API \u2014 Aktionreferenz<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\">Plugin API \u2014 Filter-Refenenz<\/a><\/li>\n<\/ul>\n<p>Sowohl die Aktions- als auch die Filter-Referenzseiten geben dir eine Liste aller Hooks, die normalerweise w\u00e4hrend einer bestimmten WordPress-Anfrage laufen.<\/p>\n<p>Du kannst zum Beispiel alle Hooks finden, die beim Zugriff auf eine Admin-Seite, beim Umgang mit Anh\u00e4ngen von Postingseiten oder mit <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-eine-taxonomie\/\" target=\"_blank\" rel=\"noopener noreferrer\">Kategorien<\/a> ausgel\u00f6st werden.<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/\">WordPress Code-Referenz<\/a><\/li>\n<\/ul>\n<p>Der WordPress Codex enth\u00e4lt auch ein praktisches Suchtool, um alle seine Funktionen, Hooks, Methoden und Klassen zu finden. Diese Seite listet auch neue und aktualisierte Komponenten in der neuesten Version von WordPress auf. Kommt zuerst hierher, wenn ihr herausfinden wollt, was in WordPress passiert.<\/p>\n<figure id=\"attachment_72271\" aria-describedby=\"caption-attachment-72271\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72271 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/allem-innenhalb-suchen.png\" alt=\"Hier kannst du nach allem innerhalb von WordPress suchen\" width=\"1100\" height=\"381\"><figcaption id=\"caption-attachment-72271\" class=\"wp-caption-text\">Hier kannst du nach allem innerhalb von WordPress suchen<\/figcaption><\/figure>\n<ul>\n<li><a href=\"https:\/\/adambrown.info\/p\/wp_hooks\/hook\">Adam R Browns WordPress Hooks Index<\/a><\/li>\n<\/ul>\n<p>Dieser Index von WordPress Hooks sortiert alle Hooks nach Typ, der WordPress Version, die sie deb\u00fctiert haben, und ob sie veraltet sind.<\/p>\n<figure id=\"attachment_72248\" aria-describedby=\"caption-attachment-72248\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72248 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/adam-r-browns-wordpress-hooks-index.png\" alt=\"Adam R Browns WordPress Hooks Index\" width=\"1100\" height=\"363\"><figcaption id=\"caption-attachment-72248\" class=\"wp-caption-text\">Adam R Browns WordPress Hooks Index<\/figcaption><\/figure>\n<p>Wenn du die Hooks nach ihrem Aussehen sortierst, wirst du sehen, dass die \u00e4ltesten WordPress Hooks immer noch die meistbenutzten sind. Wenn du <a href=\"https:\/\/kinsta.com\/de\/blog\/tutorials-php\/\" target=\"_blank\" rel=\"noopener noreferrer\">neu in der WordPress-Entwicklung<\/a> bist, ist es der schnellste Weg, sich mit diesen beliebten Aktionen und Filtern vertraut zu machen.<\/p>\n<p>Obwohl dieser Index seit WordPress 5.1 nicht mehr aktualisiert wurde, ist es trotzdem hilfreich, alle wichtigen Hooks zu \u00fcberfliegen.<\/p>\n<p>F\u00e4llt es dir immer noch schwer, den gew\u00fcnschten Hook zu finden? Eine Online-Suche mit dem richtigen Stichwort ist immer ein guter Anfang. Wenn alles andere fehlschl\u00e4gt, kannst du dich jederzeit in den WordPress-Code einarbeiten.<\/p>\n<h2>Auf einer WordPress-Seite registrierte Hooks finden<\/h2>\n<p>Wie wir gesehen haben, hat WordPress tonnenweise Hooks zur Verf\u00fcgung, aber nicht jeder Hook feuert auf jeder Seite. Wenn du herausfinden kannst, in welche Aktionen und Filter du dich auf einer bestimmten Seite einklinken kannst, dann hast du die halbe Schlacht gewonnen.<\/p>\n<p>W\u00e4hrend du fortgeschrittene PHP-Debugging-Werkzeuge wie <a href=\"https:\/\/xdebug.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">xdebug<\/a> und <a href=\"https:\/\/github.com\/squizlabs\/PHP_CodeSniffer\" target=\"_blank\" rel=\"noopener noreferrer\">PHPCS<\/a> nutzen kannst, um dir dabei zu helfen, gibt es einfachere Entwicklungswerkzeuge wie Debug Bar und Query Monitor, die du innerhalb von WordPress laufen lassen kannst.<\/p>\n<h3>Debug Bar mit Aktionen und Filter Add-On<\/h3>\n<p><a href=\"https:\/\/wordpress.org\/plugins\/debug-bar\/\" target=\"_blank\" rel=\"noopener noreferrer\">Debug Bar<\/a> ist ein offizielles WordPress-Plugin, das ein <strong>Debug<\/strong>-Men\u00fc zu deiner Admin-Leiste hinzuf\u00fcgt. Es zeigt PHP-Warnungen und Hinweise, Cache-Anfragen, <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-mysql\/\" target=\"_blank\" rel=\"noopener noreferrer\">MySQL-Abfragen<\/a> und <a href=\"https:\/\/kinsta.com\/de\/blog\/debugging-wordpress\/\" target=\"_blank\" rel=\"noopener noreferrer\">andere hilfreiche Debugging-Informationen<\/a> an.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Dieses Plugging wurde weder k\u00fcrzlich aktualisiert, noch mit den neuesten Hauptversionen von WordPress getestet. Wir erw\u00e4hnen es als ein praktisches Plugin, um mehr \u00fcber WordPress Hooks zu lernen. Benutze es in einer <a href=\"https:\/\/kinsta.com\/de\/docs\/wordpress-hosting\/staging-umgebung\/\" target=\"_blank\" rel=\"noopener noreferrer\">Staging-Umgebung<\/a>.<\/p>\n<\/aside>\n\n<figure id=\"attachment_72542\" aria-describedby=\"caption-attachment-72542\" style=\"width: 1500px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/debug-bar-plugin.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72542 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/debug-bar-plugin.jpg\" alt=\"Das WordPress Debug Bar WordPress-Plugin\" width=\"1500\" height=\"500\"><\/a><figcaption id=\"caption-attachment-72542\" class=\"wp-caption-text\">Das WordPress Debug Bar WordPress-Plugin<\/figcaption><\/figure>\n<p>Nachdem du das Plugin installiert hast, ben\u00f6tigst du den untenstehenden Code-Schnipsel in der <strong><code>wp-config.php<\/code><\/strong>-Datei deiner Webseite, um die Debugging-Funktionen zu aktivieren.<\/p>\n<pre><code class=\"language-php\">define( 'WP_DEBUG', true ); \/\/ tracks PHP Warnings and Notices\ndefine( 'SAVEQUERIES', true ); \/\/ tracks and displays MySQL queries<\/code><\/pre>\n<p>Du solltest jetzt die <strong>Debug<\/strong>-Men\u00fcoption in deiner Admin-Leiste sehen. Wenn du darauf klickst, gelangst du zu ihrem Dashboard, wo du verschiedene Abfragen und Caches sehen kannst, die an die Seite angeh\u00e4ngt sind, von der aus du sie aufgerufen hast.<\/p>\n<figure id=\"attachment_72273\" aria-describedby=\"caption-attachment-72273\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72273 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/debug-menu.png\" alt=\"Das 'Debug'-Men\u00fc in der WordPress-Administrationsleiste\" width=\"1100\" height=\"363\"><figcaption id=\"caption-attachment-72273\" class=\"wp-caption-text\">Das &#8218;Debug&#8216;-Men\u00fc in der WordPress-Administrationsleiste<\/figcaption><\/figure>\n<p>Als n\u00e4chstes brauchst du das <a href=\"https:\/\/wordpress.org\/plugins\/debug-bar-actions-and-filters-addon\/\" target=\"_blank\" rel=\"noopener noreferrer\">Debug Bar Actions and Filters Addon Plugin<\/a> zu installieren. Es ist eine praktische Erweiterung, die zwei weitere Tabs zu deinem Debug Bar Dashboard hinzuf\u00fcgt, um Aktionen und Filter anzuzeigen, die bei der aktuellen Anfrage ausgel\u00f6st wurden.<\/p>\n<figure id=\"attachment_72253\" aria-describedby=\"caption-attachment-72253\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72253 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/aktionen-in-der-reihenfolge.png\" alt=\"Aktionen in der Reihenfolge, in der sie f\u00fcr die aktuelle Seite geladen wurden\" width=\"1100\" height=\"491\"><figcaption id=\"caption-attachment-72253\" class=\"wp-caption-text\">Aktionen in der Reihenfolge, in der sie f\u00fcr die aktuelle Seite geladen wurden<\/figcaption><\/figure>\n<p>Au\u00dferdem werden alle Funktionen mit ihrer Priorit\u00e4t aufgelistet, die an sie angeschlossen sind.<\/p>\n<figure id=\"attachment_72254\" aria-describedby=\"caption-attachment-72254\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72254 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/registrierten-callback-funktionen.png\" alt=\"Filter aufgelistet mit ihrer Priorit\u00e4t und registrierten Callback-Funktionen\" width=\"1100\" height=\"509\"><figcaption id=\"caption-attachment-72254\" class=\"wp-caption-text\">Filter aufgelistet mit ihrer Priorit\u00e4t und registrierten Callback-Funktionen<\/figcaption><\/figure>\n<p>Du kannst von jeder Seite deiner Webseite aus auf das <strong>Debug<\/strong>-Men\u00fc klicken, um alle Aktionen und Filter zu kennen, die du auf dieser Seite ausf\u00fchren kannst.<\/p>\n<h3>Query Monitor<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/de\/blog\/query-monitor\/\" target=\"_blank\" rel=\"noopener noreferrer\">Query Monitor<\/a> ist ein leistungsstarkes Entwicklerwerkzeug-Panel f\u00fcr WordPress. Du kannst es benutzen, um die auf einer Seite verf\u00fcgbaren Hooks und ihre Ladereihenfolge zu ermitteln.<\/p>\n<figure id=\"attachment_72543\" aria-describedby=\"caption-attachment-72543\" style=\"width: 1500px\" class=\"wp-caption alignright\"><a href=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/query-monitor.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72543 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/query-monitor.jpg\" alt=\"Query Monitor WordPress Plugin\" width=\"1500\" height=\"500\"><\/a><figcaption id=\"caption-attachment-72543\" class=\"wp-caption-text\">Query Monitor WordPress Plugin<\/figcaption><\/figure>\n<p>Anders als bei der Debug Bar musst du keine Addons installieren, um die Aktionen und Filter zu sehen, die auf einer bestimmten Seite ausgel\u00f6st werden.<\/p>\n<figure id=\"attachment_72267\" aria-describedby=\"caption-attachment-72267\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72267 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/query-monitor-wordpress-menu.png\" alt=\"Du kannst den Query Monitor von der Admin Bar aus aufrufen\" width=\"1100\" height=\"438\"><figcaption id=\"caption-attachment-72267\" class=\"wp-caption-text\">Du kannst den Query Monitor von der Admin Bar aus aufrufen<\/figcaption><\/figure>\n<p>Query Monitor gibt dir auch mehr Informationen dar\u00fcber, von wo genau ein Hook abgefeuert wird.<\/p>\n<figure id=\"attachment_72266\" aria-describedby=\"caption-attachment-72266\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72266 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/query-monitor-hooks-and-actions-panel.png\" alt=\"Das Hooks &#038; Actions Panel im Query Monitor\" width=\"1100\" height=\"642\"><figcaption id=\"caption-attachment-72266\" class=\"wp-caption-text\">Das Hooks &#038; Actions Panel im Query Monitor<\/figcaption><\/figure>\n<p>In der Komponenten-Spalte siehst du, dass die meisten Hooks vom Core registriert werden. Aber einige Hooks werden von einem Theme oder Plugin registriert. Einige wenige Hooks k\u00f6nnen von mehr als einer Komponente registriert werden.<\/p>\n<p>Du kannst die <a href=\"https:\/\/kinsta.com\/de\/blog\/dropdown-menu-wordpress\/\" target=\"_blank\" rel=\"noopener noreferrer\">Dropdown-Men\u00fcs<\/a> f\u00fcr Hooks und Komponenten verwenden, um nur die Hooks anzuzeigen, die du ben\u00f6tigst.<\/p>\n<p><strong>Hinweis<\/strong>: Query Monitor verwendet &#8222;Hooks&#8220; als Sammelbegriff sowohl f\u00fcr Aktionen als auch f\u00fcr Filter, ruft aber die registrierten Callback-Funktionen als &#8222;Actions&#8220; auf. Dies ist technisch gesehen eine falsche Definition und kann dich verwirren, also behalte das im Hinterkopf.<\/p>\n<p>Mit Query Monitor kannst du mehr tun, als nur alle Anfragen und W\u00fcnsche \u00fcberpr\u00fcfen. Er enth\u00e4lt auch fortgeschrittene Funktionen wie Listenstile, Skripte, <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-multilingual\/\" target=\"_blank\" rel=\"noopener noreferrer\">Sprachen<\/a>, <a href=\"https:\/\/kinsta.com\/de\/blog\/admin-ajax-php\/\" target=\"_blank\" rel=\"noopener noreferrer\">Ajax-Aufrufe<\/a>, \u00dcberpr\u00fcfung der Benutzerf\u00e4higkeiten und <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-rest-api\/\" target=\"_blank\" rel=\"noopener noreferrer\">REST API-Aufrufe<\/a>.<\/p>\n<h2>Der &#8222;all&#8220; Hook<\/h2>\n<p>WordPress hat <a href=\"https:\/\/developer.wordpress.org\/plugins\/hooks\/advanced-topics\/#debugging-with-the-all-hook\" target=\"_blank\" rel=\"noopener noreferrer\">einen speziellen Hook namens &#8218;all&#8216;<\/a>, in den du dich einklinken kannst, um eine Callback-Funktion f\u00fcr jeden einzelnen Hook auszuf\u00fchren, unabh\u00e4ngig davon, ob er bei allen registriert ist. Er ist n\u00fctzlich, um <a href=\"https:\/\/kinsta.com\/de\/blog\/debugging-wordpress\/\" target=\"_blank\" rel=\"noopener noreferrer\">Seitenabst\u00fcrze zu debuggen<\/a> oder wenn du wissen willst, wann ein bestimmtes Ereignis stattfindet.<\/p>\n<p>Zum Beispiel kannst du den <strong><code>all<\/code><\/strong>-Hook wie im Beispiel unten verwenden, um alle Aktionen, die gerade ausgef\u00fchrt werden, zu <strong><code>echoen<\/code><\/strong>.<\/p>\n<pre><code class=\"language-php\">\/\/ echo all the actions being run\nfunction debug_helper_function(){\n\u00a0 \u00a0 echo '&lt;p&gt;' . current_action() . '&lt;\/p&gt;';\n}\nadd_action( 'all', 'debug_helper_function' );<\/code><\/pre>\n<p>Die oben <strong><code>definierte debug_helper_function()<\/code><\/strong> wird ausgef\u00fchrt, wenn eine Aktion ausgel\u00f6st wird. Wenn du wei\u00dft, was die letzte ausgef\u00fchrte Aktion war, kannst du dir besser vorstellen, wo du nachschauen musst.<\/p>\n<h2>Wo werden WordPress Hooks gelagert?<\/h2>\n<p>WordPress benutzt die <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_hook\/\" target=\"_blank\" rel=\"noopener noreferrer\">WP_Hook<\/a> Klasse, um die Funktionsweise von Hooks zu implementieren. Diese Kernklasse wird verwendet, um alle eingebauten WordPress-Aktionen und Filter zu handhaben. Du kannst fast den gesamten Code zu dieser Klasse in der <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/5.4\/src\/wp-includes\/class-wp-hook.php\" target=\"_blank\" rel=\"noopener noreferrer\">wp-includes\/class-wp-hook.php<\/a> Datei finden.<\/p>\n<p>Technisch gesehen ist die WP_Hook-Klasse ein Array von Objekten mit Eigenschaften wie Callbacks, Iterationen, <strong><code>current_priority, nesting_level<\/code><\/strong> und <strong><code>doing_action<\/code><\/strong>. Sie definiert auch eine Menge n\u00fctzlicher Hook-Funktionen, die mit den <a href=\"https:\/\/developer.wordpress.org\/reference\/files\/wp-includes\/class-wp-hook.php\/\" target=\"_blank\" rel=\"noopener noreferrer\">WP_Hook-Methoden<\/a> aufgerufen werden k\u00f6nnen.<\/p>\n<p>Die meisten WordPress-Entwickler m\u00fcssen sich nicht viel Gedanken dar\u00fcber machen, wo WordPress Hooks speichert, solange sie sich an die Richtlinien der Plugin-API halten.<\/p>\n\n<h2>Wie du deine eigenen WordPress Hooks erstellst<\/h2>\n<p>Du hast die verschiedenen Hooks gesehen, die WordPress dir \u00fcber seine Plugin-API bietet. Du hast dir auch angeschaut, wie du die Standard-Hooks benutzen kannst, um deinen eigenen Code in die WordPress Runtime einzuf\u00fcgen.<\/p>\n<p>Wenn du ein <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-entwicklergehalt\/\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin- oder Theme-Entwickler<\/a> bist, ist es eine gute Idee, anderen Entwicklern eine M\u00f6glichkeit zu bieten, auf die gleiche Weise mit deinem Code zu interagieren. Mit benutzerdefinierten Hooks kannst du genau das tun. Sie erm\u00f6glichen es anderen Entwicklern, die Funktionalit\u00e4t deiner Plugins und Themes zu erweitern und zu ver\u00e4ndern.<\/p>\n<p>Eigene Aktionen und Filter zu erstellen ist ziemlich einfach. Du benutzt die gleichen Funktionen, die WordPress Core zum Erstellen von Hooks verwendet. Schauen wir uns ein paar Beispiele an.<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"disc\" selector=\"h3\" count-number=\"6\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>Wie man benutzerdefinierte Aktionen in WordPress erstellt<\/h3>\n<p>Benutze die <strong><code>do_action()<\/code><\/strong>-Funktion, um einen eigenen Action Hook zu erstellen. Hier siehst du, wie du es machst:<\/p>\n<pre><code class=\"language-php\">\/\/ the position where you insert your action is where it'll run when called\ndo_action( ' my_unique_custom_action' );\n\/\/ continue with the rest of your code<\/code><\/pre>\n<p>Jetzt k\u00f6nnen sich andere Entwickler in dein Plugin oder Theme einklinken, ohne den Quellcode zu ver\u00e4ndern. Alles was sie tun m\u00fcssen, ist ihre Callback-Funktionen mit der <strong><code>add_action()<\/code><\/strong>-Funktion in der benutzerdefinierten Aktion deines Plugins zu registrieren.<\/p>\n<pre><code class=\"language-php\">add_action( 'my_unique_custom_action', 'some_callback_function' );\n\n\/\/ define the callback function you mentioned in the above action function\nsome_callback_function() {\n     \/\/ this code will run wherever your custom action hook is \n}<\/code><\/pre>\n<p>Stelle sicher, dass du deine Custom Hooks gr\u00fcndlich <strong>dokumentierst<\/strong> und erkl\u00e4rst, was sie im Detail tun. Schlie\u00dflich dient das Erstellen von benutzerdefinierten Hooks haupts\u00e4chlich dazu, <a href=\"https:\/\/kinsta.com\/de\/blog\/gehalt-webentwickler\/\" target=\"_blank\" rel=\"noopener noreferrer\">anderen Entwicklern<\/a> bei der Interaktion mit deinem Code zu helfen.<\/p>\n<h3>Wie man einen benutzerdefinierten Filter in WordPress erstellt<\/h3>\n<p>Benutze die <strong><code>apply_filters()<\/code><\/strong>-Funktion, um einen benutzerdefinierten Filter-Hook zu erstellen. Hier siehst du, wie du es machen kannst:<\/p>\n<pre><code class=\"language-php\">$value_to_filter = \"I'm a string, but this can be any PHP data type\";\n\n\/\/ filters modify a value and are typically tied to a predefined variable\napply_filters( 'my_custom_filter', $value_to_filter );<\/code><\/pre>\n<p>Die Parameter deines benutzerdefinierten Filters sollten eine eindeutige Kennung und einen zu filternden Wert enthalten. Andere Entwickler k\u00f6nnen sich mit der <strong><code>add_filter()<\/code><\/strong>-Funktion in deinen benutzerdefinierten Filter einklinken und den \u00fcbergebenen Wert \u00e4ndern.<\/p>\n<pre><code class=\"language-php\">add_filter( 'my_custom_filter', 'some_callback_function' );\n\n\/\/ define the callback function you mentioned in the above filter function\nfunction some_callback_function( $value_to_filter ) {\n    \/\/ modify the passed value (or not) \n    return $value_to_filter; \/\/ returning a value is a must for filters\n}<\/code><\/pre>\n<p>Wenn du deinen benutzerdefinierten Filter definierst, stelle sicher, dass er nicht vor dem Wert positioniert ist, den er filtern soll. Wenn du den Filter nicht richtig positionierst, wird der gefilterte Wert danach mit dem Standardwert \u00fcberschrieben.<\/p>\n<h3>Konvention zur Benennung von Custom Hooks<\/h3>\n<p>Es ist wichtig, einen eindeutigen Namen f\u00fcr alle deine Custom Hooks zu w\u00e4hlen. Da jedes Plugin oder Theme seine eigenen benutzerdefinierten Hooks haben kann es bei identischen Hook-Namen zu Code-Kollisionen mit unerwarteten Ergebnissen kommen.<\/p>\n<p>Wenn du zum Beispiel deiner Aktion <strong><code>send_email<\/code><\/strong> einen Namen gibst, ist es sehr wahrscheinlich, dass andere Plugin-Entwickler ebenfalls den gleichen Begriff w\u00e4hlen, da er nicht eindeutig genug ist. Wenn irgendeine Webseite sowohl deine als auch die Plugins der anderen Entwickler installiert, <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-fehler\/\" target=\"_blank\" rel=\"noopener noreferrer\">kann es zu Fehlern kommen, die schwer zu verfolgen sind<\/a>.<\/p>\n<p>Du kannst allen deinen benutzerdefinierten Hooks einen gemeinsamen Bezeichner voranstellen, um sie einfach und einzigartig zu halten. Anstelle von <strong><code>send_email<\/code><\/strong> kannst du es also <strong><code>plugin_name_send_email<\/code><\/strong> nennen (<strong>plugin_name_<\/strong> ist hier der einzigartige Pr\u00e4fix).<\/p>\n<h3>Custom Hooks Demo mit einem erweiterbaren Plugin<\/h3>\n<p>Lasst uns ein erweiterbares Plugin (oder ein Pluggable-Plugin) erstellen, das es anderen Entwicklern erlaubt, mit ihm zu interagieren, indem sie seine eigenen Hooks benutzen.<\/p>\n<p>Ich werde dieses Plugin <strong>Custom Hooks Demo<\/strong> nennen. Seine Hauptfunktion ist es, eine Zitatbox auszugeben, wo immer du einen Shortcode einf\u00fcgst. Es wird benutzerdefinierte Aktionen und Filter an den richtigen Stellen enthalten, um es anderen Entwicklern zu erm\u00f6glichen, die Funktionalit\u00e4t des Plugins zu ver\u00e4ndern oder zu erweitern.<\/p>\n<p>Du kannst in meinem <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-shortcodes\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress Shortcodes Guide<\/a> nachschlagen, um mehr dar\u00fcber zu erfahren, wie Shortcodes funktionieren.<\/p>\n<p>Lasst uns mit dem erweiterbaren Plugin anfangen.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name :  Custom Hooks Demo\nDescription :  Demonstrating how to create an extensible WordPress plugin using custom hooks.\nAuthor      :  Salman Ravoof\nAuthor URI  :  https:\/\/salmanravoof.com\/\nLicense     :  GPLv2 or later\nLicense URI :  https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain :  custom-hooks-demo\n*\/\n\n\/** \n * the [custom_hooks_demo] shortcode returns the HTML code for a quote box.\n * @return string HTML code for a quote box\n*\/\nadd_shortcode( 'custom_hooks_demo', 'my_shortcode_callback' );\n\nfunction my_shortcode_callback ( $arguments ) {\n    ob_start(); \/\/ start object buffering to collect all output before sending it to the browser\n    \n    \/\/ set an action hook to run before you output anything\n    do_action( 'the_topmost_custom_action' );\n    \n    \/\/ define your variables which you want to allow to be filtered\n    $quote_content = \"Z.E.R.O. That's the number of people who'd like to have any website autoplay music on their browsers.\";\n    $quote_author = \"John Doenuts\";\n    \n    \/\/ create your custom filters after you've set the variables\n    $quote_content = apply_filters( 'custom_quote_content', $quote_content );\n    $quote_author = apply_filters( 'custom_quote_author', $quote_author );\n    \n    \/\/ build the shortcode output template\n    echo \"&lt;div style=\\\"border:3px solid #5333ed;\\\"&gt;&lt;blockquote style=\\\"margin:20px;border-color:#5333ed;\\\"&gt;\";\n    echo $quote_content;\n    echo \"&lt;br&gt;&lt;br&gt;\";\n    echo \"\u2015 &lt;strong&gt;\" . $quote_author . \"&lt;\/strong&gt;\";\n    echo \"&lt;\/blockquote&gt;&lt;\/div&gt;\";\n    \n    \/\/ set an action hook to run after you output everything\n    do_action( 'the_ending_custom_action' );\n    \n    return ob_get_clean(); \/\/ get buffer contents, delete the buffer, and then stop buffering\n}<\/code><\/pre>\n<ul>\n<li>Die <strong><code>add_shortcode()<\/code><\/strong>-Funktion wird verwendet, um den benutzerdefinierten Shortcode zu erstellen. Und dann definierst du die Callback-Funktion des Shortcodes mit all der Funktionalit\u00e4t dieses Plugins.<\/li>\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/function.ob-start.php\" target=\"_blank\" rel=\"noopener noreferrer\">ob_start()<\/a> ist eine PHP-Funktion, die das Puffern der Ausgabe erm\u00f6glicht. Es ist eine superpraktische Funktion, die PHP anweist, jede Ausgabe im Pufferspeicher des Servers zu halten, anstatt sie sofort auszugeben. Du kannst sie benutzen, um komplexen, lesbaren HTML-Code in PHP zu erstellen.<\/li>\n<li><strong><code>do_action( 'the_topmost_custom_action' )<\/code><\/strong> definiert deine erste benutzerdefinierte Aktion. Um sie n\u00fctzlich zu machen, ben\u00f6tigst du sie, bevor das Plugin etwas ausgibt. Andere Entwickler k\u00f6nnen sich in diese benutzerdefinierte Aktion einklinken, um ihren Code auszuf\u00fchren, bevor dieser benutzerdefinierte Shortcode etwas ausgibt.<\/li>\n<li>Erstelle die Variablen, die du filtern m\u00f6chtest. In diesem Plugin sind diese Variablen <strong>$<code>quote_content<\/code><\/strong> und <strong>$<code>quote_author<\/code><\/strong>. In diesem Beispiel sind das beides Strings, aber du kannst sie auf einen beliebigen PHP-Datentyp setzen (z.B. integer, boolean, array).<\/li>\n<li>Benutze die Funktion <strong><code>apply_filters<\/code>()<\/strong>, um deine eigenen Filter zu erstellen. Da alle Filter einen Wert zur\u00fcckgeben, kannst du dem R\u00fcckgabewert dieses Filters die zuvor definierten Variablen zuweisen. Andere Entwickler k\u00f6nnen sich nun in diesen Filter einklinken, um die Standardwerte der vordefinierten Variablen zu \u00e4ndern.<\/li>\n<li>Benutze <strong><code>echo<\/code><\/strong>-Anweisungen, um die Ausgabe deines Shortcode Zeile f\u00fcr Zeile zu erstellen. Da wir die Ausgabepufferung aktiviert haben, wird keine Ausgabe sofort den Browser erreichen.<\/li>\n<li><strong><code>do_action( 'the_ending_custom_action' )<\/code><\/strong> definiert deine letzte benutzerdefinierte Aktion. Du brauchst sie ganz am Ende zu definieren, aber bevor du den ganzen Pufferinhalt zur\u00fcckgibst.<\/li>\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/function.ob-get-clean.php\" target=\"_blank\" rel=\"noopener noreferrer\">ob_get_clean()<\/a> ist eine standardm\u00e4\u00dfige 3-in-1 PHP-Funktion. Sie wird den Pufferinhalt abrufen, alle Pufferdaten l\u00f6schen und dann die Ausgabepufferung stoppen. Sie wird den gesammelten Pufferinhalt als einen einzelnen verketteten String zur\u00fcckgeben.<\/li>\n<\/ul>\n<p>Sobald sie gespeichert und aktiviert ist, wird beim Hinzuf\u00fcgen des <strong><code>[custom_hooks_demo]<\/code><\/strong> Shortcodes zu deinem Post-Inhalt eine Zitatbox mit den Standardwerten ausgegeben.<\/p>\n<div class=\"mceTemp\">\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72264 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2020\/05\/Original-Quotation-Box-Custom-Hooks-Demo.png\" alt=\"Die originale Zitat-Box mit dem Custom Hooks Demo-Plugin\" width=\"1100\" height=\"530\"><\/p>\n<p>Nun lasst uns ein weiteres Plugin namens <strong>Custom Hooks Demo Extension<\/strong> erstellen. Es wird sich in alle benutzerdefinierten Hooks einklinken, die vom vorherigen Plugin erstellt wurden, und etwas tun oder \u00e4ndern.<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\n\/*\nPlugin Name :  Custom Hooks Demo Extension\nDescription :  Demonstrating how you can extend WordPress plugin functionality with its custom hooks.\nAuthor      :  Salman Ravoof\nAuthor URI  :  https:\/\/salmanravoof.com\/\nLicense     :  GPLv2 or later\nLicense URI :  https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\nText Domain :  custom-hooks-demo-extension\n*\/\n\n\/**\n * replace the quote content by hooking into the 'custom_quote_content' filter\n*\/\nadd_filter( 'custom_quote_content', 'new_quote_content_callback' );\nfunction new_quote_content_callback( $content ) {\n    $content = \"There are no bugs in programming. Only unexpected features.\";\n    return $content;\n}\n\n\/**\n * replace the quote author by hooking into the 'custom_quote_author'\n*\/\nadd_filter( 'custom_quote_author', 'new_quote_author_callback' );\nfunction new_quote_author_callback( $author ) {\n    $author = \"Jane Doodle\";\n    return $author;\n}\n\n\/**\n * add an image to the top of the shortcode output by hooking into the 'the_topmost_custom_action'\n*\/\nadd_action( 'the_topmost_custom_action', 'quote_image_callback' );\nfunction quote_image_callback() {\n    $url = \"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/f\/f9\/Quote-right-cs.svg\/75px-Quote-right-cs.svg.png\";\n    echo '&lt;div&gt;&lt;img class=\"aligncenter\" src=\"'.$url.'\"&gt;&lt;\/div&gt;';\n}\n\n\/**\n * add a button below the shortcut output by hooking into the 'the_ending_custom_action'\n*\/\nadd_action( 'the_ending_custom_action', 'add_button_callback' );\nfunction add_button_callback() {\n    echo '&lt;div style=\"text-align:center;\"&gt;&lt;button name=\"nice\"&gt;Nice Quote!&lt;\/button&gt;&lt;\/div&gt;';\n}<\/code><\/pre>\n<p>Wie ihr sehen k\u00f6nnt, enth\u00e4lt dieses Erweiterungsplugin nichts anderes als Action- und Filterfunktionen, die sich an den richtigen Stellen in das Originalplugin einklinken, um Modifikationen vorzunehmen.<\/p>\n<p>Es benutzt die <code><strong>add_action()<\/strong><\/code> und <code><strong>add_filter()<\/strong><\/code> Funktionen, um seine Callback-Funktionen mit den benutzerdefinierten Aktionen und Filtern zu registrieren, die vom Original-Plugin erstellt wurden (z.B. <code><strong>the_topmost_custom_action<\/strong><\/code>, <code><strong>custom_quote_author<\/strong><\/code>).<\/p>\n<div class=\"mceTemp\">\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72262 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/zitat-box-mit-plugin.png\" alt=\"Das Erweiterungs-Plugin modifiziert die originale Zitat-Box\" width=\"1100\" height=\"682\"><\/p>\n<p>Benutzerdefinierte Action-Hooks erlauben es dir, deinen Code in den richtigen Intervallen in das Original-Plugin einzuf\u00fcgen und deine eigenen Skripte auszuf\u00fchren. Hier <a href=\"https:\/\/kinsta.com\/de\/blog\/strategieuefuruevisuelleueinhalte\/\" target=\"_blank\" rel=\"noopener noreferrer\">f\u00fcgen wir oben ein Bild<\/a> und unten einen Button ein.<\/p>\n<p>Ebenso lassen sich mit benutzerdefinierten Filterhooks die Werte des Zitatinhalts und der Name des Autors \u00e4ndern. Das ultimative Ergebnis ist ein Plugin, das von jedem vollst\u00e4ndig erweiterbar ist, ohne seinen Quellcode zu ver\u00e4ndern.<\/p>\n<h3>Arbeiten mit Custom Hooks von Third-Party-Entwicklern<\/h3>\n<p>Benutzerdefinierte Hooks erm\u00f6glichen es den einzelnen <a href=\"https:\/\/kinsta.com\/de\/thema\/wordpress-plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress Plugins<\/a> und <a href=\"https:\/\/kinsta.com\/de\/blog\/schnellsten-wordpress-theme\/\" target=\"_blank\" rel=\"noopener noreferrer\">Themes<\/a> ein reichhaltiges \u00d6kosystem von erweiterbaren Plugins zu haben. Betrachte das WooCommerce-Plugin. Es f\u00fcgt E-Commerce-Funktionalit\u00e4t zu WordPress hinzu, aber es enth\u00e4lt auch <a href=\"https:\/\/docs.woocommerce.com\/wc-apidocs\/hook-docs.html\" target=\"_blank\" rel=\"noopener noreferrer\">Tonnen von Hooks in seinem Code<\/a>.<\/p>\n<div class=\"mceTemp\">\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72270 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/woocommerce-hook-referenz-1.png\" alt=\"WooCommerce Aktion und Filter Hook Referenz\" width=\"1100\" height=\"562\"><\/p>\n<p><a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-ecommerce-plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">WooCommerce hat hunderte von Erweiterungen<\/a> und <a href=\"https:\/\/kinsta.com\/de\/blog\/woocommerce-plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">Plugins<\/a> die seine Hooks nutzen, um auf seiner Kernfunktionalit\u00e4t aufzubauen und sie noch besser zu machen.<\/p>\n<p>Du kannst diese Erweiterungen verwenden, um WooCommerce mit Stripe, MailChimp, Salesforce, Zapier und vielem mehr zu integrieren.<\/p>\n<div class=\"mceTemp\">\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-72269 size-full\" src=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/05\/woocommerce-erweitungen.png\" alt=\"Erweiterungen erweitern die Funktionalit\u00e4t von WooCommerce\" width=\"1100\" height=\"728\"><\/p>\n<p>Eine gute Praxis ist es, in der Dokumentations-Sektion der popul\u00e4ren WordPress-Plugins nachzuschauen, wie sie benutzerdefinierte Hooks implementieren. Ein paar meiner Top-Vorschl\u00e4ge sind <a href=\"https:\/\/docs.easydigitaldownloads.com\/article\/559-developers-intro-to-easy-digital-downloads\" target=\"_blank\" rel=\"noopener noreferrer\">Easy Digital Downloads<\/a>, <a href=\"https:\/\/codex.buddypress.org\/developer\/buddypress-hooks-actions-filters\/\" target=\"_blank\" rel=\"noopener noreferrer\">BuddyPress<\/a>, <a href=\"https:\/\/quizandsurveymaster.com\/docs\/developer\/hooks-and-filters\/\" target=\"_blank\" rel=\"noopener noreferrer\">Quiz and Survey Master<\/a>, und <a href=\"https:\/\/docs.gravityforms.com\/category\/developers\/hooks\/\" target=\"_blank\" rel=\"noopener noreferrer\">Gravity Forms<\/a>.<\/p>\n<h3>Wann benutzt man Custom Hooks?<\/h3>\n<p>Je nachdem, welches <a href=\"https:\/\/kinsta.com\/de\/blog\/themeforest-vor-nachteile\/\" target=\"_blank\" rel=\"noopener noreferrer\">Theme<\/a> oder <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-plugin-verzeichnis-veroeffentlicht\/\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin ihr erstellt<\/a>, und f\u00fcr wen es bestimmt ist, werdet ihr euch fragen, ob ihr irgendwelche benutzerdefinierten Hooks ben\u00f6tigt.<\/p>\n<p>Eine gute Faustregel bei der Entscheidung, ob du benutzerdefinierte Hooks hinzuf\u00fcgst oder nicht, ist es zu pr\u00fcfen, ob sie anderen Entwicklern Vorteile bei der Erweiterbarkeit bieten. Wenn nicht, dann ist es besser, sich zur\u00fcckzuhalten, bis andere Entwickler dich bitten, sie hinzuzuf\u00fcgen.<\/p>\n<p>Du brauchst eine hohe Sicherheit, wenn du benutzerdefinierte Hooks zu deinem Plugin oder Theme hinzuf\u00fcgst. Sobald es ver\u00f6ffentlicht ist, und wenn andere Entwickler es bereits benutzt haben, kannst du es nicht mehr \u00e4ndern, ohne die R\u00fcckw\u00e4rtskompatibilit\u00e4t zu brechen.<\/p>\n<h2>Entfernen von Callback-Funktionen aus WordPress Hooks<\/h2>\n<p>Du hast bereits Beispiele gesehen, wie man Callback-Funktionen, die f\u00fcr bestimmte Hooks registriert sind, entfernen kann. Diese Callbacks k\u00f6nnten von Plugins, Themes oder sogar vom WordPress Core selbst registriert werden. Schauen wir uns das Entfernen von Hook-Callback-Funktionen mit weiteren Beispielen an.<\/p>\n<p>Um eine Callback-Funktion von einem Hook zu entfernen, je nachdem, ob sie f\u00fcr eine Aktion oder einen Filter registriert ist, ben\u00f6tigt ihr die <code><strong>remove_action()<\/strong><\/code> oder <code><strong>remove_filter()<\/strong><\/code> Functionen.<\/p>\n<p>Ein Vorbehalt ist, dass du diese Funktionen mit den identischen Parametern aufrufen musst, die f\u00fcr die Registrierung der Callback-Funktion verwendet werden. Grunds\u00e4tzlich musst du die Parameter aus ihren <code><strong>add_action()<\/strong><\/code> oder <code><strong>add_filter()<\/strong><\/code> Functionen.<\/p>\n<p>Au\u00dferdem kannst du Callback-Funktionen erst entfernen, wenn sie registriert sind. Wenn du versuchst, sie zu entfernen, bevor sie registriert sind, wird der Entfernungsprozess fehlschlagen. Du brauchst die richtige Ausf\u00fchrungsreihenfolge der Hooks..<\/p>\n<p>Nehmen wir an, du m\u00f6chtest eine Callback-Funktion entfernen, die von einem Theme registriert wurde und deine Webseite aufbl\u00e4ht (<a href=\"https:\/\/kinsta.com\/de\/lernen\/wordpress-beschleunigen\/\" target=\"_blank\" rel=\"noopener noreferrer\">du m\u00f6chtest eine schnelle Webseite<\/a>, nicht wahr?).<\/p>\n<pre><code class=\"language-php\">function wp_bloated_callback_function() {\u00a0 \u00a0 \n\/\/ some code that adds a lot of bloat to the site\n}\nadd_action( 'template_redirect', 'wp_bloated_callback_function', 5 );<\/code><\/pre>\n<p>Zum Beispiel k\u00f6nnte die obige Callback-Funktion viele unn\u00f6tige Skripte und Stylesheets laden. Wenn du sie entfernst, wird deine Webseite einen <a href=\"https:\/\/kinsta.com\/de\/lernen\/website-geschwindigkeit\/\" target=\"_blank\" rel=\"noopener noreferrer\">enormen Leistungsschub<\/a> erhalten.<\/p>\n<p>Du musst jedoch sicherstellen, dass die remove_action()-Funktion erst nach der <code><strong>remove_action()<\/strong><\/code> -Aktion ausgef\u00fchrt wird. Eine M\u00f6glichkeit, dies zu erreichen, ist, sich in die <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/template_redirect\/\" target=\"_blank\" rel=\"noopener noreferrer\">template_redirect<\/a>-Aktion einzuklinken, wenn sie nach der <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/after_setup_theme\/\" target=\"_blank\" rel=\"noopener noreferrer\">after_setup_theme<\/a> action as it\u2019s triggered after the <code><strong>template_redirect<\/strong><\/code>-Aktion ausgel\u00f6st wird.<\/p>\n<pre><code class=\"language-php\">function wp_remove_bloat() {\n    \/\/ ensure all parameters are identical to the original add_action() function\n  \u00a0 remove_action( 'template_redirect', 'wp_bloated_callback_function', 5 );\n}\n\n\/\/ ensure that remove_action() is called only after add_action()\nadd_action( 'after_setup_theme', 'wp_remove_bloat' );<\/code><\/pre>\n<p>Die <code><strong>wp_bloated_callback_function()<\/strong><\/code> wird sich nun von der <code><strong>template_redirect<\/strong><\/code>-Aktion abkoppeln.<\/p>\n<h3>Spezialf\u00e4lle f\u00fcr das Entfernen von Callback-Funktionen<\/h3>\n<p>Es geh\u00f6rt mehr dazu, Callback-Funktionen zu entfernen, als sie einfach nur komplett zu deaktivieren. Manchmal ben\u00f6tigst du sie vielleicht vor\u00fcbergehend zu entfernen, deinen Code auszuf\u00fchren und sie dann wieder hinzuzuf\u00fcgen.<\/p>\n<p>Zum Beispiel feuert die <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/save_post\/\">save_post<\/a>-Aktion jedes Mal, wenn die <code><strong>wp_insert_post()<\/strong><\/code> und <code><strong>wp_publish_post()<\/strong><\/code>-Funktionen aufgerufen werden. Du kannst <a href=\"https:\/\/core.trac.wordpress.org\/browser\/tags\/5.4\/src\/wp-includes\/post.php#L4135\">sie beide<\/a> in der <code><strong>wp-includes\/post.php<\/strong><\/code>-Datei definiert finden.<\/p>\n<p>Wenn du also eine Callback-Funktion hast, die mit der <code><strong>save_post<\/strong><\/code>-Aktion verbunden ist, und wenn du die <code><strong>wp_insert_post()<\/strong><\/code> oder <code><strong>wp_publish_post()<\/strong><\/code>-Funktionen innerhalb deiner Callback-Funktion aufrufst, wird die<code><strong>save_post<\/strong><\/code>-Aktion mehrfach ausgel\u00f6st.<\/p>\n<pre><code class=\"language-php\">function some_callback_function( $post_id, $post ) {\n\u00a0 \u00a0 \/\/ do something here\n  \u00a0 wp_insert_post( [some_array] ); \/\/ this function also calls the 'save_post' action\n\u00a0 \u00a0 \/\/ maybe do something more\n}\nadd_action( 'save_post', 'some_callback_function', 10, 2 );<\/code><\/pre>\n<p>Eine Funktion, die die Aktion aufruft, die sie auch aufruft, kann zu unerwarteten Ergebnissen f\u00fchren. Eine M\u00f6glichkeit, dieses Problem zu umgehen, ist, die <code><strong>remove_action()<\/strong><\/code> -Funktion innerhalb deiner Callback-Funktion zu verwenden, bevor du <code><strong>wp_insert_post()<\/strong><\/code> aufrufst.<\/p>\n<pre><code class=\"language-php\">function some_callback_function( $post_id, $post ) {\n\u00a0 \u00a0 \/\/ do something here\n\u00a0 \u00a0 \n    \/\/ remove the callback function from the \u2018save_post\u2019 action\n\u00a0 \u00a0 remove_action( 'save_post', 'some_callback_function', 10, 2 );\n\u00a0 \u00a0 \n    \/\/ now run the wp_insert_post() function\n    wp_insert_post( [some_array] );\n\u00a0 \u00a0 \n    \/\/ add the callback function back to the \u2018save_post\u2019 action\n\u00a0 \u00a0 add_action( 'save_post', 'some_callback_function', 10, 2 );\n\u00a0 \u00a0 \n    \/\/ maybe do something more\n}\nadd_action( 'save_post', 'some_callback_function', 10, 2 );<\/code><\/pre>\n<p>Das ist eine weitere praktische Anwendung der <code><strong>remove_action()<\/strong><\/code> oder <code><strong>remove_filter()<\/strong><\/code>-Funktionen. Wenn du tiefer in den WordPress-Kern gr\u00e4bst, wirst du verstehen, wie du solche Situationen besser vermeiden kannst.<\/p>\n<h2>Bonus WordPress Hooks Tutorials<\/h2>\n<ul>\n<li><a href=\"https:\/\/kinsta.com\/de\/blog\/code-wordpress-header-footer-hinzufugt\/#how-to-manually-add-code-to-wordpress-header-and-footer\" target=\"_blank\" rel=\"noopener noreferrer\">Manuell Code zur WordPress Header und Footer hinzuf\u00fcgen<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-medienbibliothek\/\" target=\"_blank\" rel=\"noopener noreferrer\">Dein kompletter Leitfaden zur WordPress Medienbibliothek<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-cron-job\/\" target=\"_blank\" rel=\"noopener noreferrer\">Wie man einen WordPress Cron-Job erstellt und modifiziert<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/de\/blog\/child-theme-wordpress-erstellen\/#create\" target=\"_blank\" rel=\"noopener noreferrer\">Wie man ein WordPress Child Theme erstellt<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/de\/blog\/laden-von-wordpress-plugins-deaktivieren\/\" target=\"_blank\" rel=\"noopener noreferrer\">WorsPress-Plugins vom Laden auf bestimmte Seiten und Beitr\u00e4ge ausschalten<\/a><\/li>\n<li><a href=\"https:\/\/kinsta.com\/de\/blog\/deaktivierst-emojis-wordpress\/#2-disable-emojis-in-wordpress-with-code\" target=\"_blank\" rel=\"noopener noreferrer\">Deaktiviere Emojis in WordPress mit Code<\/a><\/li>\n<\/ul>\n\n<h2>Zusammenfassung<\/h2>\n<p>Es gibt mehrere Vorteile, WordPress Hooks zu benutzen, wenn du ein <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-entwickler-engagiert\/\">WordPress Entwickler<\/a> bist.<\/p>\n<p>Mit den Hooks kannst du nicht nur die Kernfunktionalit\u00e4t von WordPress ver\u00e4ndern oder erweitern, sondern auch Plugins und Themes modifizieren und andere Entwickler mit deinen Plugins oder Themes interagieren lassen.<\/p>\n<p>Es ist an der Zeit, s\u00fcchtig nach WordPress Hooks zu werden!<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>WordPress Hooks sind eines der wichtigsten Werkzeuge, die man im Arsenal eines WordPress Entwicklers haben sollte. Sie sind die Grundlage f\u00fcr die Entwicklung von WordPress Plugins &#8230;<\/p>\n","protected":false},"author":117,"featured_media":35256,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[28,354],"topic":[970,999],"class_list":["post-35217","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-webdev","tag-wordpress-hooks","topic-php-funktion","topic-wordpress-entwicklung"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Das WordPress Hooks Bootcamp: Wie man Aktionen, Filter und benutzerdefinierte Hooks verwendet<\/title>\n<meta name=\"description\" content=\"Lerne WordPress Hooks gr\u00fcndlich kennen. Meistere Aktionen, Filter und benutzerdefinierte Hooks, indem du dein eigenes erweiterbares Plugin erstellst. Verbessere jetzt deine WordPress Dev-F\u00e4higkeiten!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Das WordPress Hooks Bootcamp: Wie man Aktionen, Filter und benutzerdefinierte Hooks verwendet\" \/>\n<meta property=\"og:description\" content=\"Lerne WordPress Hooks gr\u00fcndlich kennen. Meistere Aktionen, Filter und benutzerdefinierte Hooks, indem du dein eigenes erweiterbares Plugin erstellst. Verbessere jetzt deine WordPress Dev-F\u00e4higkeiten!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-11T06:28:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-27T10:42:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/06\/wordpress-hooks.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Lerne WordPress Hooks gr\u00fcndlich kennen. Meistere Aktionen, Filter und benutzerdefinierte Hooks, indem du dein eigenes erweiterbares Plugin erstellst. Verbessere jetzt deine WordPress Dev-F\u00e4higkeiten!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/06\/wordpress-hooks.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"57\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"Das WordPress Hooks Bootcamp: Wie man Aktionen, Filter und benutzerdefinierte Hooks verwendet\",\"datePublished\":\"2020-06-11T06:28:33+00:00\",\"dateModified\":\"2023-07-27T10:42:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/\"},\"wordCount\":10137,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/06\/wordpress-hooks.jpg\",\"keywords\":[\"webdev\",\"WordPress Hooks\"],\"articleSection\":[\"WordPress Entwicklung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/\",\"name\":\"Das WordPress Hooks Bootcamp: Wie man Aktionen, Filter und benutzerdefinierte Hooks verwendet\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/06\/wordpress-hooks.jpg\",\"datePublished\":\"2020-06-11T06:28:33+00:00\",\"dateModified\":\"2023-07-27T10:42:12+00:00\",\"description\":\"Lerne WordPress Hooks gr\u00fcndlich kennen. Meistere Aktionen, Filter und benutzerdefinierte Hooks, indem du dein eigenes erweiterbares Plugin erstellst. Verbessere jetzt deine WordPress Dev-F\u00e4higkeiten!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/06\/wordpress-hooks.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/06\/wordpress-hooks.jpg\",\"width\":1024,\"height\":512,\"caption\":\"WordPress Hooks\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP-Funktion\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/php-funktion\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Das WordPress Hooks Bootcamp: Wie man Aktionen, Filter und benutzerdefinierte Hooks verwendet\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Das WordPress Hooks Bootcamp: Wie man Aktionen, Filter und benutzerdefinierte Hooks verwendet","description":"Lerne WordPress Hooks gr\u00fcndlich kennen. Meistere Aktionen, Filter und benutzerdefinierte Hooks, indem du dein eigenes erweiterbares Plugin erstellst. Verbessere jetzt deine WordPress Dev-F\u00e4higkeiten!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/","og_locale":"de_DE","og_type":"article","og_title":"Das WordPress Hooks Bootcamp: Wie man Aktionen, Filter und benutzerdefinierte Hooks verwendet","og_description":"Lerne WordPress Hooks gr\u00fcndlich kennen. Meistere Aktionen, Filter und benutzerdefinierte Hooks, indem du dein eigenes erweiterbares Plugin erstellst. Verbessere jetzt deine WordPress Dev-F\u00e4higkeiten!","og_url":"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2020-06-11T06:28:33+00:00","article_modified_time":"2023-07-27T10:42:12+00:00","og_image":[{"width":1024,"height":512,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/06\/wordpress-hooks.jpg","type":"image\/jpeg"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"Lerne WordPress Hooks gr\u00fcndlich kennen. Meistere Aktionen, Filter und benutzerdefinierte Hooks, indem du dein eigenes erweiterbares Plugin erstellst. Verbessere jetzt deine WordPress Dev-F\u00e4higkeiten!","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/06\/wordpress-hooks.jpg","twitter_creator":"@salmanravoof","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Salman Ravoof","Gesch\u00e4tzte Lesezeit":"57\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"Das WordPress Hooks Bootcamp: Wie man Aktionen, Filter und benutzerdefinierte Hooks verwendet","datePublished":"2020-06-11T06:28:33+00:00","dateModified":"2023-07-27T10:42:12+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/"},"wordCount":10137,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/06\/wordpress-hooks.jpg","keywords":["webdev","WordPress Hooks"],"articleSection":["WordPress Entwicklung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/","url":"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/","name":"Das WordPress Hooks Bootcamp: Wie man Aktionen, Filter und benutzerdefinierte Hooks verwendet","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/06\/wordpress-hooks.jpg","datePublished":"2020-06-11T06:28:33+00:00","dateModified":"2023-07-27T10:42:12+00:00","description":"Lerne WordPress Hooks gr\u00fcndlich kennen. Meistere Aktionen, Filter und benutzerdefinierte Hooks, indem du dein eigenes erweiterbares Plugin erstellst. Verbessere jetzt deine WordPress Dev-F\u00e4higkeiten!","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/06\/wordpress-hooks.jpg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2020\/06\/wordpress-hooks.jpg","width":1024,"height":512,"caption":"WordPress Hooks"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/wordpress-hooks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"PHP-Funktion","item":"https:\/\/kinsta.com\/de\/thema\/php-funktion\/"},{"@type":"ListItem","position":3,"name":"Das WordPress Hooks Bootcamp: Wie man Aktionen, Filter und benutzerdefinierte Hooks verwendet"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinsta.com\/de\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/35217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=35217"}],"version-history":[{"count":13,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/35217\/revisions"}],"predecessor-version":[{"id":60118,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/35217\/revisions\/60118"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/35217\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/35217\/translations\/fr"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/35217\/translations\/es"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/35217\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/35217\/translations\/pt"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/35217\/translations\/de"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/35217\/translations\/nl"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/35217\/translations\/se"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/35217\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/35256"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=35217"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=35217"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=35217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}