Sök…


Syntax

  • add_action ($ tag, $ function_to_add)
  • add_action ($ tag, $ function_to_add, $ prioritet)
  • add_action ($ tag, $ function_to_add, $ prioritet, $ accept_args)

parametrar

Parameter detaljer
$ tag (string) (Obligatoriskt) Namnet på den åtgärd som $function_to_add är ansluten till
$ function_to_add ( kallbar ) (Obligatorisk) Funktionen som ska anropas när åtgärden som indikeras med $tag körs
$ prioritet (int) (Valfritt) Standardvärde: 10 Används för att ange i vilken ordning funktionerna associerade med en viss åtgärd utförs. Lägre siffror motsvarar tidigare exekvering och funktioner med samma prioritet körs i den ordning de lades till i åtgärden.
$ accepted_args (int) (Valfritt) Standardvärde: 1 Antalet argument som funktionen accepterar.

Anmärkningar

add_action() skapar en Action Hook , som kopplar en PHP-funktion till en viss åtgärd "tag" eller namn. När åtgärden "utlöses" av ett samtal till do_action() (eller do_action_ref_array() ) med en specifik tagg, kommer alla funktioner "hooked" till den taggen att köras.

I de flesta fall bör den här funktionen användas i ett temas functions.php fil eller en plugin-fil - eller en annan källfil som laddas av endera.

Denna funktion är en del av Plugin API

Grundläggande åtgärdskrok

Den mest grundläggande applikationen av add_action() är att lägga till anpassad kod som ska köras på en viss plats i en WordPress-installations källkod - antingen med hjälp av handlingar som tillhandahålls av Core of WordPress, eller sådana som skapats av tredjepartskod som plugins och teman.

För att lägga till innehåll till <head></head> -avsnittet på webbplatsen - säg till ett lägg <link> meta-element för att ange var information om upphovsrätt för webbplatsen kan hittas - add_action() kan användas för att bifoga en funktion som skriver ut lämplig markering för 'wp_head' (som "utlöses" när WordPress bygger avsnittet <head> ):

function add_copyright_meta_link() {
  echo( '<link rel="copyright" href="' . get_home_url() . '/copyright">' );
}

add_action( 'wp_head', 'add_copyright_meta_link' );

Action Hook Prioritet

Vilket antal funktioner som helst kan "kopplas" till varje given åtgärd. I vissa fall är det viktigt för en hooked-funktion att köra före eller efter andra, vilket är där den tredje parametern till add_action() , $priority spelar in.

Om $priority utelämnas bifogas funktionen med standardprioriteten 10 . När åtgärden "utlöses" kommer de "kopplade" -funktionerna att kallas med början med de som läggs till med den minsta $priority och fortsätter till funktionerna med den största $priority . Alla anslutna funktioner som har samma prioritet kommer att ringas i den ordning de lades till (ordningen där deras respektive add_action() samtal utfördes).

Till exempel, säger att ett tredjeparts plugin använder en funktion som är kopplad till åtgärden 'template_redirect' för att vidarebefordra besökare till daily-deal sidan till en affiliate-länk för en extern e-handelswebbplats, men du vill ha omdirigering att endast ske för inloggade användare. Du måste använda din egen 'template_redirect' -krok för att skicka utloggade besökare till inloggningssidan. När du har fastställt att tredjeparts plugin ansluter sin funktion med standard $piority10 kan du ansluta din funktion med en prioritet på 9 att säkerställa att din inloggade check sker först:

function redirect_deal_visitors_to_login() {
  if( is_page( 'daily-deal' ) && !user_is_logged_in() ) {
    wp_redirect( wp_login_url() );
    exit();
  }
}

add_action( 'template_redirect', 'redirect_deal_visitors_to_login', 9 );

Hooking Class & Object Methods to Actions

PHP-klasser är ett kraftfullt verktyg för att förbättra koderorganisationen och minimera namnkollisioner. Vid någon eller annan punkt uppstår oundvikligen frågan om hur man skapar en actionkrok för en klassmetod.

Argumentet $function_to_add visas ofta som en sträng som innehåller funktionens namn, men datatypen för argumentet är faktiskt ett " kallbart ", som för våra ändamål kan summeras som "en referens till en funktion eller metod".

Det finns ett antal konverterbara format som kan användas för att referensmetoder för klasser och objekt. Men i alla fall måste den refererade metoden vara synlig för allmänheten. En metod är offentlig när den antingen är förinställd med det public nyckelordet, eller inget synligt nyckelord alls (i vilket fall metoden är standard för allmänhet).

Objektmetod Handlingskrokar

Objektmetoder körs i en viss instans av en klass.

class My_Class {
  // Constructor
  function My_Class() {
    // (Instantiation logic)
  }

  // Initialization function
  public function initialize() {
    // (Initialization logic)
  }
}

Efter att ha klarat ovanstående klass enligt följande,

$my_class_instance = new My_Class();

metoden för initialize() skulle normalt åberopas på objektet genom att ringa $my_class_instance->initialize(); . Att ansluta metoden till 'init' WordPress-åtgärden görs genom att skicka en matris som innehåller en referens till förekomsten och en sträng som innehåller objektmetodens namn:

add_action( 'init', [ $my_class_instance, 'initialize' ] );

Om add_action() kallas inom en objektmetod kan $this pseudo-variabel också användas:

class My_Class {
  // Constructor
  function My_Class() {
    // (Instantiation logic)
    add_action( 'init', [ $this, 'initialize' ] );
  }

  // Initialization function
  public function initialize() {
    // (Initialization logic)
  }
}

Klassmetod Handlingskrokar

Klassmetoder exekveras statiskt i en klass snarare än på någon speciell instans. Med tanke på följande klass,

class My_Class {   
  // Initialization function
  public static function initialize() {
    // (Initialization logic)
  }
}

initialize() -metoden skulle normalt åberopas med hjälp av :: scope-resolution operator, dvs. My_Class::initialize(); . Att ansluta en statisk klassmetod till en WordPress kan göras på ett par olika sätt:

  • Använda en matris sammansatt av en sträng som innehåller klassnamnet och en sträng som innehåller metodnamnet:

    add_action( 'init', [ 'My_Class', 'initialize' ] );
    
  • Att skicka en sträng som innehåller en fullständig referens till metoden, inklusive :: operatören:

    add_action( 'init', 'My_Class::initialize' );
    
  • Om add_action() kallas inom en statisk klassmetod, kan self eller magiska konstanten __CLASS__ användas i stället för klassnamnet. Observera att detta i allmänhet är otillräckligt eftersom värdena på dessa objekt blir något motintuitiva när det gäller klassarv.

    class My_Class {
      // Setup function
      public static function setup_actions() {
        add_action( 'init', 'self::initialize' );
      }
    
      // Initialization function
      public static function initialize() {
        // (Initialization logic)
      }
    }
    


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow