Hooks
Aktionen und Filter in WordPress: Grundlagen und Anwendung
In WordPress spielen Aktionen und Filter eine zentrale Rolle, um den Funktionsumfang der Anwendung zu erweitern. Sie ermöglichen Entwicklern, an definierten Stellen im WordPress-Zyklus Funktionen zu registrieren und bei Bedarf auszuführen.
Aktion
Eine Action in WordPress ist ein benutzerdefinierter PHP-Callback, der an bestimmten Punkten im WordPress-Lebenszyklus registriert und ausgeführt wird. Aktionen dienen dazu, auf Ereignisse wie das Laden einer Seite, das Veröffentlichen eines Beitrags oder das Anmelden eines Benutzers zu reagieren. Aktionen verändern keine Daten direkt und haben keinen Rückgabewert; sie führen einfach Aufgaben aus.
- Registrieren: Mit
add_action
meldest du eine Funktion an, die beim Eintreten eines Ereignisses ausgeführt wird. - Ausführen: Mit
do_action
führst du alle Funktionen aus, die an dieser Aktion registriert sind.
Beispiel:
do_action("test_aktion");
add_action("test_aktion", "meine_funktion");
function meine_funktion() {
// Code, der ausgeführt wird, wenn die Aktion "test_aktion" aufgerufen wird
error_log("Die Funktion 'meine_funktion' wurde durch die Aktion 'test_aktion' ausgeführt.");
}
In diesem Beispiel wird do_action("test_aktion")
aufgerufen, um die test_aktion
-Aktion auszuführen. Da meine_funktion
durch add_action
an test_aktion
registriert wurde, wird meine_funktion
ausgeführt, sobald do_action("test_aktion")
aufgerufen wird.
Filter
Ein Filter in WordPress ermöglicht es, Daten zu ändern, bevor sie ausgegeben oder gespeichert werden. Filter sind benutzerdefinierte PHP-Callbacks, die den Datenstrom manipulieren und einen Rückgabewert erwarten. Sie werden oft verwendet, um Inhalte wie Beiträge, Titel oder Kommentare vor der Anzeige anzupassen.
- Registrieren: Mit
add_filter
meldest du eine Funktion an, die bestimmte Daten manipuliert. - Ausführen: Mit
apply_filters
wendest du die registrierten Filter auf die Daten an und erhältst das modifizierte Ergebnis zurück.
Beispiel:
$wert = apply_filters("test_filter", "Test");
add_filter("test_filter", "meine_wertfilter");
function meine_wertfilter($wert) {
// Code, der den Inhalt manipuliert
return $wert . " - Zusatztext";
}
In diesem Beispiel wird der Filter test_filter
angewendet, um den Wert "Test"
zu verändern. apply_filters("test_filter", "Test")
ruft alle Filter-Funktionen auf, die an test_filter
registriert sind. Die Funktion meine_wertfilter
wird durch add_filter("test_filter", "meine_wertfilter")
an den Filter registriert und fügt den Zusatztext "- Zusatztext"
hinzu. Das Ergebnis von apply_filters
ist somit "Test - Zusatztext"
.
Zusammengefasst: Registrieren und Ausführen
- Aktionen registrieren und ausführen: Aktionen registrierst du mit
add_action
und führst sie mitdo_action
aus, um zu bestimmten Zeitpunkten Aufgaben im WordPress-Lebenszyklus durchzuführen. - Filter registrieren und ausführen: Filter registrierst du mit
add_filter
und führst sie mitapply_filters
aus, um Inhalte oder Daten zu manipulieren, bevor sie ausgegeben oder gespeichert werden.
Dieses System von Aktionen und Filtern bietet Entwicklern die Flexibilität, WordPress-Funktionen zu erweitern und anzupassen, ohne den Core-Code zu verändern.
Im folgenden Abschnitt ist oft die Rede von "Daten von Abacus". Die Datenstruktur von Abacus können Sie hier einsehen:
- Produkte: https://apihub.abacus.ch/apis/2024/entity/shop-products.api
- Klassierungen: https://apihub.abacus.ch/apis/2024/entity/shop-product-classification-elements.api
Übersetzungen
Zurzeit werden TranslatePress und WPML von PingWoo direkt unterstützt. Sie können jedoch problemlos auch andere Plugins verwenden und diese mit unseren Hooks selbst integrieren:
Produkte: (Action/register) pingwoo_product_translate
Klassierungen: (Action/register) pingwoo_category_translate
Diese Hooks liefern drei Argumente:
- (Integer) Die WooCommerce Produkt/Kategorie ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für das Produkt/die Kategorie, welcher momentan angewendet wird
Varianten: (Action/register) pingwoo_variant_translate
Diese Hook liefert vier Argumente:
- (Integer) Die WooCommerce Varianten ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für die Variante, welcher momentan angewendet wird
- (Integer) Die ID vom Hauptprodukt (Variant 0)
Attribute: (Action/register) pingwoo_attribute_translate
Diese Hook liefert drei Argumente:
- (Integer) Die WooCommerce Attribute ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für das Attribut, welcher momentan angewendet wird
Attributwerte: (Action/register) pingwoo_attribute_term_translate
Diese Hook liefert vier Argumente:
- (Integer) Die WooCommerce Attributwert ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für den Attributwert, welcher momentan angewendet wird
- (Integer) Die WooCommerce Attribute ID
Die Hooks werden immer nach dem Hinzufügen von Produkten, Varianten, Klassierungen, Attributen oder Attributwerten ausgelöst.
Manuelle Übersetzungen
Hinzufügen: (Action/execute) pingwoo_add_translation
Diese Hook benötigt drei Argumente:
- (String) Text in der Standardsprache (Standard von WordPress)
- (String) Text in übersetzter Sprache
- (String) Die Sprache im ISO 639-1 Format (z.B. de, fr, it)
Diese Hook kann zu jeder Zeit ausgeführt werden.
Verarbeiten lassen und den Text in der Standardsprache, falls verfügbar, zurückerhalten: (Filter/execute) pingwoo_process_translation
Diese Hook benötigt ein Argument:
- (Callable) Funktion welche definiert wie die Texte zusammengesetzt werden
- Muss zwingend ein Array zurückgeben!
- Format: array("de" => "Übersetzung", "en" => "translation", "fr" => "traduction")
Diese Hook liefert einen Wert:
- (String) Text in der Standardsprache, den ersten oder leer
Produktinformationen
Sollten Informationen nicht stimmen, oder wenn Sie eine spezielle Struktur im Abacus besitzen, können Sie verschiedene Produktinformationen überschrieben. Dafür sind folgende Hooks eventuell nützlich:
Produkt Titel: (Filter/register) pingwoo_product_name
Diese Hook liefert drei Argumente:
- (String) Der Titel welcher verwendet wird, falls keine Änderungen vorgenommen werden
- (Object) Die Daten von Abacus
- (String) Der Sprachcode fürs Produkt, welcher momentan angewendet wird
Produkt Titel Felder: (Filter/register) pingwoo_product_name_fields_keys
Diese Hook liefert zwei Argumente:
- (Array) Die Felder die standardmässig importiert werden (Designation)
- (Object) Die Daten von Abacus
Diese Hook unterstützt Sprachen automatisch. Um z.B. die Designation1 und Designation2 zu kombinieren, müssen Sie folgendes Array zurückgeben:
return [
["field" => "Texts", "key" => "Designation1"],
["field" => "Texts", "key" => "Designation2"]
];
Desweiteren wird diese Hook nicht ausgeführt, wenn Sie die pingwoo_product_name Hook registrieren.
Produkt Beschreibung: (Filter/register) pingwoo_product_description
Diese Hook liefert zwei Argumente:
- (String) Die Beschreibung welche verwendet wird, falls keine Änderungen vorgenommen werden
- (Object) Die Daten von Abacus
- (String) Der Sprachcode fürs Produkt, welcher momentan angewendet wird
Produkt Kurzbeschreibung: (Filter/register) pingwoo_product_short_description
Diese Hook liefert zwei Argumente:
- (String) Die Kurzbeschreibung welche verwendet wird, falls keine Änderungen vorgenommen werden
- (Object) Die Daten von Abacus
- (String) Der Sprachcode fürs Produkt, welcher momentan angewendet wird
Weitere Produktinformationen können, nachdem ein Produkt hinzugefügt wurde, mit folgenden Hooks angepasst oder hinzugefügt werden:
Produkte: (Action/register) pingwoo_product_info
Diese Hook liefert zwei Argumente:
- (Integer) Die WooCommerce Produkt ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für die Variante, welcher momentan angewendet wird
Varianten: (Action/register) pingwoo_variant_info
Diese Hook liefert vier Argumente:
- (Integer) Die WooCommerce Produkt ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für die Variante, welcher momentan angewendet wird
- (Integer) Die ID vom Hauptprodukt (Variant 0)
Aktionen und Filter in WordPress: Grundlagen und Anwendung
In WordPress spielen Aktionen und Filter eine zentrale Rolle, um den Funktionsumfang der Anwendung zu erweitern. Sie ermöglichen Entwicklern, an definierten Stellen im WordPress-Zyklus Funktionen zu registrieren und bei Bedarf auszuführen.
Aktion
Eine Action in WordPress ist ein benutzerdefinierter PHP-Callback, der an bestimmten Punkten im WordPress-Lebenszyklus registriert und ausgeführt wird. Aktionen dienen dazu, auf Ereignisse wie das Laden einer Seite, das Veröffentlichen eines Beitrags oder das Anmelden eines Benutzers zu reagieren. Aktionen verändern keine Daten direkt und haben keinen Rückgabewert; sie führen einfach Aufgaben aus.
- Registrieren: Mit
add_action
meldest du eine Funktion an, die beim Eintreten eines Ereignisses ausgeführt wird. - Ausführen: Mit
do_action
führst du alle Funktionen aus, die an dieser Aktion registriert sind.
Beispiel:
do_action("test_aktion");
add_action("test_aktion", "meine_funktion");
function meine_funktion() {
// Code, der ausgeführt wird, wenn die Aktion "test_aktion" aufgerufen wird
error_log("Die Funktion 'meine_funktion' wurde durch die Aktion 'test_aktion' ausgeführt.");
}
In diesem Beispiel wird do_action("test_aktion")
aufgerufen, um die test_aktion
-Aktion auszuführen. Da meine_funktion
durch add_action
an test_aktion
registriert wurde, wird meine_funktion
ausgeführt, sobald do_action("test_aktion")
aufgerufen wird.
Filter
Ein Filter in WordPress ermöglicht es, Daten zu ändern, bevor sie ausgegeben oder gespeichert werden. Filter sind benutzerdefinierte PHP-Callbacks, die den Datenstrom manipulieren und einen Rückgabewert erwarten. Sie werden oft verwendet, um Inhalte wie Beiträge, Titel oder Kommentare vor der Anzeige anzupassen.
- Registrieren: Mit
add_filter
meldest du eine Funktion an, die bestimmte Daten manipuliert. - Ausführen: Mit
apply_filters
wendest du die registrierten Filter auf die Daten an und erhältst das modifizierte Ergebnis zurück.
Beispiel:
$wert = apply_filters("test_filter", "Test");
add_filter("test_filter", "meine_wertfilter");
function meine_wertfilter($wert) {
// Code, der den Inhalt manipuliert
return $wert . " - Zusatztext";
}
In diesem Beispiel wird der Filter test_filter
angewendet, um den Wert "Test"
zu verändern. apply_filters("test_filter", "Test")
ruft alle Filter-Funktionen auf, die an test_filter
registriert sind. Die Funktion meine_wertfilter
wird durch add_filter("test_filter", "meine_wertfilter")
an den Filter registriert und fügt den Zusatztext "- Zusatztext"
hinzu. Das Ergebnis von apply_filters
ist somit "Test - Zusatztext"
.
Zusammengefasst: Registrieren und Ausführen
- Aktionen registrieren und ausführen: Aktionen registrierst du mit
add_action
und führst sie mitdo_action
aus, um zu bestimmten Zeitpunkten Aufgaben im WordPress-Lebenszyklus durchzuführen. - Filter registrieren und ausführen: Filter registrierst du mit
add_filter
und führst sie mitapply_filters
aus, um Inhalte oder Daten zu manipulieren, bevor sie ausgegeben oder gespeichert werden.
Dieses System von Aktionen und Filtern bietet Entwicklern die Flexibilität, WordPress-Funktionen zu erweitern und anzupassen, ohne den Core-Code zu verändern.
Im folgenden Abschnitt ist oft die Rede von "Daten von Abacus". Die Datenstruktur von Abacus können Sie hier einsehen:
- Produkte: https://apihub.abacus.ch/apis/2024/entity/shop-products.api
- Klassierungen: https://apihub.abacus.ch/apis/2024/entity/shop-product-classification-elements.api
Übersetzungen
Zurzeit werden TranslatePress und WPML von PingWoo direkt unterstützt. Sie können jedoch problemlos auch andere Plugins verwenden und diese mit unseren Hooks selbst integrieren:
Produkte: (Action/register) pingwoo_product_translate
Klassierungen: (Action/register) pingwoo_category_translate
Diese Hooks liefern drei Argumente:
- (Integer) Die WooCommerce Produkt/Kategorie ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für das Produkt/die Kategorie, welcher momentan angewendet wird
Varianten: (Action/register) pingwoo_variant_translate
Diese Hook liefert vier Argumente:
- (Integer) Die WooCommerce Varianten ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für die Variante, welcher momentan angewendet wird
- (Integer) Die ID vom Hauptprodukt (Variant 0)
Attribute: (Action/register) pingwoo_attribute_translate
Diese Hook liefert drei Argumente:
- (Integer) Die WooCommerce Attribute ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für das Attribut, welcher momentan angewendet wird
Attributwerte: (Action/register) pingwoo_attribute_term_translate
Diese Hook liefert vier Argumente:
- (Integer) Die WooCommerce Attributwert ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für den Attributwert, welcher momentan angewendet wird
- (Integer) Die WooCommerce Attribute ID
Die Hooks werden immer nach dem Hinzufügen von Produkten, Varianten, Klassierungen, Attributen oder Attributwerten ausgelöst.
Manuelle Übersetzungen
Hinzufügen: (Action/execute) pingwoo_add_translation
Diese Hook benötigt drei Argumente:
- (String) Text in der Standardsprache (Standard von WordPress)
- (String) Text in übersetzter Sprache
- (String) Die Sprache im ISO 639-1 Format (z.B. de, fr, it)
Diese Hook kann zu jeder Zeit ausgeführt werden.
Verarbeiten lassen und den Text in der Standardsprache, falls verfügbar, zurückerhalten: (Filter/execute) pingwoo_process_translation
Diese Hook benötigt ein Argument:
- (Callable) Funktion welche definiert wie die Texte zusammengesetzt werden
- Muss zwingend ein Array zurückgeben!
- Format: array("de" => "Übersetzung", "en" => "translation", "fr" => "traduction")
Diese Hook liefert einen Wert:
- (String) Text in der Standardsprache, den ersten oder leer
Produktinformationen
Sollten Informationen nicht stimmen, oder wenn Sie eine spezielle Struktur im Abacus besitzen, können Sie verschiedene Produktinformationen überschrieben. Dafür sind folgende Hooks eventuell nützlich:
Produkt Titel: (Filter/register) pingwoo_product_name
Diese Hook liefert drei Argumente:
- (String) Der Titel welcher verwendet wird, falls keine Änderungen vorgenommen werden
- (Object) Die Daten von Abacus
- (String) Der Sprachcode fürs Produkt, welcher momentan angewendet wird
Produkt Titel Felder: (Filter/register) pingwoo_product_name_fields_keys
Diese Hook liefert zwei Argumente:
- (Array) Die Felder die standardmässig importiert werden (Designation)
- (Object) Die Daten von Abacus
Diese Hook unterstützt Sprachen automatisch. Um z.B. die Designation1 und Designation2 zu kombinieren, müssen Sie folgendes Array zurückgeben:
return [
["field" => "Texts", "key" => "Designation1"],
["field" => "Texts", "key" => "Designation2"]
];
Desweiteren wird diese Hook nicht ausgeführt, wenn Sie die pingwoo_product_name Hook registrieren.
Produkt Beschreibung: (Filter/register) pingwoo_product_description
Diese Hook liefert drei Argumente:
- (String) Die Beschreibung welche verwendet wird, falls keine Änderungen vorgenommen werden
- (Object) Die Daten von Abacus
- (String) Der Sprachcode fürs Produkt, welcher momentan angewendet wird
Produkt Kurzbeschreibung: (Filter/register) pingwoo_product_short_description
Diese Hook liefert drei Argumente:
- (String) Die Kurzbeschreibung welche verwendet wird, falls keine Änderungen vorgenommen werden
- (Object) Die Daten von Abacus
- (String) Der Sprachcode fürs Produkt, welcher momentan angewendet wird
Weitere Produktinformationen können, nachdem ein Produkt hinzugefügt wurde, mit folgenden Hooks angepasst oder hinzugefügt werden:
Produkte: (Action/execute) pingwoo_product_info
Diese Hook liefert zwei Argumente:
- (Integer) Die WooCommerce Produkt ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für die Variante, welcher momentan angewendet wird
Varianten: (Action/execute) pingwoo_variant_info
Diese Hook liefert vier Argumente:
- (Integer) Die WooCommerce Produkt ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für die Variante, welcher momentan angewendet wird
- (Integer) Die ID vom Hauptprodukt (Variant 0)
Bestellung
Ein Abacus Produkt zu einer Liefermethode zuordnen: (Filter/register) pingwoo_order_shipping_product_id
Diese Hook liefert drei Argumente:
- (Integer) Die Produkt ID die verwendet wird, wenn keine angegeben wird (Standard: null)
- (Object) Die Liefermethode als Order Item
- (Integer) Die Position in der Bestellung
Erwartet wird die WooCommerce Produkt ID. Anhand dieser wird die Abacus ID ermittelt.
Für Entwickler
Möchten Sie Ihren Code testen und überprüfen? PingWoo bietet hierfür diverse Hooks an:
Einzelnes Produkt importieren: (Action/execute) pingwoo_test_product
Diese Hook benötigt zwei Argumente:
- (Integer) Die Abacus Produkt ID
- (Integer) Die Abacus Varianten ID
- Optional: Standardmässig wird die ID 0 verwendet
Einzelnes Produkt mit allen Varianten importieren: (Action/execute) pingwoo_test_variant
Diese Hook benötigt ein Argument:
- (Integer) Die Abacus Produkt ID
Weitere Hooks können auf Anfrage gerne hinzugefügt werden.