Blog
WordPress Hook-Architektur: Aktionen vs. Filter erklärt
Das Fundament jedes großartigen Plugins. Erfahren Sie, wie PAGEnza AI Hooks und Filter verwendet, um wartbaren, skalierbaren Code zu erstellen.
Jedes WordPress-Plugin tut eines von zwei Dingen: Es führt Code zu einem bestimmten Zeitpunkt aus (Aktion) oder es modifiziert einen Wert, bevor er verwendet wird (Filter). Das ist alles. Das gesamte WordPress-Plugin-Ökosystem basiert auf dieser Unterscheidung.
Das Verständnis des Unterschieds – und wann man jeden einzelnen verwendet – trennt Plugins, die funktionieren, von Plugins, die Probleme verursachen.
Aktionen: Etwas zu einem bestimmten Zeitpunkt tun
Ein Aktions-Hook ist ein Signal, das WordPress (oder ein anderes Plugin) zu einem bestimmten Zeitpunkt sendet. Sie hängen eine Funktion an dieses Signal an, und Ihre Funktion wird ausgeführt, wenn das Signal ausgelöst wird.
add_action( 'wp_enqueue_scripts', 'my_plugin_load_assets' );
function my_plugin_load_assets() {
wp_enqueue_style( 'my-plugin', plugin_dir_url( __FILE__ ) . 'style.css' );
wp_enqueue_script( 'my-plugin', plugin_dir_url( __FILE__ ) . 'script.js', ['jquery'], '1.0', true );
}
wp_enqueue_scripts wird ausgelöst, wenn WordPress die Assets für das Frontend lädt. Das Einhaken hier ist der richtige Weg, um CSS und JS zu laden – nicht das direkte Einfügen von <script>-Tags in Vorlagen.
Allgemeine Aktions-Hooks, die Sie ständig verwenden werden:
init— läuft früh, gut für die Registrierung von Post-Typen und Taxonomienwp_enqueue_scripts— lädt Frontend-Assetsadmin_enqueue_scripts— lädt Admin-Assetssave_post— wird beim Speichern eines Beitrags ausgeführt, gut für die Verarbeitung benutzerdefinierter Felderwp_ajax_{action}— verarbeitet AJAX-Anfragen von authentifizierten Benutzernwp_ajax_nopriv_{action}— verarbeitet AJAX von nicht angemeldeten Benutzern
Filter: Einen Wert modifizieren, bevor er verwendet wird
Ein Filter-Hook gibt Ihnen einen Wert, lässt Sie ihn modifizieren und erwartet, dass Sie die modifizierte Version zurückgeben. WordPress verwendet dann Ihren modifizierten Wert anstelle des Originals.
add_filter( 'the_content', 'my_plugin_append_cta' );
function my_plugin_append_cta( $content ) {
if ( ! is_single() ) {
return $content;
}
$cta = '<div class="post-cta">Bereit, PAGEnza auszuprobieren? <a href="#">Kostenlos starten →</a></div>';
return $content . $cta;
}
Die entscheidende Regel: Geben Sie immer etwas von einem Filter zurück. Wenn Sie das return vergessen, wird der Wert null und Sie haben alles, was ihn verwendet hat, kaputt gemacht.
Allgemeine Filter-Hooks:
the_content— der Beitragstext vor der Anzeigethe_title— der Beitragstitelwp_nav_menu_items— HTML für Navigationsmenüsupload_mimes— erlaubte Dateiupload-Typenplugin_action_links_{plugin-file}— Links, die auf der Plugin-Liste angezeigt werden
Wie PAGEnza AI Hooks verwendet
Wenn der Plugin Builder ein Plugin generiert, strukturiert er den Code um eine Klasse mit Methoden, die im Konstruktor an Hooks angehängt sind. Dieses Muster vermeidet Kollisionen bei globalen Funktionsnamen und hält den Code organisiert.
class My_Plugin {
public function __construct() {
add_action( 'init', [ $this, 'register_post_type' ] );
add_action( 'wp_enqueue_scripts', [ $this, 'load_assets' ] );
add_filter( 'the_content', [ $this, 'append_content' ] );
}
public function register_post_type() { /* ... */ }
public function load_assets() { /* ... */ }
public function append_content( $content ) {
// immer zurückgeben
return $content;
}
}
new My_Plugin();
Der Sicherheits-Scan prüft speziell, ob AJAX-Handler sowohl eine Nonce-Prüfung als auch eine Berechtigungsprüfung enthalten, bevor sie etwas tun:
add_action( 'wp_ajax_my_action', [ $this, 'handle_ajax' ] );
public function handle_ajax() {
// Sicherheit: Nonce überprüfen
check_ajax_referer( 'my_nonce_action', 'nonce' );
// Sicherheit: Berechtigungen überprüfen
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( 'Unzureichende Berechtigungen', 403 );
}
// Jetzt sicher zu verarbeiten
$data = sanitize_text_field( $_POST['data'] ?? '' );
wp_send_json_success( [ 'result' => $data ] );
}
Das Fehlen einer dieser Prüfungen wird als Sicherheitsproblem markiert und verhindert die Veröffentlichung des Plugins.
Priorität und die Hook-Warteschlange
Wenn mehrere Funktionen an denselben Hook angehängt sind, werden sie in der Reihenfolge der Priorität ausgeführt (niedrigere Zahl = zuerst ausgeführt). Die Standardpriorität ist 10.
add_action( 'init', 'runs_first', 5 );
add_action( 'init', 'runs_second', 10 ); // Standard
add_action( 'init', 'runs_last', 20 );
Dies ist wichtig, wenn Ihr Plugin vor oder nach dem Code eines anderen Plugins ausgeführt werden muss. Wenn Sie etwas modifizieren, das ein anderes Plugin ebenfalls modifiziert, steuert die Priorität, wer gewinnt.
Ein gängiges Muster: Wenn Sie einen Filter eines Themes überschreiben, verwenden Sie die Priorität 20 oder höher, um sicherzustellen, dass Sie nach dem Code des Themes ausgeführt werden.
Hooks entfernen
Sie können einen Hook entfernen, den jemand anderes hinzugefügt hat – einschließlich Theme- und Plugin-Hooks:
remove_action( 'wp_head', 'wp_generator' ); // entfernt die WP-Version aus der <head>
remove_filter( 'the_content', 'wpautop' ); // entfernt die automatische Absatzformatierung
Der Haken: Sie können einen Hook nur entfernen, wenn Sie remove_action/remove_filter aufrufen, nachdem der ursprüngliche add_action/add_filter ausgeführt wurde. Dies bedeutet normalerweise, dass Sie Ihre Entfernung in eine spätere Aktion einhaken.