wordpress filtert die Dokumentation? Versucht, add_filter () zu verstehen

8

Ich habe die Dokumentation mehrmals durchgelesen und es hat mir schwer gefallen, herauszufinden, was mit der Funktion passiert. Ich bin mehr und mehr verwirrt, nachdem ich mir die Dokumentation angesehen und auch den Quellcode angeschaut habe.

add_filter($tag, $hook, $priority, $args);

es scheint mir die neue Funktion erweitert die Elternfunktion. Was für ein Puzzle ich bin, ist, welche Teile des Hakens außer Kraft gesetzt werden. In einigen Beispielen in der Dokumentation sehe ich, dass einige Variablen durch die $ Argumente in Ihrem neuen $ -Tag ersetzt werden.

Ich habe fast alles hier verstanden: Ссылка

aber dann konnte ich nicht herausfinden, wie Sie Argumente übergeben und welche schließlich überschrieben werden.

Danke im Voraus.

    
chrisjlee 06.06.2010, 08:45
quelle

4 Antworten

12

add_filter() ist eine Begleitfunktion zu apply_filters() . Bevor apply_filters für einen bestimmten Filter ausgeführt wird (das Argument $tag in add_filter() ), können Sie mit add_filter einen Filter für ein Tag registrieren. Wenn apply_filters() mit diesem Tag-Namen ausgeführt wird, ruft es alle registrierten Filter der Reihe nach auf. Filter werden verwendet, um Daten über Funktionen zur Manipulation zu übergeben. Zum Beispiel, eine, die ich oft benutze ist der wp_list_pages Filter. Ich benutze es, um Zeilenumbrüche aus der Seitenliste zu entfernen. Also hier ist, wie es funktioniert:

Zuerst definiere ich eine Funktion, die einen Parameter akzeptiert und nach der Arbeit zurückgibt:

%Vor%

Dann füge ich den Filterhaken hinzu: add_filter ('wp_list_pages', 'my_list_pages_filter');

add_filter sagt WordPress "Wenn die Funktion apply_filters aufgerufen wird und das erste Argument 'wp_list_pages' ist, rufen Sie my_list_pages_filter auf." Filter müssen mindestens einen Wert (beliebigen Typs: Zeichenfolge, Array, Ganzzahl usw.) senden und erwarten, dass die Funktion einen Wert zurückgibt.

Sie bieten Ihnen eine Möglichkeit, die Eingabe vor dem Zurücksenden zu manipulieren.

do_action ist ein ganz anderer Haken. Um Informationen an Ihre Filterfunktion zu senden, machen Sie folgendes (aus Ihrem Beispiel):

%Vor%

Fügen Sie in Ihrer Datei functions.php Folgendes hinzu:

%Vor%

Das ist eine ziemlich rudimentäre Verwendung von Filtern, aber es ist ein Anfang. Sie können wirklich eine Idee davon bekommen, was Sie mit Filtern mit dem gleichen Beispiel mit einigen Verbesserungen tun können:

%Vor%     
John P Bloch 08.06.2010, 05:45
quelle
4

Chris, Du scheinst durch ein paar Dinge verwirrt zu sein:

  1. Filter und Aktionen sind nicht verwandt (sie sind beide ein Typ von WP, der 'hook' genannt wird, aber ansonsten nicht verwandt ist). Oben hast du gesagt "mit meinem Filter ..." aber do_action () ist für Aktionen nicht Filter.
  2. Das Tag (d. h. Tag-Parameter zu add_filter, apply_filter, add_action, do_action hat nichts mit Tags im XML / HTML-Sinn zu tun (- vielleicht weißt du das).
  3. Wenn Sie eine Aktion mit do_action () aufrufen, möchten Sie wahrscheinlich zusätzlich zum obligatorischen Tag-Namen ein Argument übergeben. Oben haben Sie do_action ('content_class') aufgerufen, was erstens keine Auswirkung hat, wenn Sie zum ersten Mal eine Aktion mit dem Tag-Namen "content_class" registriert haben, und zweitens in Ihrer Aktionsfunktion content_class_filter (die besser als content_class_action bezeichnet wird) hat nichts mit Filtern zu tun), hat einen optionalen Parameter $ classes, der immer '' ist, da Sie nach dem Tag-Namen kein Argument für do_action angegeben haben. Beachten Sie auch, dass Sie wahrscheinlich $ output = ..
  4. schreiben wollten
  5. Filter "überschreiben" nichts (besonders im Sinne der OO-Sprache). Wenn Sie mehrere Filter mit demselben Tag hinzufügen, werden alle aufgerufen, wenn die anwendungsspezifischen Filter für das Tag aufgerufen werden. Sie können die Reihenfolge mithilfe des Prioritätsparameters steuern. Dasselbe gilt für Aktionen.
DavidJ 23.03.2011 17:44
quelle
2

es ist ein sehr schöner Artikel, aber ich muss trotzdem einen dummen Fehler machen ....

Ich versuche einige Elemente im WP3 + Navigationsmenü unter "Bildschirmoptionen" über diese "add_filter" Technik zu entfernen:

wp-admin / enthält / nav-menus.php:

%Vor%

mytheme / function.php:

Es scheint, dass die ursprünglichen Funktionen nicht Teil einer CLASS sind:

%Vor%

Aber als Ergebnis kann ich die ursprünglichen "Bildschirmoptionen" mit allen Elementen sehen. Wenn ich die Zeilen entferne: 'css-classes' = & gt; _ ('CSS Klassen'), 'xfn' = & gt; _ ('Verknüpfungsbeziehung (XFN)'), 'Beschreibung' = & gt; __('Beschreibung'), direkt in WP-Kern, alles sieht OK aus, also bin ich mir nicht sicher, dass es möglich ist, alle WP-Funktionen auf diese Weise zu überschreiben.

Vielen Dank für Ihren Rat. Mit freundlichen Grüßen, Milo

    
Milo 07.02.2011 13:54
quelle
0

Ich habe hier einen Haken in der Vorlagendatei platziert:

%Vor%

Der Hook wird gerade selbst in der Funktionsdatei ausgeführt:

%Vor%

Mit meinem Filter versuche ich Klassen an diese Funktion zu übergeben.

%Vor%

Dann bin ich wirklich verwirrt darüber, wie man den Filter schreibt ...

    
chrisjlee 06.06.2010 17:22
quelle