Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

Benutzerdefinierte Hooks in WordPress hinzufügen: Benutzerdefinierte Aktionen

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called Adding Custom Hooks in WordPress.
Adding Custom Hooks in WordPress: Custom Filters

German (Deutsch) translation by Wei Zhang (you can also view the original English article)

Einer der Eckpfeiler beim Erstellen benutzerdefinierter Lösungen in WordPress ist das Verständnis für Hooks. Sie sind an und für sich nicht schwer zu verstehen, und wir werden in diesem Tutorial einen kurzen Überblick über sie geben.

Wenn Sie jedoch an einer fortgeschritteneren WordPress-Entwicklung interessiert sind, sollten Sie wissen, wie Sie Ihre eigenen Hooks implementieren.

In dieser zweiteiligen Serie werden wir das WordPress-Hook-System und seine Implementierung überprüfen und uns ansehen, wie wir sowohl unsere eigenen Aktionen als auch Filter definieren.

Fertig machen

Bevor Sie beginnen, setzt dieses Lernprogramm voraus, dass Sie eine lokale Entwicklungsumgebung eingerichtet haben, die die neueste Version von WordPress enthält. Zum Zeitpunkt dieses Schreibens ist dies WordPress 4.5.2.

Wenn Sie Anleitungen zum Einrichten Ihrer Entwicklungsumgebung benötigen, lesen Sie dieses Tutorial. Sie erhalten alles, was Sie wissen müssen, um einen Webserver, eine PHP-Kopie, eine Datenbank und WordPress einzurichten.

Wenn Sie nach noch mehr suchen, enthält die Serie, in der das Lernprogramm enthalten ist, noch mehr Informationen, z. B. wie Sie WordPress installieren, Anleitungen zu Themen und Plugins usw.

In diesem Tutorial konzentrieren wir uns jedoch auf Hooks und Aktionen. Sobald Sie alles eingerichtet haben, können wir loslegen.

Was sind Haken?

Bevor Sie sich die WordPress-Hooks genauer ansehen, sollten Sie das ereignisgesteuerte Designmuster (auch als ereignisgesteuerte Architektur bezeichnet) verstehen.

Wenn Sie mit vorhandenen WordPress-Hooks oder mit Front-End-Webentwicklung oder mit JavaScript in irgendeiner Form gearbeitet haben, kennen Sie dieses Muster wahrscheinlich, auch wenn Sie nicht wussten, dass es einen offiziellen Namen hatte.

Unabhängig davon ist dies in Wikipedia definiert:

Die ereignisgesteuerte Architektur (EDA - Event-Driven Architecture), auch als Message-Driven-Architektur bezeichnet, ist ein Softwarearchitekturmuster, das die Produktion, Erkennung, Verwendung und Reaktion auf Ereignisse fördert.

Wenn Sie gerade erst mit den Entwurfsmustern oder der Entwicklung beginnen, hört sich dies vielleicht kompliziert an.

  • Die Software hat bestimmte Punkte, an denen sie eine Nachricht sendet, dass etwas passiert ist.
  • Als Entwickler können wir Code schreiben, der auf diese Nachricht wartet, und dann mit benutzerdefiniertem Code darauf reagieren.

Beachten Sie, dass die Definition auch von der Produktion von Ereignissen spricht. Wenn wir darüber sprechen, wie wir unsere eigenen Hooks definieren, werden wir dieses Thema erneut betrachten. Lassen Sie uns zunächst zwei Ereignisse betrachten, die in der Webentwicklung üblich sind.

Verwendung von JavaScript

Stellen Sie sich zunächst vor, Sie arbeiten in der Front-End-Entwicklung. Sie haben eine Schaltfläche mit dem ID-Attribut von command-button. Wenn der Benutzer darauf klickt, möchten Sie ein Alarmdialogfeld anzeigen.

Mit jQuery können Sie diese Funktionalität folgendermaßen implementieren:

Die Kommentare im obigen Code sollten genau erklären, was passiert. Kurz gesagt, der Browser löst ein Ereignis aus, wenn der Benutzer auf eine Schaltfläche klickt. In diesem Fall wartet unser Code auf das Ereignis und reagiert darauf mit einem Dialog.

Natürlich bieten andere Bibliotheken, Frameworks oder Vanilla-JavaScript dieselbe Funktionalität. Der Zweck dieser Darstellung in jQuery ist, dass es sich um eine der am häufigsten verwendeten JavaScript-Bibliotheken handelt und weil es auch das ist, was in WordPress enthalten ist.

Verwenden von WordPress

Die Implementierung dieses Musters sieht nicht unbedingt in allen Programmiersprachen oder Paradigmen gleich aus. Dies hängt häufig von den APIs ab, die das Framework, die Basis oder die Anwendung bereitstellt.

In WordPress ist die Registrierung unseres eigenen Codes bei einem Ereignis, das ausgelöst wird, etwas anders. Angenommen, Sie arbeiten mit den Verwaltungsseiten in WordPress und möchten dem Menü Einstellungen einen neuen Untermenüpunkt hinzufügen. Wir nennen es Tuts + Options.

Zu diesem Zweck fügen wir der Datei functions.php oder unserem Plugin oder dem Projekttyp, auf den wir uns konzentrieren, den folgenden Code hinzu:

Sie können den Codex besuchen, um mehr über den admin_menu-Hook sowie über die Funktion add_submenu_page zu erfahren.

Dieser Code fügt dem Menü keine neuen Funktionen hinzu, aber es soll zeigen, dass WordPress ein admin_menu -Ereignis bereitstellt, ähnlich wie ein Webbrowser ein Klickereignis. Wir können dann unseren eigenen Code eingeben, indem wir eine Funktion definieren, die ausgelöst wird, wenn das Ereignis ausgelöst wird.

Dies sind zwei praktische Beispiele für das ereignisgesteuerte Entwurfsmuster, das sowohl implementiert als auch verwendet wird.

Grundlegendes zu WordPress-Aktionen

Nun, da wir eine kurze Einführung in das ereignisgesteuerte Designmuster hatten und zwei Implementierungen des Musters gesehen haben, wollen wir uns die WordPress-Aktionen genauer anschauen. Wir werden prüfen, was verfügbar ist und wie wir unsere eigenen implementieren können.

Einrichten unserer Datei

In diesem Tutorial verwenden wir das Standarddesign, das mit WordPress ausgeliefert wird.

Erstellen Sie im Stammverzeichnis des Designverzeichnisses eine Datei namens tutsplus-actions.php. Fügen Sie dann in functions.php die folgende Codezeile hinzu:

Dadurch wird das Design angewiesen, die definierte Datei zu laden. Der Grund, warum wir dies tun möchten, ist, damit wir unseren Code aus dem Kern des Themas heraushalten können und den Code leicht entfernen können, indem die obige Anweisung include_once gelöscht wird.

Eine kurze Definition der Maßnahmen

In WordPress können Hooks in eine von zwei Kategorien unterteilt werden: Aktionen oder Filter. Aktionen sind Punkte im WordPress-Lebenszyklus, mit denen Sie bestimmte Funktionen hinzufügen, entfernen oder ändern können. Filter hingegen sind Punkte im WordPress-Lebenszyklus, in denen Sie Daten hinzufügen, entfernen oder ändern können.

Kurz gesagt, Aktionen sollen mit Funktionalität arbeiten, und Filter sollen mit Daten arbeiten. Im zweiten Teil dieser Serie werden wir uns mehr auf Filter konzentrieren.

Ich möchte darauf hinweisen, dass Sie, wenn Sie sich dazu entschieden haben, nach Aktionen und Filtern nach dem Lesen dieser Reihe von Tutorials zu suchen (was ich ermutige), feststellen können, dass andere sie allgemeiner als Haken bezeichnen.

Obwohl dies technisch korrekt ist, ist es pragmatischer und es ist klarer, mit welcher Art von Hook Sie arbeiten, wenn Sie mit jemandem schreiben, präsentieren oder darüber diskutieren.

Dies liegt daran, dass Aktionen für eine bestimmte Funktionalität vorgesehen sind und Filter für eine andere Funktionalität.

Mit Aktionen arbeiten

Obwohl wir uns bereits in einem Beispielcode ein bestimmtes Beispiel einer Aktion angesehen haben, betrachten wir ein vollständigeres und praktischeres Beispiel.

WordPress bietet standardmäßig zwei Arten von Posts an: Posts (für reguläre Blog-Posts) und Pages (für statische Inhalte oder Inhalte, die sich selten ändern). Für eine Standard-Blog-Plattform sind diese Inhalte wahrscheinlich alles, was Sie brauchen. Aber WordPress ist vor Jahren zu einem CMS gereift.

Eine der Funktionen, die WordPress erweiterbar macht, ist die Möglichkeit, eigene Post-Typen einzuführen. WordPress ruft diese benutzerdefinierten Beitragstypen auf. Sie sind hervorragend geeignet, wenn Sie einen Inhaltstyp erstellen müssen, der einen eigenen Attributtyp benötigt und etwas spezifischer als "Beiträge" oder "Seiten" benannt werden muss.

