Wie funktionieren Filter und Hooks wirklich in PHP?
21
Wie funktionieren Filter und Hooks in WordPress?
Ich frage nach etwas Fortgeschrittenem. Wie ist es in PHP implementiert? ZB wie sammelt es alle Haken von den verschiedenen Plugins und "hängt" sie an die Kernhaken usw.
Soweit ich weiß, gibt es in PHP keine 'Hooks' oder 'Filter', sondern Funktionen. Wordpress verfügt über spezielle Funktionen, die vor ihrer Ausführung einen Rückruf anderer Funktionen verwenden.
Ofir Baruch
Siehe auch
3
@OfirBaruch, ich bin mir ziemlich sicher, dass sich das OP auf ihre Implementierung in WordPress bezog und nicht darauf hinwies, dass es eine native PHP-Implementierung davon gab.
Tom Auger
Antworten:
33
Überblick
Grundsätzlich besteht die " Plugin API ", die Filter und Hooks aufruft, aus folgenden Funktionen:
Insgesamt gibt es ein paar Globals (was sonst noch in WordPress Welt) beteiligt:
global $wp_filter, $wp_actions, $wp_current_filter, $merged_filters;
Das erste $wp_filterist ein Global Array, das alle Filternamen als Subarrays enthält. Jedes dieser Subarrays enthält dann noch mehr Subarrays, die Rückrufe sind, die unter einem Prioritätsarray aufgerufen wurden.
Kurze eingehende
Wenn eine Ausführungsfunktion aufgerufen wird, durchsucht WordPress diese globalen Arrays nach den Schlüsseln mit diesem Namen. Dann werden die angehängten Callbacks Priorität für Priorität ausgeführt. Das einzige, was im Vorfeld passiert, sind Rückrufe, die an den allFilter angehängt sind .
Wenn Sie einen Rückruf mit add_actionoder hinzufügen add_filter, berechnet WordPress zunächst eine "eindeutige" ID, um bereits angehängte Rückrufe nicht zu überschreiben.
Wie Sie sehen, ist das Haupt-Sub-Array der $tag(oder der Aktions- / Filtername), dann wird alles unter einer bestimmten Priorität aufgerufen, und dann wird die "eindeutige" Rückruf- / ID-Zeichenfolge als Schlüssel verwendet.
Später, wenn ein Filter aufgerufen wird - was mit dem $tag/ action- / filter-Namen geschieht - wird das Array durchsucht und die Rückrufe werden aufgerufen. Da es verwendet wird, spielt call_user_func_arrayes keine Rolle, wie viele Argumente angehängt sind. WordPress löst das von selbst.
Vergessen Sie nicht, dass beim Durchlaufen der Rückrufe die Ausführung mehrerer Rückrufe am selben Hook anhand ihrer "Priorität" angeordnet wird, die (optional) mit add_action () und apply_filters () festgelegt und standardmäßig auf 10 gesetzt wird.
Tom Auger
1
@TomAuger Sie können der Antwort jederzeit weitere Notizen und Änderungen hinzufügen.
Kaiser
5
Hooks sind sowohl in den WordPress-Kerndateien als auch in einigen übergeordneten Themendateien enthalten. Mit ihnen können Sie Inhalte an einer bestimmten Stelle in der Datei einbinden.
Ein Beispiel ist der wp_head-Hook in WordPress. Sie können diesen Haken in Ihrem untergeordneten Design verwenden, um Inhalte an diesem Speicherort hinzuzufügen. '
Einige Premium-Themen enthalten auch Aktions-Hooks, mit denen Sie in einem untergeordneten Thema dasselbe tun können. Hier ist eine visuelle Karte, die alle Aktions-Hooks und die Position enthält, an der sie Ihre Inhalte im Genesis-Themen-Framework ausgeben.
Mit Filtern können Sie die Ausgabe einer vorhandenen Funktion ändern. Sie sind sowohl in den WordPress-Kerndateien als auch in einigen übergeordneten Themen-Frameworks wie Genesis enthalten.
Hier ist eine Liste der Filter, die Sie mit dem Genesis Design Framework verwenden können
Der obige Code kann in einem untergeordneten Design verwendet werden, um den vom Autor angegebenen Text in Ihren Kommentaren zu ändern. Es funktioniert in jedem Thema.
Hier ist ein weiteres Beispiel, das die Länge der Auszüge auf 50 Wörter anpasst:
function the_excerpt(){
echo apply_filters('the_excerpt', get_the_excerpt());}
Sie können auch Hooks und Filter in Plugins verwenden, um genau dasselbe zu tun, und der Code geht nicht verloren, wenn Sie das übergeordnete Thema oder WordPress aktualisieren.
Grundsätzlich können Sie mit Hooks und Filtern sowohl WordPress als auch Ihr übergeordnetes Thema anpassen und ändern, ohne die WordPress-Kerndateien oder Ihre übergeordneten Themendateien zu bearbeiten.
Das Anpassen eines untergeordneten Designs ist erheblich einfacher, wenn das übergeordnete Design-Framework Hooks und Filter enthält, da Sie die Vorlagendateien für übergeordnete Designs nie bearbeiten müssen. Auf diese Weise können Sie auch Themen sicher ändern.
Dies ist ein großartiger allgemeiner Überblick über Hooks und Filter, aber ich fürchte, ich verpasse die Frage des OP, die sich mit den Interna befasst, wie Hooks funktionieren und wie WordPress sie erstellt, speichert und verarbeitet. Gute Antwort; Sie sollten wahrscheinlich auf Ihr Tutorial auf WP Sites verlinken.
Tom Auger
Ok, ich werde es löschen. Ich hätte die Frage besser lesen sollen, dachte aber, die bereits gegebenen Antworten wären für Anfänger leichter zu verstehen, wenn sie die Grundlagen zuerst kennen würden.
Brad Dalton
2
Brad, ich habe es wiederhergestellt, da ich denke, dass es nützlich sein könnte, diese Informationen auch hier zu haben. Wenn Sie nicht einverstanden sind, erwähnen Sie mich einfach hier und ich werde es wieder entfernen.
Antworten:
Überblick
Grundsätzlich besteht die " Plugin API ", die Filter und Hooks aufruft, aus folgenden Funktionen:
apply_filters()
- ausführendo_action
- ausführenapply_filters_ref_array()
- ausführendo_action_ref_array()
- ausführenadd_filter()
- Zum Stapel hinzufügenadd_action()
- Zum Stapel hinzufügenGrundlegende Interna
Insgesamt gibt es ein paar Globals (was sonst noch in WordPress Welt) beteiligt:
Das erste
$wp_filter
ist ein GlobalArray
, das alle Filternamen als Subarrays enthält. Jedes dieser Subarrays enthält dann noch mehr Subarrays, die Rückrufe sind, die unter einem Prioritätsarray aufgerufen wurden.Kurze eingehende
Wenn eine Ausführungsfunktion aufgerufen wird, durchsucht WordPress diese globalen Arrays nach den Schlüsseln mit diesem Namen. Dann werden die angehängten Callbacks Priorität für Priorität ausgeführt. Das einzige, was im Vorfeld passiert, sind Rückrufe, die an den
all
Filter angehängt sind .Wenn Sie einen Rückruf mit
add_action
oder hinzufügenadd_filter
, berechnet WordPress zunächst eine "eindeutige" ID, um bereits angehängte Rückrufe nicht zu überschreiben.Dann wird Ihr Rückruf zum
global $wp_filter
Stapel hinzugefügt:Wie Sie sehen, ist das Haupt-Sub-Array der
$tag
(oder der Aktions- / Filtername), dann wird alles unter einer bestimmten Priorität aufgerufen, und dann wird die "eindeutige" Rückruf- / ID-Zeichenfolge als Schlüssel verwendet.Später, wenn ein Filter aufgerufen wird - was mit dem
$tag
/ action- / filter-Namen geschieht - wird das Array durchsucht und die Rückrufe werden aufgerufen. Da es verwendet wird, spieltcall_user_func_array
es keine Rolle, wie viele Argumente angehängt sind. WordPress löst das von selbst.quelle
Hooks sind sowohl in den WordPress-Kerndateien als auch in einigen übergeordneten Themendateien enthalten. Mit ihnen können Sie Inhalte an einer bestimmten Stelle in der Datei einbinden.
Ein Beispiel ist der wp_head-Hook in WordPress. Sie können diesen Haken in Ihrem untergeordneten Design verwenden, um Inhalte an diesem Speicherort hinzuzufügen. '
Beispiel:
Einige Premium-Themen enthalten auch Aktions-Hooks, mit denen Sie in einem untergeordneten Thema dasselbe tun können. Hier ist eine visuelle Karte, die alle Aktions-Hooks und die Position enthält, an der sie Ihre Inhalte im Genesis-Themen-Framework ausgeben.
Beispiel:
So sieht der Hook aus, wenn Sie die Datei header.php im Genesis-Theme-Framework geöffnet haben:
Hier ist eine Liste von WordPress-Hooks, die Sie auf viele Arten verwenden können.
Mit Filtern können Sie die Ausgabe einer vorhandenen Funktion ändern. Sie sind sowohl in den WordPress-Kerndateien als auch in einigen übergeordneten Themen-Frameworks wie Genesis enthalten.
Hier ist eine Liste der Filter, die Sie mit dem Genesis Design Framework verwenden können
Hier ist eine Liste der in WordPress enthaltenen Filter
Hier ist ein Beispiel, wie Sie einen Filter in einem Themenframework wie Genesis verwenden können:
Der obige Code kann in einem untergeordneten Design verwendet werden, um den vom Autor angegebenen Text in Ihren Kommentaren zu ändern. Es funktioniert in jedem Thema.
Hier ist ein weiteres Beispiel, das die Länge der Auszüge auf 50 Wörter anpasst:
Sie finden die Funktion the_excerpt () in der Datei wp-includes / post-template.php.
So sieht es aus:
Sie können auch Hooks und Filter in Plugins verwenden, um genau dasselbe zu tun, und der Code geht nicht verloren, wenn Sie das übergeordnete Thema oder WordPress aktualisieren.
Grundsätzlich können Sie mit Hooks und Filtern sowohl WordPress als auch Ihr übergeordnetes Thema anpassen und ändern, ohne die WordPress-Kerndateien oder Ihre übergeordneten Themendateien zu bearbeiten.
Das Anpassen eines untergeordneten Designs ist erheblich einfacher, wenn das übergeordnete Design-Framework Hooks und Filter enthält, da Sie die Vorlagendateien für übergeordnete Designs nie bearbeiten müssen. Auf diese Weise können Sie auch Themen sicher ändern.
quelle