Wie oft kann ich mich an derselben Aktion beteiligen?

8

Ich habe ein Thema, das einige Einstellungen enthält, after_setup_themeaber ich möchte meine eigenen Funktionen schreiben, die ebenfalls ausgeführt werden müssen after_setup_theme. Ich würde es vorziehen, meine Sachen in einer separaten Datei zu speichern. Kann ich after_setup_thememehrmals anrufen ?

Gillespieza
quelle

Antworten:

26

WordPress-Hooks funktionieren wie Hollywood: Sie nennen sie nicht, sie nennen Sie. Aber im Gegensatz zu Hollywood rufen sie immer wieder alle auf der Liste an.

Es ist normal, dass an einer Aktion oder einem Filter mehrere Funktionen angeschlossen sind, die von verschiedenen Plugins stammen, oder sogar nur verschiedene Funktionen im WordPress-Kern, die alle etwas Bestimmtes tun . Dies ist nicht nur möglich, sondern auch eine gute Vorgehensweise, da Ihr Code klarer wird (jede Funktion macht nur eine Sache) und es einfacher ist, eine bestimmte Funktionalität durch Deaktivieren zu deaktivieren.

Denken Sie daran, dass Sie auch mit den Prioritäten von Hooks spielen können: Wenn Sie beide functionA()und functionB()in der ausführen möchten after_setup_theme, aber functionA()vorher ausgeführt werden müssen functionB(), können Sie functionA()mit der Standardpriorität 10und functionB()mit Priorität 20(oder einer anderen Zahl über 10) einbinden. Was nicht funktioniert, ist das Verknüpfen einer anderen Funktion mit einer Aktion, während diese Aktion ausgeführt wird . So können Sie nicht anschließen können , functionB()um after_setup_themeaus functionA(), aufgerufen after_setup_theme. Sie könnten es direkt aufrufen, aber Sie würden den Vorteil separater Haken verlieren.

Jan Fabry
quelle
7

Mein Vorschlag wäre, wenn Sie so wollen, eine "Master" -Funktion zu haben, die alle Ihre anderen Funktionen aufruft. Auf diese Weise müssen Sie sich nur einmal an dieser Aktion beteiligen.

add_action( 'after_setup_theme', 'master_function' );
function master_function()
{
    func_a();
    func_b();
    func_c();
    func_d();
    func_e();
}
function func_a(){ /* Do something */}
function func_b(){ /* Do something */}
function func_c(){ /* Do something */}
function func_d(){ /* Do something */}
function func_e(){ /* Do something */}

Dies hat den zusätzlichen Vorteil, dass Sie Werte zurückgeben können, die Sie in nachfolgenden Funktionsaufrufen verwenden können.

Aaron Wagner
quelle
4

Ja, Sie können dem Hook beliebig viele Aktionen hinzufügen. Probier es einfach.

Fuxia
quelle