WordPress
Aktionen und Filter
Suche…
Syntax
- add_action (tag, function_to_call, priorität, num_of_args);
- add_filter (Tag, function_to_call, priorität, num_of_args);
Parameter
Parameter | Erläuterung |
---|---|
$ tag | (Zeichenfolge) (Erforderlich) Der Name der Aktion, an die die $ -Funktion angehängt ist. |
$ Funktion | (aufrufbar) (Erforderlich) Erfordert eine Zeichenfolge, die den Funktionsnamen oder die anonyme Funktion enthält. Siehe Beispiele zum Hinzufügen von Funktionen innerhalb von Klassen. |
$ Priorität | (int) default = 10. Funktionen, die an Hooks / Filter angehängt sind, werden in der zugewiesenen Priorität ausgeführt. Es kann vorkommen, dass Sie vor allen anderen Aktionen mit Code arbeiten möchten, Priority = 1 oder nach allen anderen angefügten Funktionen Priority = 100 usw. festlegen. Wie bei allen PHP-Funktionen können Sie die Funktion verwenden, ohne einen Wert für eine Variable zu übergeben wo ein Standardwert festgelegt wurde, aber wenn Sie die Anzahl der zurückgegebenen Parameter ändern möchten, müssen Sie angeben! |
$ parameter | (int) default = 1. Die Anzahl der an Ihre angehängte Funktion zurückgegebenen Parameter. Die zurückgegebenen Parameter hängen von der Nummer ab, an der der Hook erstellt wurde. Weitere apply_filters() Sie unter apply_filters() und do_action() . |
Bemerkungen
Wordpress-Haken
Etwas, das Entwickler oftmals verwirrt, wenn sie mit WordPress arbeiten, ist die Verwendung von apply_filters()
und add_action()
. Sie werden oft Plugins / Themes sehen, die diese im Code verwenden. Wenn Sie das Konzept nicht verstehen, werden Sie Schwierigkeiten haben, mit ihnen zu arbeiten.
In Kürze (sehr kurz, lesen Sie das WordPress-Lade-Flussdiagramm für den Prozess im Detail), lädt WordPress auf folgende Weise:
- wp-load.php - Funktionen etc
- mu-plugins - alle Dateien, die sich im Ordner mu-plugins befinden - werden häufig für zwischengespeicherte Objekte verwendet
- Plugins - keine besondere Reihenfolge, alle installierten und aktivierten Plugins werden geladen
- Aktives untergeordnetes Thema / übergeordnetes Thema
- init - Rest der Daten
- Vorlage
Wenn Sie ein Entwickler sind und mit einer Funktionsdatei arbeiten, können Sie sehen, dass beide zuvor geladen wurden als die Dateien, mit denen Sie arbeiten. Das heißt, Sie können keine Prozesse ändern (beachten Sie können keine Funktionen überschreiben) oder Variablen, die später ausgeführt werden oder noch nicht definiert wurden. Außerdem können Themenentwickler Hooks in ihren Code einfügen, damit Plugins eine Verbindung herstellen können, oder Plugins können zulassen, dass andere Plugins ihre Variablen überschreiben. Nun mag das bis jetzt verwirrend sein, aber dort bleiben.
Um add_filter()
und add_action()
zu verstehen, add_filter()
wir uns zuerst ansehen, wie die Hooks erstellt werden.
$arga= 'hello';
do_action('im_a_hook', $arga );
Wenn Sie in WordPress auf das Obige stoßen, werden alle an den Hook im_a_hook
angehängten Funktionen im_a_hook
(suchen Sie nach $wp_filter
um Informationen zum Prozess zu erhalten). In Ihrer angefügten Funktion steht $arga
für die angefügte Funktion zur Verfügung.
add_action('im_a_hook', 'attached_function');
function attached_function($arga){
echo $arga;
}
Dies eröffnet neue Möglichkeiten, um Variablen an bestimmten Punkten des Ladeprozesses zu ändern. Denken Sie daran, dass wir vorhin gesagt haben, dass Vorlagen nach Plugins / Themes geladen werden? Ein häufiges Plugin ist WooCommerce, das später im Prozess Bildschirme erstellt. Ich werde nicht dokumentieren, wie ein Beispiel für do_action
im Plugin zu finden ist.
do_action( 'woocommerce_after_add_to_cart_button' );
Hier haben wir einen Hook erstellt, der keine Variablen zurückgibt, aber wir können trotzdem Spaß daran haben:
add_action( 'woocommerce_after_add_to_cart_button', 'special_offer');
function special_offer(){
echo '<h1>Special Offer!</h1>;
}
Die obige add_action
wird echo
eine Überschrift Spezpredloschenija wo do_action('woocommerce_after_add_to_cart_button')
befindet , welche, wenn ein WooCommerce Bildschirm zu schaffen. Daher können wir diesen Hook zum Einfügen von HTML verwenden. Andere Anwendungen umfassen das Umleiten auf einen anderen Bildschirm insgesamt usw.
Es können auch mehrere Variablen an die Funktion übergeben werden. Versuchen Sie dies in Ihren Themenfunktionen. Beachten Sie den letzten Parameter, den wir auf 3 setzen, da wir mit den 3 verfügbaren Parametern arbeiten möchten. Wenn wir dies auf 2 ändern, wird nur 2 zurückgegeben und wir erhalten einen undefinierten Fehler.
add_action('custom_hook', 'attached_function', 10, 3);
function attached_function($a,$b,$c){
var_dump($a);
var_dump($b);
var_dump($c);
}
$arga = 1;
$argb = 2;
$argc = 3;
do_action('custom_hook', $arga, $argb, $argc);
exit;
Es gibt einen weiteren WP-Hook-Typ, der als Filter bezeichnet wird. Ein Filter unterscheidet sich von einer Aktion in ihrer Verwendung. Eine Aktion kann nur Variablen empfangen. Offensichtlich befinden sich diese Variablen im Funktionsumfang (Sie sollten wissen, was PHP ist, wenn nicht Google). Die Filter geben die zurückgegebenen Daten zurück, sodass Sie Variablen ändern können.
$filter_me= apply_filters('im_a_filter', $variable_to_filter);
Wo Sie das oben sehen, können Sie den Wert von $filter_me
da alle von Ihnen zurückgegebenen Daten der in der Variablen gespeicherte Wert sind. So zum Beispiel (Beachten Sie, dass wir $variable_to_filter
im Beispiel in $filter_me
):
add_filter('im_a_filter', 'attached_function', 100);
function attached_function($filter_me){
$filter_me= 'ray';
return $filter_me;
}
$filter_me = 'bob';
$filter_me= apply_filters('im_a_filter', $filter_me);
Die $filter_me
Variable enthält jetzt 'ray' anstelle von 'bob' . Wir haben eine Priorität von 100 festgelegt. Wir sind also zuversichtlich, dass niemand den Wert nach der Verwendung ändert (es können mehrere Filter auf demselben Hook laufen) Kann jetzt später im Prozess verwendete Variablen ändern, wenn apply_filters()
vorhanden ist.
Sie können auch mehrere Parameter übergeben, Sie können jedoch nur den Wert von eins ändern. Sie müssen auch einen Wert zurückgeben, sonst enthält Ihre Variable nichts. Wenn Sie wissen, wie Sie mit php Variablen / Werte / Arrays / Objekte zuweisen, ist dies für Sie offensichtlich, zB:
add_filter('im_a_filter', 'attached_function', 100, 3);
function attached_function($filter_me, $arga, $argb){
$filter_me= 'ray'.$arga.$argb;
$arga= 'you fool';
return $filter_me;
}
$filter_me = 'bob';
$arga = ' middlename';
$argb = ' surname';
$filter_me= apply_filters('im_a_filter', $filter_me, $arga, $argb);
Die Variable $filter_me
enthält jetzt den Nachnamen 'ray middlename' . Aber was ist mit $arga
? Dieser enthält immer noch 'middlename' . Die Änderung eines $arga
in 'you Fool' innerhalb unserer Funktion hat keinen Einfluss auf den definierten Wert außerhalb seines Gültigkeitsbereichs (es gibt Möglichkeiten, Google-Globals usw.).
add_action ($ hook_name, $ function, $ priority, $ parameters)
add_filter ($ hook_name, $ function, $ priority, $ parameters);
add_action - init
add_action('init', 'process_post');
function process_post(){
if($_POST)
var_dump($_POST);
}
add_action - init - anonyme Funktion
add_action('init' , function(){
echo 'i did something';
});
add_action - init - innerhalb eines Klassenobjekts
class sample{
public function __construct(){
add_action('init', array($this, 'samp') );
}
public function samp(){ // must be public!!
echo 'i did something';
}
}
new sample();
add_action - init - innerhalb der statischen Klasse
class sample{
public static function add_action_func(){
//note __CLASS__ will also include any namespacing
add_action('init', array(__CLASS__, 'samp') );
}
public static function samp(){
echo 'i did something';
}
}
sample::add_action_func();