Frage

Ich habe in letzter Zeit die Plugin -API etwas ausführlicher angesehen und habe mich gefragt Welche wirklichen Unterschiede zwischen Aktion und Filterhaken bestehen. Beide sind Ereignisse, die Daten als Parameter erhalten, und sie scheinen beide die gleichen Dinge zu tun.

Offensichtlich sehe ich, dass Aktionen aufgerufen werden, wenn Aktionen stattfinden und Filter aufgerufen werden, wenn Daten manipuliert werden, aber es scheint nur ein semantischer Namensunterschied zu sein.

Abgesehen von der Semantik und wofür sie verwendet werden, welche wirklichen Unterschiede zwischen ihnen sind da?

War es hilfreich?

Lösung

Hi @Sruly:

Sie haben Ihre eigene Frage so ziemlich beantwortet, aber ich werde ein bisschen näher erläutern.

Actionhaken

Aktionen Haken sind für die Verwendung vorgesehen, wenn WordPress Core oder ein Plugin oder Thema Ihnen die Möglichkeit gibt, Ihren Code an einem bestimmten Punkt einzufügen und einen oder mehrere der folgenden Aussagen durchzuführen:

  1. Verwenden echo zu Injizieren Sie einige HTML oder andere Inhalte in den Antwortpuffer,
  2. Ändern Sie den globalen variablen Zustand für eine oder mehrere Variablen und/oder
  3. Ändern Sie die Parameter an Ihre Hakenfunktion übergeben (unter der Annahme, dass der Haken von aufgerufen wurde von do_action_ref_array() Anstatt von do_action() Da letzteres nicht unterstützt werden Variablen Untersuchung.)

Filterhaken

Filterhaken sich sehr ähnlich verhalten Actionhaken Ihre beabsichtigte Verwendung besteht jedoch darin, einen Wert zu erhalten und möglicherweise eine geänderte Version des Wertes zurückzugeben. Ein Filterhaken könnte auch wie ein Aktionshaken verwendet werden, dh eine globale Variable oder eine HTML -Generation, vorausgesetzt, das müssen Sie tun, wenn der Haken aufgerufen wird. Eine Sache, die an Filterhaken sehr wichtig ist, über die Sie sich mit Aktionshaken nicht Sorgen machen müssen, ist, dass die Person, die einen Filterhaken verwendet muss Rückgabe (eine modifizierte Version von) Der erste Parameter, den es übergeben wurde. Ein häufiger Neulingsfehler besteht darin, diesen Wert zurückzugeben!

Verwenden zusätzlicher Parameter, um einen Kontext in Filterhaken bereitzustellen

Nebenbei Ich hatte das Gefühl, dass Filterhaken in früheren Versionen von WordPress humpelt, weil sie nur einen Parameter erhalten würden. dh sie würden einen Wert erhalten, um zu ändern, aber keine 2. oder dritte Parameter, um einen Kontext bereitzustellen. In letzter Zeit und positiv hat das WordPress -Kernteam (für mich) jedoch die Filterhaken freudig hinzugefügt, damit Sie mehr Kontext entdecken können. Ein gutes Beispiel ist das posts_where Haken; Ich glaube, ein paar Versionen haben zurückgelegt, dass nur ein Parameter die aktuelle Abfrage ist "wo" Klasse SQL, aber jetzt akzeptiert es sowohl die Where -Klausel und ein Verweis auf die aktuelle Instanz der WP_Query Klasse, der sich auf den Haken ruft.

Was ist der wahre Unterschied?

In der Realität sind Filterhaken so ziemlich ein Supersatz von Action -Hooks. Ersteres kann alles tun, letzteres kann und ein bisschen mehr, wenn auch der Entwickler nicht die Verantwortung hat, einen Wert mit dem Aktionshaken zurückzugeben, den er oder sie mit dem Filterhaken macht.

Anleitung und Telegraphing -Absicht geben

Aber das ist wahrscheinlich nicht wichtig. Ich denke, was wichtig ist, ist, dass ein Entwickler, der sich für einen Aktionshaken gegenüber einem Filterhaken entscheidet, oder umgekehrt, sie sind es ihre Absicht telegraphieren und somit Anleitung geben an den Themer- oder Plugin -Entwickler, der möglicherweise den Haken benutzt. Im Wesentlichen sagen sie entweder "Ich werde dich anrufen, tun, was du tun musst." ODER "Ich werde Ihnen diesen Wert übergeben, um zu ändern, aber stellen Sie sicher, dass Sie ihn zurückgeben."

Also letztendlich Ich denke, die Anleitung, die durch die Wahl des Hakentyps bereitgestellt wird. Imo, sowieso.

Hoffe das hilft!

Andere Tipps

Wenn Sie sich die Quelle für die ansehen add_action() Kernfunktion, es ist nur eine Wrapper für add_filter() Funktion...

Und wenn Sie sich das ansehen do_action() Kernfunktion ist es sehr ähnlich wie bei apply_filters() Kernfunktion mit einem sehr wichtigen Unterschied: Es gibt keinen Wert zurück.

Was bedeutet das? Aktionen sind wie Filter, außer dass eine Aktion keinen Wert zurückgibt, sodass Sie keine Daten ändern können. Es zeigt, dass es einfach war, den Aktionsmechanismus des WordPress 'zu erstellen, indem er einfach den Filtermechanismus kopierte und keinen Wert zurückgab. Grundsätzlich können Sie nur mit einer Aktion eine Funktion ausführen, ohne einen Wert zu ändern.

In einfachen Worten.

Aktionen sind diese PHP -Funktionen, die die Ausgabe ausführen.

Filter sind diese PHP -Funktionen, die die Ausgabe zurückgeben.

Aktualisiert: Wir können jedes Plugin erweitern, das die Aktionen und Filter verwendet, ohne dort Code zu ändern. Durch Hinzufügen von Filtern und Aktionen in unserem eigenen Thema oder Plugin.


Wie benutzt man?

Aktion:

Überprüfen Sie die folgenden einfachen Beispiele in Ihrem Thema functions.php Datei.

  1. Beispiel eins: (Einfaches PHP -Beispiel)
function test() {
     echo "Output";
}

test();

Oben Programm drucken Sie die Ausgabe:

Output

Hinweis: Hier test () einfach die Funktion aufrufen. Und führen Sie die Rückruffunktion 'Test' aus.


  1. Beispiel zwei: (Einfacher Einsatz von Aktion)
function test1() {
     echo "Output";
}
add_action( 'test', 'test1' );

do_action( 'test' );

Oben Programm drucken Sie die Ausgabe:

Output

Hinweis: Hier do_action('test') funktioniert wie Aufruffunktion. Und rufen Sie die Rückruffunktion 'Test1' aus.


  1. Beispiel drei: (Eine weitere Verwendung von Aktionen)
function test2() {
     echo "Test 2";
}
add_action( 'test', 'test2', 1 );

function test1() {
     echo "Test 1";
}
add_action( 'test', 'test1', 2 );

do_action( 'test' );

Oben Programm drucken Sie die Ausgabe:

Test 2Test 1

Hinweis: Hier do_action('test') funktioniert wie Aufruffunktion. Führen Sie Rückruffunktionen für die Prioritäten aus.

Die Rückruffunktion 'Test1' hat Priorität 2 und 'test2' hat Priorität 1.

Wenn Prioritäten wie "test1" mit Priorität 1 und "test2" mit Priorität 2 sind, ist die Ausgabe:

Test 1Test 2

  1. Beispiel vier: (Unterstützung der 3. Partei)Fügen Sie den folgenden Code in hinzu in functions.php
function test1() {
     do_action( 'test_before' );
     echo "Test 1";
     do_action( 'test_after' );
}
add_action( 'test', 'test1' );

do_action( 'test' );

Oben Programm drucken Sie die Ausgabe:

Test 1

Erstellen Sie nun ein Beispiel -Plugin, um zu überprüfen, wie es für den Entwickler von Drittanbietern funktioniert.

  1. Erstellen Sie den Ordner "einfach" in /wp-content/plugins/ Verzeichnis.
  2. Erstellen Sie die Datei namens 'Simple.php' und fügen Sie den folgenden Code hinzu.
/*
* Plugin Name: Simple Plugin
*/
function test_callback_function() {
     echo "From plugin";
}
add_action( 'test', 'test_callback_function' );

Aktivieren Sie jetzt unsere Einfaches Plugin vom WordPress Admin -Dashboard.

Goto -Menü -Plugin und aktivieren Sie es.

Nach dem Aktivieren von Plugin oben aktivieren Sie die Ausgabe: Drucken Sie die Ausgabe:

Test 1From plugin

Hinweis: Wenn wir die Priorität für unsere Plugin -Aktion von 1 bis 9 hinzufügen, druckt sie die Ausgabe wie:

From pluginTest 1

Weil WordPress die betrachten 10 priority by default Für alle zusätzlichen Aktionen.

Filter

Überprüfen Sie die folgenden Beispiele:

Einfacher PHP -Beispiel:

$data = array( 'one', 'two' );
print_r( $data );

Oben Programm drucken Sie die Ausgabe:

Array ( [0] => one [1] => two )
  1. Beispiel eins: (Einfache Verwendung des Filters)
$data = apply_filters( 'my_filter_name', array( 'one', 'two' ) );
print_r( $data );

add_filter( 'my_filter_name', function( $old_data ) {
     return array( 'three', 'four' );
});

Oben Programm drucken Sie die Ausgabe:

Array ( [0] => three [1] => four )

Hier haben wir Filter hinzugefügt my_filter_name und ändern Sie die vorhandene Ausgabe array( 'one', 'two' ) mit array( 'three', 'four' ) ohne die Themen-/Plugin -Dateien zu ändern.


Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top