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_actionmelden Sie eine Funktion an, die beim Eintreten eines Ereignisses ausgeführt wird. - Ausführen: Mit
do_actionführen Sie alle Funktionen aus, die an dieser Aktion registriert sind.
Beispiel:
add_action("test_aktion", "meine_funktion");
do_action("test_aktion");
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_filtermelden Sie eine Funktion an, die bestimmte Daten manipuliert. - Ausführen: Mit
apply_filterswenden Sie die registrierten Filter auf die Daten an und erhältst das modifizierte Ergebnis zurück.
Beispiel:
add_filter("test_filter", "meine_wertfilter");
$wert = apply_filters("test_filter", "Test");
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 registrieren Sie mit
add_actionund führst sie mitdo_actionaus, um zu bestimmten Zeitpunkten Aufgaben im WordPress-Lebenszyklus durchzuführen. - Filter registrieren und ausführen: Filter registrieren Sie mit
add_filterund führst sie mitapply_filtersaus, 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:
- Shopper: https://apihub.abacus.ch/apis/2024/entity/shopper-accounts.api
- Kunden: https://apihub.abacus.ch/apis/2024/entity/customers.api
- Kontaktperson: https://apihub.abacus.ch/apis/2024/entity/subjects.api
- Adressen: https://apihub.abacus.ch/apis/2024/entity/addresses.api
- Produkte: https://apihub.abacus.ch/apis/2024/entity/shop-products.api
- Klassierungen: https://apihub.abacus.ch/apis/2024/entity/shop-product-classification-elements.api
Sie müssen in der Navigation auf "Swagger" drücken, danach sehen Sie die Anfragen-Struktur und unten die Objekte.
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
Produkt Hervorgehoben (Featured): (Filter/register) pingwoo_product_featured
Diese Hook liefert zwei Argumente:
- (Boolean) Der Wert welcher verwendet wird, falls keine Änderungen vorgenommen werden
- (Object) Die Daten von Abacus
Dokumente an einem bestimmten Ort anzeigen: (Action/execute) pingwoo_show_product_documents
Diese Hook benötigt ein Argument:
- (Integer) Die WooCommerce Produkt ID
Anhanginformationen
Produktbild alternativer Text: (Filter/register) pingwoo_product_image_alt
Diese Hook liefert zwei Argumente:
- (String) Der Text welcher verwendet wird, wenn keine Änderungen vorgenommen werden
- (Object) Die Daten von Abacus
Produktdokument alternativer Text: (Filter/register) pingwoo_product_document_alt
Diese Hook liefert zwei Argumente:
- (String) Der Text welcher verwendet wird, wenn keine Änderungen vorgenommen werden
- (Object) Die Daten von Abacus
Klassierungsbild alternativer Text: (Filter/register) pingwoo_category_image_alt
Diese Hook liefert zwei Argumente:
- (String) Der Text welcher verwendet wird, wenn keine Änderungen vorgenommen werden
- (Object) Die Daten von Abacus
Importinformationen
Weitere Informationen können, nachdem ein Objekt importiert wurde, mit folgenden Hooks angepasst oder hinzugefügt werden:
Produkte: (Action/execute) pingwoo_product_info
Diese Hook liefert drei Argumente:
- (Integer) Die WooCommerce Produkt ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für das Produkt, 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)
Attribute: (Action/execute) pingwoo_attribute_info
Diese Hook liefert zwei Argumente:
- (Integer) Die WooCommerce Attribut ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für das Attribut, welcher momentan angewendet wird
Attribute: (Action/execute) pingwoo_attribute_term_info
Diese Hook liefert zwei Argumente:
- (Integer) Die WooCommerce Attribut Term ID
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für den Attribut Term, welcher momentan angewendet wird
- (Integer) Die WooCommerce Attribut ID
Kunden: (Action/execute) pingwoo_shopper_info
Diese Hook liefert zwei Argumente:
- (Integer) Die WooCommerce Shopper ID
- (Object) Die Daten von Abacus
Bestellungen: (Action/execute) pingwoo_order_info
Diese Hook liefert zwei Argumente:
- (Integer) Die WooCommerce Bestell ID
- (Object) Die Daten von Abacus
Import/Subscription
Ein Produkt ignorieren: (Filter/register) pingwoo_product_filter
Diese Hook liefert zwei Argumente:
- (Boolean) Definiert, ob ein Produkt ignoriert werden soll. Wird verwendet, falls keine Änderungen vorgenommen werden (Standard: false)
- (Object) Die Daten von Abacus
Erwartet wird ein boolescher Wert, ob das Produkt ignoriert werden soll oder nicht.
Ein Shopper ignorieren: (Filter/register) pingwoo_shopper_filter
Diese Hook liefert zwei Argumente:
- (Boolean) Definiert, ob ein Shopper ignoriert werden soll. Wird verwendet, falls keine Änderungen vorgenommen werden (Standard: false)
- (Object) Die Daten von Abacus
Erwartet wird ein boolescher Wert, ob der Shopper ignoriert werden soll oder nicht.
Ein Shopper ignorieren: (Filter/register) pingwoo_category_filter
Diese Hook liefert zwei Argumente:
- (Boolean) Definiert, ob eine Klassierung ignoriert werden soll. Wird verwendet, falls keine Änderungen vorgenommen werden (Standard: false)
- (Object) Die Daten von Abacus
Erwartet wird ein boolescher Wert, ob die Klassierung ignoriert werden soll oder nicht.
Nach einem erfolgreichen Import wird eine Hook ausgelöst: (Action/register) pingwoo_import_completed
Diese Hook liefert ein Argument:
- (String) Der Objekttyp welcher importiert wurde
Der Objekttyp kann einer der folgende Werte sein:
- ShopProduct
- ShopperAccount
- ShopSalesOrder
- ProductClassification
- VariantDimension
Nach einer erfolgreichen Subscription wird eine Hook ausgelöst: (Action/register) pingwoo_updated_data
Diese Hook liefert keine Argumente und dient als Information. Diese Hook kann z.B. verwendet werden, um die neuen Daten mit einem externen System zu synchronisieren.
Produktbilder
Nach einem erfolgreichem Import eines Produktes wird eine Hook ausgelöst, welche alle Produkt- und Variantenbilder enthält: (Action/register) pingwoo_product_images
Diese Hook liefert zwei Argumente:
- (Integer) Die WooCommerce Produkt ID
- (Array) Die Produkt- und Variantenbilder
Nach einem erfolgreichem Import einer Variante wird eine Hook ausgelöst, welche alle Variantenbilder enthält: (Action/register) pingwoo_variant_images
Diese Hook liefert drei Argumente:
- (Integer) Die WooCommerce Produkt ID
- (Array) Die Variantenbilder
- (Integer) Die ID vom Hauptprodukt
Daten manipulieren
Bevor ein Produkt importiert wird, die Daten anpassen: (Filter/register) pingwoo_before_product_info
Diese Hook liefert zwei Argumente:
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für das Produkt, welcher momentan angewendet wird
Erwartet werden die veränderten Daten von Abacus.
Bevor eine Variante importiert wird, die Daten anpassen: (Filter/register) pingwoo_before_variant_info
Diese Hook liefert zwei Argumente:
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für die Variante, welcher momentan angewendet wird
Erwartet werden die veränderten Daten von Abacus.
Bevor ein Attribut importiert wird, die Daten anpassen: (Filter/register) pingwoo_before_attribute_info
Diese Hook liefert zwei Argumente:
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für das Attribut, welcher momentan angewendet wird
Erwartet werden die veränderten Daten von Abacus.
Bevor ein Produkt importiert wird, die Daten anpassen: (Filter/register) pingwoo_before_attribute_term_info
Diese Hook liefert zwei Argumente:
- (Object) Die Daten von Abacus
- (String) Der Sprachcode für den Attribut Term, welcher momentan angewendet wird
Erwartet werden die veränderten Daten von Abacus.
Bevor ein Kunde importiert wird, die Daten anpassen: (Filter/register) pingwoo_before_shopper_info
Diese Hook liefert ein Argument:
- (Object) Die Daten von Abacus
Erwartet werden die veränderten Daten von Abacus.
Bevor eine Bestellung importiert wird, die Daten anpassen: (Filter/register) pingwoo_before_order_info
Diese Hook liefert ein Argument:
- (Object) Die Daten von Abacus
Erwartet werden die veränderten Daten von Abacus.
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.
Die Positionsliste bearbeiten, z.B. Reihenfolge ändern, Positon entfernen, hinzufügen etc.: (Filter/register) pingwoo_position_list
Diese Hook liefert zwei Argumente:
- (Array) Die Positionsliste mit allen Positionen (Object)
- (Object) Die WooCommerce Bestellung
Erwartet wird die Positionsliste mit allen Positionen.
Weitere Anreden hinzufügen oder bestehende entfernen: (Filter/register) pingwoo_salutations
Diese Hook liefert ein Argument:
- (Array) Die Anreden die verwendet werden, wenn keine Änderungen vorgenommen werden
Erwartet werden die Anreden.
Feld für das Hochladen von Dateien zur Bestellung anzeigen: (Action/execute) pingwoo_show_file_upload
Diese Hook benötigt keine Argumente.
Warenkorb herunterladen Knopf anzeigen: (Action/execute) pingwoo_show_cart_download
Diese Hook benötigt keine Argumente.
Feld für das Hochladen vom Warenkorb anzeigen: (Action/execute) pingwoo_show_cart_upload
Diese Hook benötigt keine Argumente.
Warenkorb Erfassungmaske Knopf anzeigen: (Action/execute) pingwoo_show_capture_mask_button
Diese Hook benötigt keine Argumente.
Kunde
Bei einem Kunden einen Namen Zusatz definieren: (Filter/register) pingwoo_subject_name_supplement
Diese Hook liefert zwei Argumente:
- (String) Der Wert welcher verwendet wird, falls keine Änderungen vorgenommen werden
- (Object) Die Informationen über den Kunden
Bei einem Kunden einen Titel definieren: (Filter/register) pingwoo_subject_title
Diese Hook liefert zwei Argumente:
- (String) Der Wert welcher verwendet wird, falls keine Änderungen vorgenommen werden
- (Object) Die Informationen über den Kunden
Preisfindung
Sie können aktiv in die Preisfindung eingreifen und den Preis modifizieren. Hier für bietet PingWoo zwei Hooks an:
Preis ohne Mehrwertsteuer: (Filter/register) pingwoo_get_price
Diese Hook liefert zwei Argumente:
- (Float) Der Preis ohne Mehrwertsteuer
- (Object) Das WooCommerce Produkt
Erwartet wird der Preis ohne Mehrwertsteuer.
Preis mit Mehrwertsteuer: (Filter/register) pingwoo_get_price_tax
Diese Hook liefert zwei Argumente:
- (Float) Der Preis mit Mehrwertsteuer
- (Object) Das WooCommerce Produkt
Erwartet wird der Preis mit Mehrwertsteuer.
Diese Hooks werden auf der gesamten Seite angewendet. Überall wo ein Preis angezeigt wird.
Staffelpreise an einem bestimmten Ort anzeigen: (Action/execute) pingwoo_show_product_graduations
Diese Hook benötigt ein Argument:
- (Integer) Die WooCommerce Produkt ID
UVP (Gast) Preise anzeigen bei Kunden mit Rabatten: (Filter/execute) pingwoo_get_guest_price
Diese Hook benötigt drei Argumente:
- (Float) Der Preis welcher verwendet wird, falls die Preisfindung fehlschlägt
- (Object) Das WooCommerce Produkt
- (Integer) Die Menge, z.B. für Staffelpreise
- Optional: Standardmässig wird die Menge 1 verwendet
Für Entwickler
Einen Endpunkt modifizieren: (Filter/register) pingwoo_endpoint
Diese Hook liefert ein Argument:
- (String) Der Endpunkt
Erwartet wird der veränderte Endpunkt.
Ein Bild bei einem Knopf hinzufügen: (Filter/register) pingwoo_button_icon
Diese Hook liefert zwei Argumente:
- (String) Das Bild welches verwendet wird, wenn keine Änderungen vorgenommen werden
- (String) Der Knopfname
Der Knopfname kann einer der folgende Werte sein:
- capture_mask_validate
- capture_mask_clear
- meta_remove
- document
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.