Um unseren eigenen benutzerdefinierten Beitragstyp zu erstellen, müssen wir zwei Dinge tun:

  1. Definieren Sie eine Funktion, die sich wie in WordPress in den init-Hook einhakt
  2. Registrieren Sie unseren Beitragstyp mit einer der bereitgestellten API-Funktionen

Registrierung unserer Aktion

Um unsere Aktion zu registrieren, verwenden wir die Funktion add_action der WordPress-API. Dies teilt WordPress mit, dass wir eine Aktion einführen und dass die Funktion ausgelöst werden muss, die durch den Namen identifiziert wird, den wir im Aufruf der Funktion angegeben haben.

Unser Code sollte so aussehen:

Im obigen Code registrieren wir eine Funktion mit dem in WordPress vorhandenen Init-Hook. Dieser Hook wird früh im WordPress-Lebenszyklus ausgelöst und ist ein guter Zeitpunkt, um einen benutzerdefinierten Beitragstyp zu registrieren.

Als nächstes müssen wir die Funktion definieren.

Der Schlüssel zum Verständnis der Signatur dieser Funktion ist einfach: Wir haben sie tutsplus_register_post_type genannt, da dies das zweite Argument ist, das wir in den Aufruf add_action übergeben haben.

Dies weist WordPress wörtlich an, Folgendes zu tun: Rufen Sie während init die Funktion tutsplus_register_post_type auf.

So weit, ist es gut. Wir haben nichts wirklich Kompliziertes angerichtet und wenn Sie Ihren Verwaltungsbildschirm von WordPress aktualisieren, werden Sie feststellen, dass er noch funktioniert, obwohl er nichts Neues tut.

Lass uns das ändern.

Erstellen eines benutzerdefinierten Beitragstyps

Jetzt, da wir den Code für das Hinzufügen unserer eigenen Aktion haben, lassen Sie uns etwas erreichen. Lassen Sie uns einen benutzerdefinierten Beitragstyp namens time_traveler erstellen, der einen Titel, einen Editor, einen Auszug und nichts anderes enthält.

Dazu müssen wir die Funktion register_post_type im Codex überprüfen. Die Dokumentation enthält eine solide Erklärung für alle Argumente, die von der Funktion akzeptiert werden können, aber wir werden nur eine Teilmenge davon für unseren benutzerdefinierten Beitragstyp verwenden.

Im Einzelnen werden wir Folgendes verwenden:

  • label
  • labels
  • description
  • public
  • show_ui
  • supports

Wir verlassen uns auf den Rest der Funktionalität, die von den WordPress-Standardwerten bereitgestellt wird. Die Argumente werden so aussehen:

Die endgültige, vollständige Version des Codes für die Registrierung des Beitragstyps sieht folgendermaßen aus:

Wenn Sie den Verwaltungsbereich Ihrer WordPress-Installation aktualisieren, sollte ein neuer Menüpunkt direkt unter "Kommentare" angezeigt werden, in dem "Zeitreisende" angezeigt werden.

Wenn Sie auf Neu hinzufügen klicken, sollten Sie einen Ort für einen Titel (oder den Namen des Reisenden), den Bearbeiter (zur Information des Reisenden) und einen Auszug (möglicherweise für einige Hinweise zum Reisenden) sehen. Sie sollten auch eine einzige Meta-Box zum Veröffentlichen der Informationen sehen.

Adding a Time Traveler custom post type

Natürlich zeigt der obige Code, wie Sie vorhandene Aktionen zur Definition eines benutzerdefinierten Beitragstyps nutzen können. Was aber, wenn wir unsere eigenen Handlungen erstellen wollen?

Benutzerdefinierte Aktionen definieren

Wenn es darum geht, unsere eigenen Handlungen zu gestalten, gibt es drei Dinge, die wir tun müssen. Auf der grundlegendsten Ebene müssen wir Folgendes tun:

  1. den Haken definieren
  2. dem Haken Funktionalität verleihen
  3. Erlauben Sie Entwicklern, den Haken zu rufen

Das einfachste Beispiel, das ich dafür geben kann, ist im folgenden Code:

Fühlen Sie sich frei, diesen Beispielcode zu tutsplus-actions.php hinzuzufügen, damit Sie den Code nach diesem Lernprogramm weiter optimieren können.

Danach können wir Ihre Funktion tutsplus_action an beliebiger Stelle in unserem Code aufrufen. Sagen wir zum Beispiel, wir wollten es oben im Verwaltungsbereich anzeigen. Wenn wir das wollten, könnten wir folgenden Code hinzufügen:

Wenn Sie Ihr Dashboard aktualisieren, wird oben im Dashboard "Dies ist ein benutzerdefinierter Aktions-Hook" angezeigt.

