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:

  1. wp-load.php - Funktionen etc
  2. mu-plugins - alle Dateien, die sich im Ordner mu-plugins befinden - werden häufig für zwischengespeicherte Objekte verwendet
  3. Plugins - keine besondere Reihenfolge, alle installierten und aktivierten Plugins werden geladen
  4. Aktives untergeordnetes Thema / übergeordnetes Thema
  5. init - Rest der Daten
  6. 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();


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow