Suche…


Syntax

  • add_action ($ tag, $ function_to_add)
  • add_action ($ tag, $ function_to_add, $ priority)
  • add_action ($ tag, $ function_to_add, $ Priorität, $ akzeptierte_args)

Parameter

Parameter Einzelheiten
$ tag (Zeichenfolge) (Erforderlich) Der Name der Aktion, an die $function_to_add angehängt ist
$ function_to_add ( aufrufbar ) (Erforderlich) Die Funktion, die aufgerufen werden soll, wenn die durch $tag angegebene Aktion ausgeführt wird
$ Priorität (int) (Optional) Standardwert: 10 Wird verwendet, um die Reihenfolge anzugeben, in der die einer bestimmten Aktion zugeordneten Funktionen ausgeführt werden. Niedrigere Zahlen entsprechen der früheren Ausführung, und Funktionen mit derselben Priorität werden in der Reihenfolge ausgeführt, in der sie der Aktion hinzugefügt wurden.
$ Accepted_args (int) (Optional) Standardwert: 1 Die Anzahl der Argumente, die die Funktion akzeptiert.

Bemerkungen

Die add_action() Funktion erstellt einen Aktions Hook, eine PHP - Funktion mit einer bestimmten Aktion „Tag“ oder den Namen zuordnet. Wenn die Aktion durch einen Aufruf von do_action() (oder do_action_ref_array() ) mit einem bestimmten Tag "ausgelöst" wird, werden alle Funktionen ausgeführt, die mit diesem Tag do_action_ref_array() .

In den meisten Fällen sollte diese Funktion in der functions.php Datei eines Themas oder einer Plugin-Datei verwendet werden - oder in einer anderen Quelldatei, die von einer der beiden geladen wird.

Diese Funktion ist Teil der Plugin-API

Grundlegender Aktionshaken

Die einfachste Anwendung von add_action() ist das Hinzufügen von benutzerdefiniertem Code, der an einer bestimmten Stelle im Quellcode einer WordPress-Installation ausgeführt werden soll. Entweder mithilfe von Aktionen, die vom Core of WordPress bereitgestellt werden, oder durch Code von Drittanbietern (z. B. Plugins und) erstellten themen.

Um dem Abschnitt <head></head> der Site Inhalt hinzuzufügen - sagen Sie ein Meta-Element add <link> , um anzugeben, wo die Copyright-Informationen für die Site zu finden sind - add_action() kann zum Anhängen einer Funktion zum Drucken verwendet werden das entsprechende Markup für die 'wp_head' Aktion (die "auslöst", wenn WordPress den <head> -Abschnitt erstellt):

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

add_action( 'wp_head', 'add_copyright_meta_link' );

Aktion Hook-Priorität

Es kann eine beliebige Anzahl von Funktionen mit einer bestimmten Aktion verknüpft werden. In einigen Fällen ist es wichtig, dass eine Hook-Funktion vor oder nach anderen ausgeführt wird. Hier kommt der dritte Parameter von add_action() , $priority zum Tragen.

Wenn das Argument $priority wird, wird die Funktion mit der Standardpriorität 10 angehängt. Wenn die Aktion "ausgelöst" wird, werden die "eingehängten" Funktionen aufgerufen, beginnend mit den mit der niedrigsten $priority hinzugefügten Funktionen und zu den Funktionen mit der höchsten $priority . Alle Hook-Funktionen mit derselben Priorität werden in der Reihenfolge aufgerufen, in der sie hinzugefügt wurden (der Reihenfolge, in der ihre jeweiligen add_action() Aufrufe ausgeführt wurden).

Angenommen, ein Plug-In eines Drittanbieters verwendet eine Funktion, die mit der Aktion 'template_redirect' verknüpft ist, um Besucher von der Seite mit dem daily-deal an einen Partner-Link für eine externe E-Commerce-Site weiterzuleiten. Sie möchten jedoch die Weiterleitung nur für angemeldete Benutzer auftreten. Sie müssten Ihren eigenen 'template_redirect' -Hook verwenden, um abgemeldete Besucher an die Anmeldeseite zu senden. Nachdem Sie festgestellt haben, dass das $piority eines $piority seine Funktion mit der voreingestellten $piority von 10 , können Sie Ihre Funktion mit der Priorität 9 $piority , um sicherzustellen, dass Ihre angemeldete Prüfung zuerst erfolgt:

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

Klassen- und Objektmethoden mit Aktionen verknüpfen

PHP-Klassen sind ein leistungsfähiges Werkzeug zur Verbesserung der Code-Organisation und zur Minimierung von Namenskollisionen. Irgendwann stellt sich unweigerlich die Frage, wie man einen Action-Hook für eine Klassenmethode erstellt.

Das Argument $function_to_add wird häufig als Zeichenfolge angezeigt, die den Namen der Funktion enthält. Der Datentyp des Arguments ist jedoch tatsächlich " aufrufbar ", was für unsere Zwecke als "Referenz auf eine Funktion oder Methode" zusammengefasst werden kann.

Es gibt eine Reihe von aufrufbaren Formaten, mit denen Methoden auf Klassen und Objekte referenziert werden können. In allen Fällen muss jedoch die referenzierte Verfahren öffentlich sein sichtbar . Eine Methode ist public, wenn dem public Schlüsselwort entweder ein Präfix vorangestellt wird oder überhaupt kein Sichtbarkeitsschlüsselwort (in diesem Fall ist die Methode standardmäßig öffentlich).

Objektmethode Aktionshaken

Objektmethoden werden für eine bestimmte Instanz einer Klasse ausgeführt.

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

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

Nach der Instantiierung der obigen Klasse wie folgt:

$my_class_instance = new My_Class();

Die Methode initialize() wird normalerweise für das Objekt aufgerufen, indem $my_class_instance->initialize(); aufgerufen wird $my_class_instance->initialize(); . Das Ankoppeln der Methode an die 'init' WordPress-Aktion erfolgt durch Übergeben eines Arrays, das eine Referenz auf die Instanz enthält, und einer Zeichenfolge, die den Namen der Objektmethode enthält:

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

Wenn add_action() innerhalb einer Objektmethode aufgerufen wird, kann auch die add_action() $this verwendet werden:

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

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

Klassenmethode Aktionshaken

Klassenmethoden werden statisch für eine Klasse und nicht für eine bestimmte Instanz ausgeführt. Angesichts der folgenden Klasse

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

Die Methode initialize() wird normalerweise mit dem Operator :: scope-resolution aufgerufen, dh My_Class::initialize(); . Das Ankoppeln einer statischen Klassenmethode an eine WordPress-Datei kann auf verschiedene Arten erfolgen:

  • Verwenden eines Arrays aus einer Zeichenfolge, die den Klassennamen enthält, und einer Zeichenfolge, die den Methodennamen enthält:

    add_action( 'init', [ 'My_Class', 'initialize' ] );
    
  • Übergeben einer Zeichenfolge, die eine vollständige Referenz auf die Methode enthält, einschließlich des Operators ::

    add_action( 'init', 'My_Class::initialize' );
    
  • Wenn add_action() innerhalb einer statischen Klassenmethode __CLASS__ wird, kann anstelle des Klassennamens das Schlüsselwort self oder die magische Konstante __CLASS__ verwendet werden. Beachten Sie, dass dies im Allgemeinen nicht zu empfehlen ist, da die Werte dieser Elemente im Fall der Klassenvererbung etwas kontrapunktisch werden.

    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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow