Tobier Webentwickklung Blog

Loading...

Was sind WordPress Hooks?

WordPress Hooks sind Stellen im WordPress Code, in die du dich „einhaken“ kannst und somit deinen eigenen Code an einer bestimmten Stelle einsetzen und ausführen kannst. Dabei unterscheidet man zwischen „Action“ und „Filter“ Hooks. Diese Methode verhindert, bei richtiger Benutzung, das Überschreiben deines Codes bei einem WordPress Update. Direkte Änderungen der WordPress Dateien sind mit dieser Technik nicht notwendig.

Was sind WordPress Hooks?
Wie sind und wie funktionieren WordPress Hooks?

Was sind WordPress Action Hooks?

In diesem Artikel möchte ich nur auf die Action-Hooks eingehen und lasse die Filter-Hooks erst einmal beiseite. Der Unterschied zwischen den beiden Varianten ist schnell erklärt. Filter-Hooks sind dafür da, Werte zu filtern und mit Action Hooks können wir Aktionen, oder auch Funktionen an einer bestimmten Stelle innerhalb von WordPress ausführen.

Action-Hooks werden aber nicht nur im WordPress Core zur Verfügung gestellt, Plugins und Themes nutzen genauso Hooks und können auch neue Hooks bereitstellen.

Wie sieht eine solche Hook-Stelle denn aus?

Die einfachste Form einer solchen Hook sieht wie folgt aus:

do_action( 'init' );

Wer sich ein bisschen mit PHP auskennt, sieht jetzt, dass es theoretisch einfach nur ein Funktionsaufruf ist, dem ein Parameter (die Bezeichnung der Hook) mit übergeben wird. Der genaue Hintergrund dieser aufgerufenen Funktion soll uns jetzt aber ersteinmal nicht stören.

Einer Action-Hook können allerdings noch weitere Parameter mitgegeben werden, um z.B. im Core vorhandene Variablen auch in der Hook zur Verfügung zu stellen. Das würde dann so aussehen:

do_action( 'delete_post', $postid );

Mit diesem Beispiel könnten wir Code ausführen, wenn ein Author oder ein Administrator einen Post löschen möchte. Durch die mitgegebene Variable $postid wissen wir genau um welchen Post es sich handelt.

Welche Hooks gibt es alles?

Im WordPress Core befinden sich hunderte von solchen Stellen, sodass eine genaue Aufzählung eine große Herausforderung wäre. Durchsucht man z.B. den Ordner „wp-includes“ seiner WordPress Installation, findet man schon über 100 solcher Stellen, die für alle möglichen Einsatzzwecke eine Möglichkeit zum Einhaken bieten.

Action Hooks im WordPress wp-includes Ordner
Action Hooks im WordPress wp-includes Ordner

Wenn wir das mal auf das Frontend beschränken und nur Hooks nehmen, die zum Standard gehören, sind wir ungefähr bei 60+ Hooks die zur Verfügung stehen. Hinzu kommen würden dann noch Hooks die das Theme, bzw. deine Plugins mitbringen.

Da ich keine Lust habe hier 60+ Hooks als Liste runterzurattern und du auch sicherlich keine Lust hast diese zu lesen, habe ich ein Cheat Sheet, in Form eines Bildes, mit den, meiner Meinung nach, 15 meist genutzten Frontend Actions Hooks angefertigt. Wer darin nicht fündig wird kann sich im WordPress Codex eine Liste aller verfügbaren Action Hooks anschauen.

Wie füge ich einer Hook eine Aktion hinzu?

Da du nun weißt wie solche Hook-Stellen im Code aussehen, sollst du sie natürlich auch benutzen können.

Beginnen wir mit der Stelle, an der du deinen Code einfügst.

Wo füge ich den Code in WordPress ein?

Hierfür eignen sich eigentlich nur zwei Stellen, ein eigenes Plugin, oder die functions.php deines WordPress Child Theme. In den beiden verlinkten Beiträgen erkläre ich dir. wie du ein Plugin, bzw. ein Child Theme, für dein WordPress Theme anlegst, um deinen Code vor dem Überschreiben bei Updates zu schützen.

Der magische Code

Hast du nun also eine Funktion/Methode geschrieben die du z.B. in den WordPress Footer (Achtung! nicht der Theme Footer) einhaken möchtest, führst du ihn mit folgendem Code an dieser Stelle aus:

function meineFooterFunktion(){
    //meine neue funktion
}

//sollte die Hook Variablen mit übergeben,
//können diese in der Methode mit genutzt werden
function meineFooterFunktion( $eineVariable ) {
    var_dump( $eineVariable );
}

add_action( 'wp_footer', 'meineFooterFunktion', 10 );

Eigentlich ist das Einhaken sehr intuitiv, wir sagen mit add_action – füge eine Aktion hinzu und geben drei Parameter mit. Die Parameter sind wie folgt zu erklären:

  1. Name der Hook, in die du dich einhaken möchtest
  2. Name der Methode, die du dort ausführen möchtest
  3. Die Priorität deiner Methode. Hiermit kannst du die Reihenfolge der eingehakten Methoden steuern, falls mehrere Methoden eingehakt werden. Gültige Werte liegen in der Range von 1 bis 999, wobei der Standardwert 10 ist.

Wer in seinem PHP-Code mit Klassen arbeitet, wird schnell merken, dass dies so nicht funktioniert. Innerhalb einer Klasse muss zusätzlich zum Methodennamen noch der Kontext mit angegeben werden. Im Praxisfall sieht das so:

class MyClass {
    public function __construct(){ 
        add_action( 'wp_footer', array( $this, 'myFunction', 10 );
    }

    public function myFunction(){
        //my code
    }

}

WordPress Hook Cheat Sheet

WordPress Hook Cheat Sheet
Die 12 meist verwendeten WordPress Frontend Hooks

Eingehookte Methoden entfernen

Manchmal ist es von Nöten, Methoden die z.B. ein Plugin an eine bestimmte Stelle im WordPress Core einhakt, zu entfernen bzw. die Methode komplett neu zu schreiben. Dafür gibt uns WordPress eine genauso intuitive Möglichkeit, wie beim Einfügen einer Aktion. Um eine Aktion zu entfernen, tauschen wir also das add_action, durch ein remove_action aus.

remove_action( 'wp_footer', 'meineFooterFunktion', 10 );

Fazit zu WordPress Action Hooks

Ich kann mir persönlich kein WordPress ohne die Verwendung von Hooks mehr vorstellen. Gerade durch die Action Hooks ist das CMS extrem flexibel und kann jedem Bedürfnis angepasst werden, ohne einen unwartbaren Versionsstand zu produzieren. Jedes Plugin baut seine Funktion auf dieser Thematik auf und ist somit ebenfalls schnell und einfach anpassbar.

Da die Verwendung der Hooks so simpel ist, bietet es auch für Neulinge eine hervorragende Möglichkeit, sich in die WordPress Welt einzuarbeiten.

 

Habe ich etwas vergessen? Noch Fragen offen? Schreibs in die Kommentare!


Schreibe einen Kommentar:

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert. Selbstverständlich wird deine IP-Adresse nicht, wie im WordPress Standard, gespeichert.

*
*