Erläuterung zur Funktion apply_filters und ihren Variablen

16

Ich lerne, wie man HTML-Formulare mit PHP erstellt, indem ich ein Beispiel aus dem Plugin "simplr form registration" nehme.

Ich sehe mir diesen Code an:

$form .= apply_filters('simplr-reg-instructions', __('Please fill out this form to sign up for this site', 'simplr-reg'));

Kannst du bitte erklären, was hier passiert - was die Funktion macht, warum 'simplr-reg-Anweisungen' und 'simplr-reg' erforderlich sind?

Warum kann diese Zeile nicht einfach sein:

$form .= 'Please fill out this form to sign up for this site' ;

Ich habe die Funktionsreferenz gelesen, kann sie aber immer noch nicht herausfinden.

Asche
quelle

Antworten:

22

Diese Zeile verwendet zwei verschiedene Funktionen, für die zwei separate Erklärungen erforderlich sind.

__ ()

Dies ist eine Übersetzungsfunktion. Wenn die Einstellungen richtig vorgenommen werden, wird der erste Parameter aus einer Liste vorübersetzter Zeichenfolgen übersetzt. Wenn eine Installation eine Datei mit einer kompilierten Übersetzung für diese Funktion enthält, wird diese verwendet. Natürlich muss das Plugin seine eigene Übersetzung packen, daher der zweite Parameter. simplr-regteilt mit, __()dass die Übersetzung des Strings 'Please fill out this form to sign up for this site'in der dazugehörigen Übersetzungsdatei erfolgen soll 'simplr-reg'(dies erfolgt im Plugin früher über die load_plugin_textdomain()Funktion).

Die Funktion gibt dann die Übersetzung zurück. Wenn es keine Übersetzung gibt, die zurückgegeben werden kann (z. B. hat die aktuelle Sprache keine kompilierte Übersetzung, der String hat keine kompilierte Übersetzung für dieses Paket usw.), wird die ursprüngliche Eingabe zurückgegeben.

Also für eine WordPress-Site in Englisch, __( 'This', 'simplr-reg' )ist funktional das gleiche wie 'This'. Weitere Informationen zu l10n (Lokalisierung) finden Sie im Codex:

http://codex.wordpress.org/I18n_for_WordPress_Developers

apply_filters ()

Mit dieser Funktion können Sie die vom Plugin verwendeten Werte nach Bedarf filtern. Dies ist eines der Hauptkonzepte, die man als Plugin-Entwickler versteht. WordPress wird durch Hooks erweitert, die im Grunde genommen Zugangspunkte sind, mit denen Sie die Ausführung der Aktionen Ihres Plugins zeitlich festlegen und / oder Informationen / Daten bearbeiten können, die WordPress verwendet.

Um Daten wie den Code-Ausschnitt, nach dem Sie gefragt haben, zu manipulieren, würden Sie die Funktion verwenden add_filter(). Hier ist ein einfaches Beispiel, wie das funktioniert:

add_filter( 'simplr-reg-instructions', 'wpse16573_my_filter' );

Sie werden dort wahrscheinlich das erste Argument erkennen. Es ist das gleiche wie add_filteroben. Dies ist der Hook-Name. Das zweite Argument ist der Filter-Callback. Es muss sich um einen gültigen Rückruf für eine Funktion handeln ( weitere Informationen zu Rückrufen finden Sie hier ). In dieser Codezeile steht: "Wenn der 'simplr-reg-instructions'Hook ausgeführt wird, führen Sie die Funktion mit dem von mir angegebenen Rückruf aus." apply_filters()führt den im ersten Argument gefundenen Hook aus und bedeutet im Wesentlichen "alle für diesen Hook registrierten Funktionen ausführen". apply_filtersÜbergibt dann alle anderen Argumente (in diesem Fall 'Please fill out this form to sign up for this site') an die Funktionen dieses Filters. Der oben verwendete Rückruf sollte also so aussehen:

function wpse16573_my_filter( $text ){
  $text = "<strong>$text</strong>";
  return $text;
}

Es gibt zwei Arten von Hooks in WordPress: Filter (die Art, die wir hier verwenden) und Aktionen. Der Hauptunterschied zwischen den beiden besteht darin, dass Filter erwarten, dass Sie etwas zurückgeben, und dass Aktionen dies nicht tun. Für diesen Filter fügt mein obiges Beispiel HTML hinzu 'Please fill out this form to sign up for this site'und gibt es zurück.

Lesen Sie hier mehr über Aktionen und Hooks:

http://codex.wordpress.org/Plugin_API

John P Bloch
quelle
John, vielen Dank. Gute Antwort! Aber ich kann nicht einmal eine Zeile "add_filter ('simplr-reg-instructions', ..." in den Plugin-Dateien finden. Wie kann der apply_filter dann ausgeführt werden?
Ash
1
Wenn einem Hook keine Filter hinzugefügt wurden, wird nur die ursprüngliche Eingabe direkt zurückgegeben. Der Filter ist nicht für das Plugin verfügbar, sondern für Sie, damit Sie das Plugin selbst nicht ändern müssen.
John P Bloch
+1 Hervorragende Erklärung - Liest wie die Dokumente sollten ;-)
Eddie B
+1 Tolle Antwort, genau das, wonach ich gesucht habe, ich war sehr verwirrt, aber jetzt ist alles so klar;)
Doz87
5

Sie haben hier apply_filtersund zwei verschiedene Funktionen__()

Mit der Funktion apply_filters können Sie in WordPress den Wert von Variablen mithilfe Ihrer eigenen Rückruffunktionen und der add_filterFunktion ändern / bearbeiten . Es akzeptiert viele Argumente, aber die wichtigsten sind die ersten beiden:

$something = apply_filters( $tag, $value, $var ... );

$ tag ist der Name des Filter-Hooks, der add_filterzB verwendet wird in :

add_filter($tag,callback_function);

$ value ist der tatsächliche Wert, den Sie ändern oder bearbeiten können.

$ var ist eine oder mehrere Variablen, die Ihre Rückruffunktion verwenden kann.

__() Funktion wird für Übersetzungen verwendet:

__($message,$text_domain);

$ message ist die zu übersetzende Nachricht.

$ text_domain ist das Text-Domain-Tag, mit dem das Plugin oder die Theme-Übersetzung geladen wird load_plugin_textdomain()

Was es macht?

Es durchsucht das Lokalisierungsmodul nach der Übersetzung von $ message und übergibt die Übersetzung an die PHP-return-Anweisung. Wenn für $ message keine Übersetzung gefunden wird, wird nur $ message zurückgegeben.

Damit die beiden Funktionen in Ihrem Fall auf die gleiche Weise funktionieren, senden die apply_filters allen Rückruffunktionen, die mit dem simplr-reg-instructionsFilter-Hook verknüpft sind, den übersetzten Wert (falls vorhanden) von "Bitte füllen Sie dieses Formular aus, um sich für diese Site anzumelden". Domain vonsimplr-reg

Bainternet
quelle
Bainternet, vielen Dank! Wie kommt es, dass ich keine "add_filter" -Zeilen in den Plugin-Dateien finde?
Ash
Ein Haken für Entwickler, die die Plugins-Funktionalität erweitern oder filtern möchten.
Bainternet
Also wird hier kein add_filter erwartet? Ich verstehe nicht warum. Sollte apply_filters nicht alle Funktionen ausführen, die die add_filter-Funktionen mit seinem Hook verknüpfen?
Asche
apply_filtersist ein Platzhalter, mit dem Sie Ihre eigenen Funktionen add_filtereinbinden können. Es wird also kein add_filter erwartet, es sei denn, Sie fügen eigene hinzu
Bainternet