it-swarm.com.de

Verwenden Sie wp init hook, um andere Hooks aufzurufen?

Ich möchte wissen, ob es sich um eine bewährte Methode gemäß dem WordPress-Thema oder der Plugin-Entwicklung handelt.

add_action('init','all_my_hooks');

function all_my_hooks(){

// some initialization stuff here and then

add_action('admin_init',-----);
add_action('admin_menu',----);

// more like so

}

vielen Dank

11
atinder

Im Allgemeinen: Ja, warten Sie, bis ein dedizierter Hook Ihren eigenen Code startet. Never wirf einfach eine Objektinstanz in den globalen Namespace. Aber init ist selten notwendig.

Sie melden sich so spät wie möglich an. Wenn Ihr erster Code auf wp_head ausgeführt wird, verwenden Sie keinen früheren Hook. Sie können sogar Haken kaskadieren :

add_action( 'wp_head', 'first_callback' );

function first_callback()
{
    // do something
    // then
    add_action( 'wp_footer', 'second_callback' );
}

In Bezug auf den Hook init: Verwenden Sie stattdessen wp_loaded. Das läuft nachdem init und nachdem ms_site_check() aufgerufen wurde. Auf diese Weise vermeiden Sie, dass Ihr Plugin bei einer Installation mit mehreren Standorten auf einer ungültigen untergeordneten Site ausgeführt wird. Alles andere ist dasselbe.

16
fuxia

Ich sehe die big Vorteile dieser Praxis aus folgenden Gründen nicht:

Ihre Rückruffunktionen werden bei der Registrierung nicht aufgerufen

Die Funktionen add_action und add_filter fügen nur der globalen Variablen $wp_filter einen Eintrag hinzu, der alle Filter und Aktionen enthält. Siehe Quelle . Es ruft Ihre Funktion nicht auf. Ihr Code wird nur ausgeführt, wenn der do_action und der apply_filters aufgerufen werden (mit dem entsprechenden Hook-Namen). Dies geschieht sehr spät an der Stelle, an der sich diese Hooks befinden sollten.

Sie könnten sagen, dass dadurch die globale Variable $wp_filter größer wird => mehr Speicher benötigt. Aber ich denke, das Erstellen einer neuen Funktion hat das gleiche Problem.

Code organisieren

Wenn Sie alles in die Funktion one einfügen, werden Sie gezwungen, sich alle Hooks in allen Dateien in Ihrem Theme/Plugin zu merken. Du würdest so etwas machen:

  • in header.php: füge Hooks und Callback-Funktionen für Dinge hinzu, die in der Kopfzeile passieren (wie Menü, registrierendes Skript)
  • in content.php: füge Hooks und Callback-Funktionen zum Filtern von Inhalten hinzu
  • admin-menu.php: Fügen Sie Hooks und Rückruffunktionen hinzu, um das Admin-Menü hinzuzufügen

(Nehmen wir an, dass diese Dateien in Ihrem Theme/Plugin abgelegt sind)

Stattdessen müssen Sie:

  • setze nur Rückruffunktionen in header.php, content.php, admin-menu.php
  • und setzen Sie alle Haken in einer getrennten Funktion in eine andere Datei

=> Das macht es dir schwer zu wissen, was passiert, wenn du dir den Inhalt der header.php-Datei ansiehst. Sie müssen suchen, um zu wissen, wann diese Rückrufe ausgelöst werden.

Denken Sie auch an Situationen, in denen Ihr Theme/Plugin mehrere Klassen enthält. Stecken Sie alle Haken aller Klassen an einem Ort? Oder hat jede Klasse eine Wrapper-Funktion, die alle Hooks enthält? Es ist zu redundant!

Über diesen Grund denke ich, dass es persönlicher Stil ist :). Ich sehe, dass einige Frameworks wie Hybrid das tun, was Sie gesagt haben. Manchmal fällt es mir schwer, mich in diesen Frameworks zurechtzufinden!

3
Anh Tran