Ricerca…


Sintassi

  • add_action ($ tag, $ function_to_add)
  • add_action ($ tag, $ function_to_add, $ priority)
  • add_action ($ tag, $ function_to_add, $ priority, $ accepted_args)

Parametri

Parametro Dettagli
$ tag (stringa) (Obbligatorio) Il nome dell'azione a cui è agganciato $function_to_add
$ function_to_add ( callable ) (Obbligatorio) La funzione che deve essere chiamata quando viene eseguita l'azione indicata da $tag
$ priorità (int) (Opzionale) Valore predefinito: 10 Utilizzato per specificare l'ordine in cui vengono eseguite le funzioni associate a una determinata azione. I numeri più bassi corrispondono all'esecuzione precedente e le funzioni con la stessa priorità vengono eseguite nell'ordine in cui sono stati aggiunti all'azione.
$ accepted_args (int) (Opzionale) Valore predefinito: 1 Il numero di argomenti accettati dalla funzione.

Osservazioni

La funzione add_action() crea un hook di azione , associando una funzione PHP a una determinata azione "tag" o nome. Quando l'azione viene "innescata" da una chiamata a do_action() (o do_action_ref_array() ) con un tag specifico, verranno eseguite tutte le funzioni "agganciate" a quel tag.

Nella maggior parte dei casi, questa funzione dovrebbe essere utilizzata nel file functions.php un tema o in un file plugin o in un altro file sorgente caricato da entrambi.

Questa funzione è una parte dell'API Plugin

Azione base Hook

L'applicazione di base di add_action() consiste nell'aggiungere codice personalizzato da eseguire in una determinata posizione in un codice sorgente dell'installazione di WordPress - utilizzando azioni fornite dal Core di WordPress o create da codice di terze parti come plug-in e plug-in temi.

Per aggiungere contenuto alla sezione <head></head> del sito - dì ad un meta elemento <link> aggiungi per indicare dove sono reperibili le informazioni sul copyright per il sito - add_action() può essere usato per allegare una funzione che stampa il markup appropriato per l'azione 'wp_head' (che "si innesca" quando WordPress crea la sezione <head> ):

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

add_action( 'wp_head', 'add_copyright_meta_link' );

Azione Hook Priority

Qualsiasi numero di funzioni può essere "agganciato" a qualsiasi azione specifica. In alcuni casi è importante che una funzione agganciata venga eseguita prima o dopo altre, che è il punto in cui entra in gioco il terzo parametro di add_action() , $priority .

Se l'argomento $priority è omesso, la funzione verrà associata con la priorità predefinita di 10 . Quando l'azione è "innescata", le funzioni "agganciate" verranno chiamate a partire da quelle aggiunte con la $priority più piccola e passando alle funzioni con la $priority più grande. Tutte le funzioni collegate che condividono la stessa priorità verranno chiamate nell'ordine in cui sono state aggiunte (l'ordine in cui sono state eseguite le rispettive chiamate add_action() ).

Ad esempio, supponiamo che un plug-in di terze parti utilizzi una funzione collegata all'azione 'template_redirect' per inoltrare i visitatori alla pagina di daily-deal a un link di affiliazione per un sito di e-commerce esterno, ma desideri il reindirizzamento si verifica solo per gli utenti registrati. Dovresti utilizzare il tuo hook 'template_redirect' per inviare i visitatori che hanno effettuato il logout alla pagina di accesso. Dopo aver stabilito che il plug-in di terze parti allega la sua funzione con il $piority predefinito di 10 , puoi agganciare la tua funzione con una priorità di 9 per assicurarti che il tuo check-in di accesso avvenga prima:

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

Agganciare i metodi di classe e oggetto alle azioni

Le classi PHP sono un potente strumento per migliorare l'organizzazione del codice e ridurre al minimo le collisioni di denominazione. Ad un certo punto o in un altro, inevitabilmente sorge la domanda su come creare un hook di azione per un metodo di classe.

L'argomento $function_to_add viene spesso mostrato come una stringa contenente il nome della funzione, tuttavia il tipo di dati dell'argomento è in realtà un " callable ", che per i nostri scopi può essere riassunto come "un riferimento a una funzione o un metodo".

Esistono numerosi formati richiamabili che possono essere utilizzati per fare riferimento a metodi su classi e oggetti. In tutti i casi, tuttavia, il metodo di riferimento deve essere visibile pubblicamente. Un metodo è pubblico quando è prefisso con la parola chiave public o non ha alcuna parola chiave di visibilità (nel qual caso il metodo è impostato su public).

Oggetto Metodo Azione Ganci

I metodi oggetto vengono eseguiti su una particolare istanza di una classe.

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

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

Dopo aver istanziato la classe sopra come segue,

$my_class_instance = new My_Class();

il metodo initialize() sarebbe normalmente invocato sull'oggetto chiamando $my_class_instance->initialize(); . L'aggancio del metodo all'azione WordPress 'init' viene eseguito passando una matrice contenente un riferimento all'istanza e una stringa contenente il nome del metodo dell'oggetto:

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

Se si chiama add_action() all'interno di un metodo object, è possibile utilizzare anche $this pseudo-variabili:

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

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

Ganci di azione del metodo di classe

I metodi di classe sono eseguiti staticamente su una classe piuttosto che su una particolare istanza. Data la seguente classe,

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

il metodo initialize() verrebbe normalmente richiamato usando l'operatore :: scope-resolution, cioè My_Class::initialize(); . L'hooking di un metodo statico di classe a un WordPress può essere fatto in un paio di modi diversi:

  • Utilizzando un array composto da una stringa contenente il nome della classe e una stringa contenente il nome del metodo:

    add_action( 'init', [ 'My_Class', 'initialize' ] );
    
  • Passando una stringa contenente un riferimento completo al metodo, incluso l'operatore ::

    add_action( 'init', 'My_Class::initialize' );
    
  • Se add_action() viene chiamato all'interno di un metodo di classe statico, al posto del nome della classe può essere utilizzata la parola chiave self o la __CLASS__ magia __CLASS__ . Si noti che questo è generalmente sconsigliabile in quanto i valori di questi elementi diventano alquanto controintuitivi nel caso dell'ereditarietà di classe.

    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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow