Sök…


Syntax

  • add_action (tagg, function_to_call, prioritet, num_of_args);
  • add_filter (tagg, function_to_call, prioritet, num_of_args);

parametrar

Parameter Förklaring
$ tag (string) (Obligatoriskt) Namnet på den åtgärd som $ -funktionen är ansluten till.
$ funktion (kallbar) (Obligatorisk) Kräver en sträng som innehåller funktionsnamnet eller anonym funktion. Se exempel för att lägga till funktioner inom klasserna.
$ prioritet (int) default = 10. Funktioner kopplade till krokar / filter körs i den tilldelade prioriteten. Du kan ha en situation där du vill arbeta med kod innan andra åtgärder, ställ in prioritet = 1 eller efter alla andra bifogade funktioner prioritet = 100 etc. Som med alla php-funktioner kan du använda funktionen utan att lämna ett värde för en variabel där ett standardvärde har ställts in, men om du vill ändra antalet returnerade parametrar måste du ange!
$ parametrar (int) default = 1. Antalet parametrar som returneras till din bifogade funktion. Parametrarna som returneras beror på antalet bifogat där kroken skapades. Se apply_filters() och do_action() för mer information.

Anmärkningar

Wordpress Hooks

Något som ofta förvirrar utvecklare när de börjar arbeta med WordPress är användningen av apply_filters() och add_action() . Du ser ofta plugins / teman som använder dessa i kod och om du inte förstår konceptet kommer du att ha svårt att arbeta med dem.

I korthet (mycket kort, slå upp WordPress-laddningsflödesschemat för process i detalj), WordPress laddas på följande sätt:

  1. wp-load.php - funktioner osv
  2. mu-plugins - alla filer som finns i mu-plugins-mappen - ofta används för att servera cachade objekt
  3. Plugins - ingen särskild ordning, installerade och aktiverade plugins kommer att laddas
  4. Aktivt barntema / föräldertema
  5. init - resten av data
  6. mall

Om du är en utvecklare och arbetar med en funktionsfil kan du se att båda laddas tidigare i processen än filerna du arbetar med. Detta innebär att du inte kan ändra processer (Observera att du inte kan skriva över funktioner) eller variabler som körs senare eller ännu inte har definierats. Även temautvecklare kan placera krokar i sin kod för att tillåta plugins att ansluta till eller plugins kan tillåta andra plugins att skriva över sina variabler. Nu kan detta vara förvirrande hittills, men hänga in där.

För att förstå add_filter() och add_action() måste vi titta på hur krokarna skapas i första hand.

$arga= 'hello';
do_action('im_a_hook', $arga );

När du stöter på ovanstående i WordPress kommer det att ringa alla funktioner som är anslutna till kroken im_a_hook (slå upp $wp_filter för information om processen). I din bifogade funktion kommer $arga att vara tillgänglig för den bifogade funktionen att arbeta med.

add_action('im_a_hook', 'attached_function');

function attached_function($arga){
     echo $arga;
}

Detta öppnar nya kraftfulla möjligheter att ändra variabler på vissa punkter i lastprocessen. Kommer du ihåg att vi tidigare sa att mallar laddas efter plugins / teman? En vanlig plugin är WooCommerce som skapar skärmar senare i processen. Jag kommer inte att dokumentera hur men ett exempel på do_action kan hittas i plugin.

do_action( 'woocommerce_after_add_to_cart_button' );

Här har vi en krok skapad som inte ger några variabler tillbaka, men vi kan fortfarande ha kul med det:

add_action( 'woocommerce_after_add_to_cart_button', 'special_offer');

function special_offer(){
    echo '<h1>Special Offer!</h1>;
}

Ovanstående add_action kommer att echo en rubrik för specialerbjudande där do_action('woocommerce_after_add_to_cart_button') finns, vilket är när du skapar en WooCommerce-skärm. Så vi kan använda den här kroken för att sätta in html. Andra användningar kan omfatta omdirigering till en annan skärm helt, etc.

Även flera variabler kan skickas till funktionen. Prova detta i dina temafunktioner. Notera den sista parametern som vi ställer in på 3 eftersom vi vill arbeta med de 3 tillgängliga parametrarna. Om vi ändrade detta till 2 skulle bara 2 returneras och vi skulle få ett odefinierat fel.

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;

Det finns en annan WP-krokstyp som kallas ett filter. Ett filter skiljer sig från en åtgärd i dess användning, en åtgärd kan bara ta emot variabler, uppenbarligen ligger dessa variabler inom funktionsomfånget (du bör veta vad php-omfattning är, om inte google). Filter lämnar tillbaka de returnerade uppgifterna, så du kan använda för att ändra variabler.

$filter_me= apply_filters('im_a_filter', $variable_to_filter);

Där du ser ovanstående kan du ändra värdet på $filter_me eftersom all $filter_me du returnerar är värdet som lagras i variabeln. Så till exempel (notera att vi ändrar $variable_to_filter till $filter_me i exemplet):

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);

$filter_me kommer nu att innehålla 'ray' snarare än 'bob' , vi har satt en prioritet på 100 så vi är rimligt säkra på att ingen ändrar värdet efter användning (det kan finnas flera filter som körs på samma krok) Så vi kan nu ändra variabler som används senare i processen om apply_filters() finns.

Du kan också skicka flera parametrar, men du kan bara ändra värdet på en. Du måste också returnera ett värde, annars innehåller din variabel ingenting. Om du förstår hur du använder php för att tilldela värden / matriser / objekt till variabler kommer detta att vara uppenbart för dig, t.ex.

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);

$filter_me innehåller nu 'ray middlename efternamn' . Men hur är det med $arga ? Detta innehåller fortfarande "mellannamn" , att ändra en $arga till "du lurar" inom vår funktion har ingen effekt på det definierade värdet utanför dess räckvidd (det finns sätt, google globaler etc.)

add_action ($ hook_name, $ function, $ prioritet, $ parameters)

add_filter ($ hook_name, $ function, $ prioritet, $ parameters);

add_action - init

add_action('init', 'process_post');

function process_post(){
   if($_POST)
     var_dump($_POST);
}

add_action - init - anonym funktion

add_action('init' , function(){
    echo 'i did something';
});

add_action - init - inom klassobjekt

 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 - inom statisk klass

 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow