So, es geht weiter.
Der Justin erzählt uns jetztwas über Hooks und wie
man damit WordPressohne Plugins verändern kann.
Also, heute rede ich malso ein bisschen darüber,
wie kann man denn soden richtigen Hook finden.
Also zum Beispiel Code erweitern,ohne dass man explizit Änderungen im
Plugin oder Core oder ähnlichemdurchführen muss.
Erstmal, wer bin ich?
Ganz simpel, ich bin Justin Joe Koska,bin 24 Jahre alt, bin
WordPress-Entwickler, bin seit 2019 bei derWebwisser GmbH bzw.
WP-Wartung24.
Das ist mein fünftes WordCamp und zweitesMal als Speaker bin ich dabei.
So, fangen wir mal an.
Was sind denn grundsätzlich Hooks?
Hooks sind im Prinzip, die ermöglichen dieErgänzung oder Modifizierung von Code,
ohne dass man direkte Anpassungen imPlugin macht.
Also, dass man Core oder Theme oder Plugin-Dateien, die ich hier übrigens zukünftig
jetzt mal als Komponenten zusammenfasse,zur Verfügung stellt.
Also können zum Beispiel diese Anpassungenhalt in einem eigenen Theme oder einem
eigenen Plugin passieren und müssen nichtdirekt in der Komponente passieren.
Da gibt es zum Beispiel die Actions.
Damit kann man Code an einer bestimmtenStelle ausführen.
Zum Beispiel HTML ausgeben in wp_head oderähnlichen Hooks.
Aktionen detektieren, zum Beispielsave_post.
Oder zum Beispiel Funktionen zum richtigenZeitpunkt ausführen, wie template_redirect.
Damit die Redirects nicht zu frühpassieren, dass man trotzdem alle Daten
hat, aber auch nicht zu spät, dass derRedirect auch noch sauber funktioniert.
Oder zum Beispiel rest_api_init.
Um zum Beispiel dieregister_rest_route-Funktion zu
definieren, nur wenn es sichum eine REST-Route handelt.
Aber auch hier nicht zu früh und nicht zuspät.
Dafür gibt es in WordPress Core zweiFunktionen.
Und zwar einmal die do_action-Funktion.
Die sieht so aus.
Da haben wir einmal den Hook-Namen und dieArgs.
Der Hook-Name ist im Prinzip einfach einString, der definiert, wie der Hook heißt.
Und die Args sind halt dieArgumente, die der Core oder
das Plugin oder so an den,der den Hook nutzt, weitergibt.
Und dafür gibt es dann die Funktion,die man dann nutzt.
Ist dann in der Regel add_action.
Damit kann man sich denselben Hook-Namenreferenzieren.
Übergibt einen Callback, der dannaufgerufen wird.
Übergibt eine Priority, also kleinereZahlen werden zuerst aufgerufen,
spätere danach.
Und AcceptedArgs, wieviele der Argumente, die hier
übergeben werden, mandenn wirklich haben möchte.
Dafür ein Beispiel.
In der wp-includes/post.php gibt es diedo_action('save_post',
dort haben wir als mögliche Parameter$post_id, $post und $update.
Jetzt braucht man dievielleicht nicht zwingen
und möchte einfachnur eine Mail versenden.
Hookt sich also einfach rein.
Da rein.
Sagt den Name hier.
Den Callback.
Der ist dann hier.
Und dort hat man dann zum Beispiel diewp_mail.
Jetzt will man aber zumBeispiel dafür sorgen, dass
man zum Beispiel nochInformationen über den Post hat.
Oder weiß, ob es jetzt ein Update ist odereine Neuerstellung von einem Post.
Also kann man zum Beispiel auch dieParameter übergeben.
Dafür muss man die Anzahl der Parameterdort angeben.
Aber dann können wir sie einfach nutzen.
Wenn es kein Update ist, gehen wir raus.
Möchten wir zum Beispiel in dem Fallnicht.
Und wir holen uns noch den Title,bevor wir die Mail versenden.
Ganz simpel.
Wichtig, was man nur so bei Hooks auch...
Nicht nur bei Hooks, auch bei anderenSachen aufpassen muss.
Dass man nicht in einer Endlosschleifelandet.
Denn...
Es ist zum Beispiel schon mal bei mirpassiert, dass ich mich reingehookt habe
in das Abfragen einer Änderung einesOptionswertes.
Und diesen dann wieder korrigieren wollte.
Und dadurch einen Endlossloop ausgelösthabe und 15.000 E-Mails verschickt habe.
Das passiert schneller als man denkt.
Da muss man immer so ein bisschenaufpassen.
Und Endlosschleifen halt vermeiden.
Dann gibt es noch Filter.
Die funktionieren grundsätzlich sehrähnlich wie Hooks.
Nur, dass man Daten vor der Anpassung haltanpassen kann.
Und zum Beispiel kann man damitFunktionalitäten ein- oder ausschalten.
Also im Hook show_admin_bar kann man zumBeispiel angeben, wenn der Wert true
returnt, wird eine Admin Bar für den Userangezeigt.
Wenn false, dann nicht.
Kann man dann Sachen prüfen und so weiter.
Und sich dann überlegen, wann waspassieren soll.
Man kann aber zum Beispiel auch dieAusgabe verändern.
Bei the_content.
Da kriegt man dann das HTML zurück.
Und kann damit erstmal Sachen machen, bevores dann wirklich effektiv ausgegeben wird.
Oder noch einfacher.
excerpt_length.
Um die Länge des Textauszuges einfach zudefinieren.
Und je nachdem beibestimmten Beiträgen oder
bestimmten Bedingungeneinfach anders machen.
Oder man kann das Verhalten modifizieren.
upload_mimes zum Beispiel sagen,hier ich erlaube auch SVG's.
Oder wp_mail_from.
Ich stelle den Standard Absender derE-Mail im Prinzip.
Ein über den Hook.
Und kann den vielleicht auch je nachdem,was gerade Sache ist, anders machen.
Dafür haben wir die Funktion apply_filters.
Sieht ähnlich aus wie do_action.
Mit einziger Ausnahme, wir haben hier noch$value.
Das ist der Wert, den wir modifizierenkönnen.
Und deswegen, add_filter sieht im Prinzipgenauso aus wie add_action.
Macht kurzzeitig sogar genau dasselbe.
Also add_filter ruft add_action auf.
Aber...
dort haben wir halt im Prinzip dieselbenParameter.
Beispiel dafür.
Die functions.php, eben schonangesprochen.
upload_mimes.
Da kann man dann zum Beispiel sagen.
Ich erlaube SVG's zum Upload.
Aber auch hier können wir zum Beispiel dieParameter abfragen.
$t und $user.
Beziehungsweise $t haben wir ja auf jedenFall.
Das ist ja der, der wird den anpassen.
Und $user, dafür die 2.
Hat der denn die Capability dafür?
SVG's upzuloaden.
Dann mach es.
Wichtig.
Wir sollten diesen Wert, die Rückgabe desWertes nicht vergessen.
Weil sonst ist er nachher leer.
Da gibt es noch so ein paar Sonderfällebei Actions und Filter.
Denn es gibt zum Beispiel auch Actions undFilter mit Referenz.
Das heißt.
Es gibt zum Beispieldo_action_ref_array.
Und apply_filters_ref_array.
Das sind im Prinzip dieselben Funktionenwie do_action und apply_filters.
Mit der einzigen Ausnahme.
Damit die Parameter im Prinzip alsReferenz übergeben werden.
Und direkt angepasst werden.
Zum Beispiel in pre_get_posts.
Da hat man die Query.
Dass man die halt nicht zurückgeben muss.
Sondern als Objekt einfach als Referenzerhält.
Und es gibt zum Beispiel auch Actions undFilter mit dynamischen Hook-Namen.
Ein paar Beispiele dafür.
transition_post_status.
Das ist ja so ein ganz normaler Hook.
Wo wir $new_status und $old_status haben.
Es gibt aber dafür auch\{$old_status\}_to_\{$new_status\}.
Da muss man nicht die Sachen erstmal inder Funktion abfragen.
Sondern mein Hook wird auch nurausgeführt.
Wenn wirklich der $old_status und$new_status stimmen.
Dasselbe gilt auch noch kurz für denFilter.
register_post_type_args.
Da kann man den $post_type auch übergeben.
So, jetzt zum eigentlichen Thema.
Wie finde ich denn eigentlich Hooks?
Sind wir mal ganz ehrlich.
Einfach mal googeln.
Hilft in den meisten Fällen.
Weil selten ist man wirklich der Einzigemit diesen oder ähnlichen Anforderungen.
Das heißt, wenn man googelt.
Hat man häufig schon mal eine Grundlage.
Was man denn nutzen könnte.
Oder ähnliche Beispiele.
Häufig findet man dabei auchDokumentation.
Zum Beispiel die WordPress DeveloperResources.
Oder Entwicklerdokumentation desjeweiligen Plugins oder Themes.
Jetzt kommen wir mal zu den etwastechnischeren Themen.
Query Monitor Plugin.
Da kann man zum Beispiel sich alle ausgeführtenActions und Filter anzeigen lassen.
Sieht dann so aus.
Man installiert das Plugin.
Und dann hat man hier oben in der Adminbarso eine kleine Anzeige.
Die gibt an wie lang die Seite lädt.
Und wie groß sie ist.
Und alles drum und dran.
Wenn man da drauf geht.
Gibt es den Punkt Hooks und Actions.
Und wenn man dort drauf geht.
Sieht so aus.
Hier findet man dann links den Hook.
Den jeweiligen der aufgerufen wird.
Hier die Priority.
Hier die Action.
Welche Action dann jeweils aufgerufenwurde.
Und hinten noch aus welcher Komponente daskommt.
Also zum Beispiel aus Yoast oderAutoptimize oder dem WordPress Core.
Wenn das alles nichts hilft.
Dann muss man meistens einfach mal denCode nach Hooks durchsuchen.
Dafür kann man einfach den komplettenCode.
Zum Beispiel über eine IDE oder andereTools.
Nach den Funktionen BlueAction undApplyFilters durchsuchen.
Und findet dann gegebenenfalls halt.
Die passende Stelle.
An der vielleicht dann ein Hook existiert.
Wenn das so einfach nicht geht.
Oder man vielleicht nicht nach demrichtigen Hook Namen oder ähnlichem sucht.
Und deswegen nichts findet.
Suche ich meistens erstmal dieanzupassende Stelle.
Das heißt statt nach do_action undapply_filters zu durchsuchen.
Durchsuche ich nach Klassen IDs oderanderen HTML Attributen.
Oder ähnlichem bei der Ausgabe.
Um die Stelle zu finden an der daspassiert.
Was ich anpassen möchte.
Oder auch die passenden Template Dateienangucken.
header.php, single.php.
Wenn ich weiß das passiert immer in meinemEinzelbeitrags Template.
Dann gucke ich vielleicht mal da drin.
Oder auch Optionsnamen, Meta Keys oderähnliches.
Alles wo man irgendwie weiß.
Das müsste an der Stelle genutzt werden.
An der ich etwas anpassen will.
Danach kann man einfach mal suchen.
Und mit ein bisschen Glück.
Findet man direkt ein Hook.
Und kann direkt mit der Anpassungloslegen.
Aber auch leider nicht immer so.
Denn was machen wir dann wenn da keinerist.
Ganz simpel.
Man kann zum Beispiel den Code rückwärtsdurchsuchen.
Und durchgucken.
Um vielleicht andere Stellen kurz vorherzu finden.
An denen man dasselbe im Prinzip tun kann.
Was man eigentlich machen möchte.
Oder zum Beispiel die Variable die dorterst ausgegeben wird.
Vielleicht vorher irgendwo modifizierenkann.
Dafür habe ich so ein paar kleine Tippsund Tricks.
Wenn man sie vermeiden kann.
Sollte man sie vielleicht vermeiden.
Aber wenn man keine andere Möglichkeithat.
Ist es trotzdem besser.
Als wenn man die Sachen direkt im Codeanpasst.
Und zwar zum Beispiel Filter.
Können im Prinzip wie Actions verwendetwerden.
Muss nur beachten.
Die Rückgabe muss man trotzdem machen.
Auch wenn man den Wert nicht anpasst.
Aber trotzdem sollte man den Wertzurückgeben.
Weil sonst die Funktion nicht mehr.
Also der Filter nicht mehr wie gewünschtfunktioniert.
Viele WordPress Funktionen.
Haben auch direkt eingebaute Hooks.
Also get_option und get_the_title.
Damit kann man problemlos den Wertanpassen.
Den diese Funktion zurück liefern.
Auch kann man zum Beispiel.
In vorherigen Hooks.
Sich die Werte zusammensammeln.
Um sie dann an den späteren Filter.
In dem man sie braucht.
Aber nicht hat.
Nutzen kann.
Und man kann zum Beispiel.
Im Prinzip wie bei drittens.
Auch unspezifische Hooks.
Zum Beispiel get_option oder so.
Durch andere Hooks die kurz vorherstattfinden.
Und kurz nachher.
Etwas einschränken.
Das sie auch wirklich nur dann passieren.
Wenn man sie wirklich haben möchte.
Dafür haben wir mal ein paar Beispiele.
Ich habe einfach mal.
Von GitHub Copilot mir so ein.
Snippet programmieren lassen.
Was so grundsätzlich so in einem.
Plugin oder Theme oder so vorhanden seinkönnte.
Was einfach ein E-Mail Versand.
Nach einer Beitragsanpassung macht.
Gehen wir einmal kurz durch.
Hier oben haben wir den Hook.
Dann wird die Funktion aufgerufen.
Dort holen wir uns.
Eine E-Mail-Adress aus den Options.
Wenn sie nicht existent ist.
Gehen wir raus.
Dann checken wir ein paar Fields.
Haben da auch noch einen Hook für.
Wenn die Changes leer sind.
Lassen wir weg.
Die E-Mail brauchen wir ja dann nicht.
Und dann packen wir uns noch.
Betreff zusammen.
Eine Message.
Und am Ende wird.
Eine wp_mail verschickt.
So.
Wenn wir da jetzt mal was anpassen wollen.
Zum Beispiel.
Ein Beitragstyp.
In dem E-Mail Betreff hinzufügen.
Suchen wir erstmal die Stelle raus.
Wo der Betreff zusammengebaut wird.
Und sehen da.
Da gibt es direkt einen Filter.
Kein Problem.
Nutzen wir.
Einfach reinhooken.
Die Funktion definieren.
Und die Änderung durchführen.
Wenn wir jetzt aber zum Beispiel.
Die E-Mail auch senden möchten.
Wenn.
Keine Änderung passiert ist.
Gucken wir uns nochmal an.
Wir haben da.
Drinnen.
Wenn keine Änderungen da sind.
Returnen wir.
Das heißt.
Alles was danach ausgeführt wird.
Also das wp_mail unten drunter.
Da kommt er gar nicht hin.
Wir haben aber.
Kurze Zeit vorher.
$changes
Was ein Filter ist.
Und wie ich eben sagte.
Wir können so ein Filter im Prinzip auchwie ein Hook verwenden.
Also wie eine Action.
Indem wir uns einfach reinhooken.
Zum Beispiel prüfen.
Gibt es denn keine Änderung.
Also den Fall an dem wir noch einezusätzliche E-Mail versenden möchten.
Wenn ja.
Dann.
Wenn nicht.
Also wenn es Changes gibt.
Und die Mail sowieso versendet wird.
Dann lassen wir es weg.
Auch die Mail.
Das ist keine Änderung da.
Wichtig.
Rückgabewert.
Weil sonst klappt nicht.
Nächstes Beispiel.
Wir möchten die Admin E-Mail als FallbackEmpfänger haben.
Wenn wir jetzt hier runter gucken.
Hier haben wir unsere E-Mail die abgefragtwird.
Jetzt sehen wir da drunter.
Wenn die leer ist.
Also keine hinterlegt ist.
Gehen wir raus.
Das heißt.
Wenn wir daran was anpassen wollen.
Davor gibt es nichts.
Und wenn das davor nicht angepasst wurde.
Bricht er ab.
Also.
Können wir uns aber.
Wie ich eben sagte, get_option.
Bietet Hooks an.
In den Hook option Unterstrich optionname.
Reinhooken.
Mit meiner Funktion.
Hier send_mail_default_to_admin.
Und dort gucken wir einfach.
Wenn der Wert leer ist.
Dann nehmen wir die Admin E-Mail.
Und sonst nehmen wir halt den Wert.
Nächstes Beispiel.
Wenn wir die Anzahl der Änderungen.
In der E-Mail anzeigen wollen.
Zum Beispiel noch unten drunter.
Oder so.
Dann.
Gucken wir mal.
Hier ist unsere Message.
Für Message haben wir aber leider.
Keinen Hook.
Wir haben nur unten dann wp_mail.
Jetzt gibt es hier vor.
Aber noch die do_action.
Beziehungsweise.
Ja.
Wenn wir jetzt in wp_mail.
Könnten wir.
Die Message anpassen.
wp_mail ist aber ja nicht nuran dieser Stelle.
Sondern auch an vielen anderen Stellen.
Überall anders im Code.
Deswegen wollen wir vielleicht dafürsorgen.
Dass das auch wirklich nur passiert.
Wenn wir hier an dieser Stelle sind.
Und wir haben hier ja gar nicht dieInformationen.
Die wir brauchen.
Da fasse ich dann jetzt im Prinzip diebeiden Punkte von eben zusammen.
Dass wir Hooks einschränken können.
Mit vorherigen.
Oder aber auch Informationen weitergebenkönnen.
Zum Beispiel.
Indem wir uns einmal reinhooken.
In diesen Custom Hook hier vor.
Mit unserer save_changes Funktion.
Dort gucken wir dann.
Speichern wir uns alle Changes ab.
Die hier drin stehen.
Die wir ja hier nachher brauchen.
Aber hier nur haben.
Und sagen dann.
Auch nur in dem Falle.
Wenn dieser Hook ausgeführt wurde.
Hooken wir uns in wp_mail rein.
Um die Mail anzupassen.
Dann.
Rufen wir halt.
Also das ist dann der Hook.
Den wir hier in wp_mail aufrufen.
Dort machen wir als aller erstes.
Entfernen wir den Filter wieder.
Weil.
Wenn E-Mails später noch versendet werden.
Unabhängig von dieser Funktion.
Wollen wir natürlich.
Dass die auch nicht beeinflusst werden.
Sondern wirklich nur.
Diese eine Mail.
Diesen einen Aufruf von wp_mail.
Und dann ganz simpel.
Holen wir uns die Changes.
Holen uns den Count davon.
Schreiben ihn noch ran.
Resetten dann zum Beispiel unsere lokaleVariable.
Und.
Geben den Wert wieder zurück.
Das Fazit.
Hooks ermöglichen.
Sehr saubere und flexible Anpassungen.
Und zwar.
Ohne das man.
Direkt im Code Dinge ändern muss.
Was für die.
Update Fähigkeit.
Und Wartbarkeit der Systeme.
Erheblich besser ist.
Weil wir haben schon diverse Male dasProblem gehabt.
Dass ein Kunde.
Diverse Anpassungen.
Im Plugin oder dem Theme selber.
Durchgeführt hat.
Oder durchführen hat lassen.
Und wir das Ganze dann erstmal aufräumenmussten.
Weil wir das Update.
Einspielen mussten.
Weil zum Beispiel nicht PHP fähig.
Oder sicherheitsmäßig.
Gefährlich.
Dafür gibts halt dann auch verschiedeneWege.
Wenn man den richtigen Hook finden will.
Und manche Hooks sind dabei.
Leichter zu entdecken.
Manche etwas versteckter.
Oder halt auch nur über ein paar Umwegeverfügbar.
Und.
Achso.
Den Punkt hab ich ja nochmal hier.
Dass es wartungsfreundlicher ist.
So.
Ich bin jetzt.
Ziemlich zügig durchgekommen.
Weil.
Vielen Dank fürs zuhören.
Gibt es denn noch Fragen?
Ja zeitlich.
Würde es passen.
Ja erstmal danke für den Vortrag.
Da waren ein paar sehr hilfreiche Tippsdabei.
Was würdest du denn empfehlen.
Wenn keiner dieser Strategienfunktioniert.
Also du hast ein Plugin.
Das verwendet keine Funktionen.
Die Filter haben.
Wo du dich reinhooken kannst.
Also sowas wie get_option.
Was würdest du dann machen.
Um eine Lösung herbeizuführen.
Also häufig gibt es.
Irgendwo dann doch noch die Möglichkeit.
Mit irgendeiner get_option oder ähnlichem.
Aber wenn es dann wirklich.
Absolut gar keine Möglichkeit gibt.
Und man.
Egal wo.
Keine Möglichkeit findet.
Dann würde ich als erstes mal gucken.
Ob man vielleicht.
Ist es ein Template ist.
Was man dann im Child-Theme oder soüberschreiben kann.
Oder wenn das nicht geht.
Irgendeine Klasse oder so.
Die man überschreiben kann.
Und wenn das alles wirklich nicht geht.
Dann bleibt einem wahrscheinlich nichtsanderes übrig.
Außer es wirklich direkt im Codedurchzuführen.
Aber dann.
Hat man im Prinzip auch alle Varianten.
Durchgegangen die man irgendwie sonsthätte.
Als Alternative.
Die besser wären.
Und dann bleibt einem gegebenenfalls aucheinfach nichts übrig.
Hast du mal versucht.
So was die Plugin Autoren anzuschreiben.
Und zu fragen.
Ob es ein Filter anbieten.
Und wie erfolgreich war das in deinenErfahrungen.
Es kann funktionieren.
Kann auch nicht funktionieren.
Ich habe zum Beispiel auch ein gutesBeispiel.
Bei Enfold gab es in dem.
Zumindest in dem Zeitpunkt.
Wo das Problem aufgetreten ist.
Wollte ich den Text.
Auf der Suchergebnisseite anpassen.
Weil der Kunde da einen anderen Text habenwollte.
Da gab es nur die Möglichkeit.
Das Template wirklich komplett zuüberschreiben.
Weil es wurde einfach kein Hook eingebaut.
Und.
Wenn man da teilweise dem.
Support schreibt.
Wenn man ihn überhaupt irgendwie.
In die Finger kriegt.
Das kann funktionieren.
Aber es kann auch.
Es kann auch einfach komplett ignoriertwerden.
Weil man sagt ja es funktioniert ja.
Aber deswegen.
Wichtig für alle die irgendwas entwickeln.
Wenn es sinnvolle Stellen für Hooks.
Und Filter gibt.
Nutzt es bitte.
Und bitte nicht.
Anonyme Funktionen.
Oder Objekte die irgendwo einmal.
Erzeugt werden aber nirgendwo gespeichertwerden.
Weil das.
Die Sachen da auch wieder rauszukriegen.
Das ist nicht spaßig.
Also am besten benannte Funktionen.
Oder statische Klassen.
Mit Methoden oder.
Singleton Objekte oder ähnliches.
Was machst du.
Wenn da viele Hooks aktiv sind.
Also du hast dich da reingearbeitet.
Kriegst du eine Übersicht.
Welche Hooks aktiv sind.
Kannst du das raushinten.
Oder musst du das alles manuell sichten.
Wie verstehst du aktiv.
Du hast jetzt ein Plugin.
Und du sollst es weiter bearbeiten.
Und dann macht es Dinge.
Und du sagst nicht.
Da ist vielleicht irgendwo ein Hook aktiv.
Du musst das ja erstmal rausfinden.
Was der andere da schon gebaut hat.
Na klar.
Also du meinst im Prinzip.
Wenn eine andere Komponente sich auchschon dort reingehookt hat.
Und auch schon etwas gemacht hat.
Man kann grundsätzlich.
Über die.
Also man kann ja auch.
Andere Actions und Filter entfernen.
Wenn man jetzt zum Beispiel weiß.
Dieses Plugin macht dort etwas.
Das möchte ich aber rückgängig machen.
Dann gibt es remove_filter undremove_action.
Das sind im Prinzip.
Denen übergibt man im Prinzip das.
Was man auch add_action oder add_filterübergibt.
Und die entfernen das dann wieder.
Und es gibt so Funktionen wieremove_all_actions.
remove_all_filters und so.
Um auch alles zu entfernen.
Und ansonsten.
Wenn man jetzt nicht spezifisch weiß.
Dass da etwas existiert.
Sondern vielleicht eher gucken will.
Das wird ja alles in Objekten.
Beziehungsweise.
Es müsste ein Objekt sein.
In dem das vom WordPress Core gespeichertwird.
Welche Hooks alle.
Wo schon reingehooked wurden und so.
Und im Notfall kann man halt da.
Gucken ob man das irgendwie da rausfindet.
Was da ansonsten noch so drin hängt.
Oder halt Query Monitor.
Wenn man auf der Seite schon drauf ist.
Wo man sich dann alle anzeigen kann.
Die bei diesem Aufruf halt.
Durchgeführt wurden.
Ja hallo vielen Dank für deinen.
Hilfreichen Vortrag.
Du hattest gerade das Beispiel.
Mit dem Enfold Theme angegeben.
Dass du da nicht mit einem Template.
Weitergekommen bist.
Ich stellte mir sofort die Frage.
Konntest du nicht den Weg über ein ChildTheme gehen.
Und da das Template reinkopieren.
Und nach deinen Wünschen anpassen.
Das wäre jetzt so ganz.
Mein Gedanke gewesen.
Also es gab halt keinen Hook.
Um es anzupassen.
Deswegen musste ich es leiderüberschreiben.
So dann habe ich es vielleicht ebenfalsch.
Also es gab halt keinen Hook.
Mit dem man diesen Text.
Einfach hätte modifizieren können.
Sondern es blieb nur der Weg im Prinzipdas Template.
Ins Child Theme zu übernehmen.
Und manuell anzupassen.
Und was natürlich aus.
Also es ist besser als es direkt imPlugin.
Oder im Theme zu machen.
Aber wenn jetzt Endfold.
In der neuen Version.
Ein neues Suchtemplate hinzufügt.
Kriegt man diese Änderung halt nicht mit.
Bei einem überschriebenen Template.
Und das führt auch regelmäßig.
Wenn man Systeme updatet zu Problemen.
Wenn dann eine Komponente.
Irgendwas anderes.
Erweitert hat durch Templates.
Und das Original Template sich geänderthat.
Deswegen wenn es geht Hooks.
Aber wenn es halt sowas nur gibt.
Dann muss man halt vielleicht.
Dann doch das Template überschreiben.
Um den Wert anpassen zu können.
Danke erstmal für den Vortrag.
Könntest du vielleicht noch ein bisschenmehr zu.
remove_filter, remove_action erzählen.
Ich weiß noch dass das.
Immer.
Problematisch ist.
Quasi wann genau ist.
Der Filter eigentlich definiert.
Wann kann ich ihn überhaupt.
Und da sind ja auch die Prioritäten immerspannend.
Da kann man zum Beispiel.
Zu sagen nehmen wir jetzt mal.
Wir gehen mal auf irgendein.
Beispiel.
Welches haben wir mal gerade hier.
Wir nehmen mal.
Die ganzen Steps.
Erst mal zurück gehen.
Nehmen wir die Option.
Nehmen wir mal an.
In der Option.
Die wird geändert.
Nehmen wir mal an.
Das ist das was irgendwo schon drinsteht.
Und man möchte das.
Wenn wir jetzt hier gucken.
Hier ist keine Priorität hinterlegt.
Das heißt es ist Priorität 10.
Jetzt könnte man.
Also in der Regel wird dieser Hook.
Ja dann irgendwo im Plugin.
Oder so definiert.
Und das kann ja sowohl.
Direkt in der functions.php seinoder so.
Oder auch wieder in einem anderen Hook.
So meinst du denke ich oder.
Also das ist gegebenenfalls auch erstspäter.
Diese Funktion ausgeführt wird.
Vom Plugin.
Wenn das der Fall ist.
Man kann sich natürlich hier reinhooken.
Etwas früher.
Also zum Beispiel nicht bei 10.
Sondern bei 9.
Und dann dort das remove_filter machen.
Dann hat man eine höhereWahrscheinlichkeit.
Dass dieser Filter schon hinzugefügtwurde.
Damit man ihn dann wieder entfernen kann.
Und wenn man sich.
Also zum Beispiel kurz davor reinhookt.
Eine Priorität weniger.
Zum Beispiel.
Dann ist es sehr unwahrscheinlich.
Dass der Hook in dem Moment.
Noch nicht hinzugefügt wurde.
Weil er meistens schon irgendwo vorherhinzugefügt wurde.
Und dann kann man den halt meistens sauberentfernen.
Und dasselbe gilt auch.
Wenn man ihn nachher zum Beispiel wiederhinzufügen will.
Und den vielleicht nur für seinen eigenenHook.
Irgendwie weg haben möchte.
Dann kann man den natürlich auch.
Mit prio plus wieder 1.
Wieder hinzufügen.
Es gibt auch noch für die prio.
PHP_INT_MIN und PHP_INT_MAX.
Als Konstanten.
Um die kleinstmögliche Integerzahl.
In PHP zu nehmen.
Oder die maximale.
Um zum Beispiel zu sagen.
Das habe ich glaube ich auch.
Irgendwo hier verwendet.
Wenn ich jetzt wüsste wo.
Ja hier.
PHP_INT_MAX.
Das heißt.
Ich möchte zum Beispiel abwarten.
Bis alle anderen Hooks.
Schon diesen Wert hier verändert haben.
Diese Changes.
Bevor ich dann gucke ob die empty sind.
Weil vielleicht fügt was anderes noch washinzu.
Und dann sind die gar nicht mehr empty.
Und dann werden zwei Mails verschickt.
Einmal für empty.
Und einmal für nicht empty.
Für sowas kann man dann zum BeispielPHP_INT_MAX.
Oder PHP_INT_MIN auch verwenden.
Ja.
Wenn ich jetzt zum Beispiel nur Changesbrauche.
Kann ich es weglassen.
Weil eins ist der Default Wert.
Wenn ich Changes und Post ID nur brauche.
Kann ich zwei reinschreiben.
Darf aber dann hier auch nur die beidendefinieren.
Weil wenn ich mehr definiere.
Gibt es einen Fatal Error.
Weil er versucht im Prinzip.
Wenn jetzt hier fünf steht.
Versucht er diese Funktion.
Mit den ersten fünf Parametern.
Die im apply_filter oder.
do_action drinstehen aufzurufen.
Und wenn das dann natürlich nicht.
Matcht.
Gibt es natürlich einen Fehler.
Man kann aber natürlich auch.
Werte mit Default Sachen hinterlegen.
Also man könnte jetzt.
Zum Beispiel.
Nehmen wir mal an.
Man würde.
Einen Callback für zwei Hooks verwenden.
Also zum Beispiel möchte man.
Ihn bei.
Jetzt sind wir wieder bei einem anderenBeispiel.
Beim.
Beispiel eben mit der Option.
Könnte man gibt es ja auch nicht nur.
Option unterstrich Option nehmen.
Sondern es gibt auch noch.
Option oder so als Hook auch noch.
Nehmen wir mal an.
Man möchte sich in beides reinhucken.
Bei dem einen soll nur vielleicht.
Der und der Wert noch mit übergebenwerden.
Den man aber jetzt bei dem anderen nichtbraucht.
Kann man auch ein.
Default Wert hier hinterlegen.
Und wenn dann halt nur zwei Parameterübergeben werden.
Weil man hier zwei hat.
Wird der dritte Wert dann halt.
Der Default Wert genommen.
Aber das ist ein ganz klassischer DefaultWert.
Von der Funktion.
Dann sind wir wohl fertig.