Beachten Sie, dass ich nicht empfehle, sich in admin_notices einzuhängen, es sei denn, Sie möchten den Benutzer ausdrücklich über eine Erfolgs-, Warn- oder Fehlermeldung informieren. Ich benutze es hier speziell, um unseren eigenen Haken zu demonstrieren.

Überarbeitung unseres Post-Typs

Angenommen, wir wollten eine benutzerdefinierte Posttyp-Funktion erstellen, mit der wir den Singular- und Pluralnamen des Posttyps mithilfe eines Action-Hooks an eine Funktion übergeben können.

Wie können wir das machen? Wir wissen, was wir oben gesehen haben, als Erstes müssen wir eine benutzerdefinierte Funktion erstellen, die eine Aktion aufruft. Also machen wir das jetzt:

Als Nächstes müssen wir etwas tun, das ein wenig abwegig erscheint. Da unsere benutzerdefinierte Funktionalität im Kontext des Init-Hooks ausgelöst werden soll, müssen wir sicherstellen, dass unser Hook während der Init-Aktion ausgelöst wird.

Dazu haken wir unseren benutzerdefinierten Hook an den init-Hook:

Beachten Sie im obigen Code, dass wir zwei zusätzliche Parameter für do_action angeben. Der erste Parameter ist 10 und gibt die Priorität an, bei der dieser Haken ausgelöst wird.

Dies kann eine beliebige Zahl sein, bei der je höher die Zahl ist, desto niedriger ist die Liste der Prioritäten, die ausgelöst werden sollen. Der zweite Parameter ist, wie viele Argumente der benutzerdefinierte Hook akzeptieren wird. In unserem Fall gibt es eine für die einzelne Version des Pfostentyps und eine für die Pluralversion des Pfostentyps.

Danach müssen wir diesem Haken Funktionalität verleihen. Hier wird der Code für die Registrierung eines Beitragstyps so umgestaltet, dass er zwei Argumente akzeptiert. Diese beiden Argumente werden in dem Array verwendet, das an die register_post_type-Funktion von WordPress übergeben wird.

Beachten Sie, dass wir diese Funktion auch aus einem bestimmten Hook entfernt haben. Stattdessen rufen wir es aus der Definition einer Funktion heraus auf, die mit unserer benutzerdefinierten Aktion verknüpft ist.

Im obigen Code können wir die Funktion aufrufen, die für die Registrierung des benutzerdefinierten Beitragstyps verantwortlich ist, und dabei gleichzeitig unsere eigenen Argumente übergeben, sodass wir dem Code ein wenig benutzerdefinierte Funktionalität hinzufügen können.

Fazit

Das Definieren von benutzerdefinierten Hooks ist nicht kompliziert und verleiht uns als Entwicklern viel Kraft und Flexibilität. Das Verwirrendste an dem obigen Code ist wohl die Definition eines Hooks im Kontext eines anderen Hooks (dh wir definieren tutsplus_register_custom_post_type innerhalb von init).

Ich habe mich für ein letztes Beispiel entschieden, da es Zeiten gibt, in denen Sie möglicherweise einen benutzerdefinierten Hook registrieren möchten, der ausgelöst werden muss, bevor ein bereits vorhandener Hook abgeschlossen ist.

Das Registrieren eines Hooks für sich alleine ist einfach: Sie haken ihn einfach nicht an einen bereits vorhandenen Hook an, und Sie rufen einen grundlegenden Funktionsaufruf ab, wie wir gesehen haben, wenn der Code mit admin_notices verknüpft ist.

Im nächsten Beitrag dieser Serie werden wir uns die Filter ansehen und sehen, was sie in Bezug auf das Ändern von Daten für uns tun können. Wir werden auch prüfen, wie wir unsere eigenen Filter definieren, sodass wir benutzerdefinierte Funktionen einführen können, genau wie in diesem Tutorial.

Wenn Sie nach weiteren Hilfsprogrammen suchen, die Sie dabei unterstützen, Ihr wachsendes Werkzeugset für WordPress zu entwickeln oder um Code zu lernen und sich mit WordPress vertraut zu machen, vergessen Sie nicht zu sehen, was wir haben erhältlich im Envato Market.

Denken Sie daran, dass Sie alle meine Kurse und Tutorials auf meiner Profilseite sehen können. Sie können mir auf meinem Blog und / oder Twitter unter @tommcfarlin folgen, wo ich über verschiedene Softwareentwicklungsmethoden spreche und wie wir sie in WordPress einsetzen können.

Bitte zögern Sie nicht, Fragen oder Kommentare in den untenstehenden Feed zu schreiben, und ich werde versuchen, auf jeden von ihnen zu antworten.

Ähnliche Resourcen

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.