Zwischen functions.php, Widgets und Plugins, welche werden zuerst geladen?

78

Der Kunde fragt, ob ein bestimmtes Karussell-Plugin, das er verwendet, als Widget verwendet werden kann. Das heißt, ich sollte ein Widget in functions.php erstellen, das die Funktion des Plugins aufruft. Das bedeutet, dass der Code des Plugins zuerst geladen werden muss, damit die Funktion für WordPress verfügbar ist, wenn die Datei functions.php geladen wird, oder? Funktioniert das?

Pixeline
quelle

Antworten:

185

Die Plugins werden direkt vor dem Theme geladen (ja, ich habe nach einer Ausrede gesucht, um dies zu verwenden):

Bildbeschreibung hier eingeben

Es ist jedoch falsch, sich beides als einen Punkt der Codeausführung vorzustellen. In den meisten Fällen sollte alles nicht früher als initHook angehakt und ausgeführt werden . Laut Codex soll die Widget-Registrierung mit register_widget()angehängt werden widget_init.

Da diese Ladereihenfolge in diesem Fall keine Rolle spielt, wird in jedem Fall alles geladen, was das Widget benötigt.

Rarst
quelle
3
Die WP-Kernlast wird niemals einen Sinn ergeben.
Gagarine
7
Gibt es eine Chance, dass wir 2016 ein aktualisiertes Diagramm erhalten? ;-)
jgraup
9
@jgraup Sie sagen, dass sich die Dinge in WordPress Core ändern mögen ... :)
Rarst
1
@Rarst, touché ;-)
jgraup
2
@IsaacLubow Ja, die Dinge in mehr als einer Spalte werden für die jeweiligen Kontexte ausgeführt, da bei jeder Anforderung immer derselbe signifikante Teil der Kernlast beteiligt ist.
Rarst
16

Ein interessanter Ansatz wäre, alle Hooks zu einer Datei in einer Ausführungssequenz aufzulisten.

add_action( 'all', '_20161224_printer' );
function _20161224_printer( $r ){

    $line =  microtime(true)*10000 . ' ' . $r .  "\n";
    $fp = fopen( ABSPATH . 'hooks.txt', 'a+');
    fwrite($fp, $line);
    fclose($fp);

}

Und Sie erhalten die Ausgabe wie folgt:

14825992300742 pre_option_blog_charset
14825992300743 option_blog_charset
14825992300743 plugins_loaded
14825992300744 load_default_widgets
14825992300745 load_default_embeds
14825992300745 wp_audio_extensions
14825992300745 wp_audio_embed_handler
14825992300746 wp_video_extensions
14825992300746 wp_video_embed_handler
14825992300746 sanitize_comment_cookies
14825992300747 pre_option_permalink_structure
14825992300747 option_permalink_structure
14825992300748 pre_option_wp_user_roles
14825992300748 option_wp_user_roles
14825992300749 wp_roles_init
14825992300749 setup_theme
14825992300749 pre_option_template
14825992300750 option_template
14825992300750 template
14825992300750 theme_root
14825992300751 template_directory
14825992300751 pre_option_stylesheet
14825992300751 option_stylesheet
14825992300751 stylesheet
14825992300752 theme_root
14825992300752 stylesheet_directory
14825992300752 pre_option_WPLANG
14825992300753 query
14825992300754 default_option_WPLANG
14825992300755 locale
14825992300755 override_unload_textdomain
14825992300755 unload_textdomain
14825992300755 override_load_textdomain
14825992300756 load_textdomain
14825992300756 load_textdomain_mofile
14825992300756 locale
...
many many more action hooks
...
14825992302886 wp_parse_str
14825992302886 nonce_life
14825992302886 salt
14825992302886 wp_parse_str
14825992302887 esc_html
14825992302887 logout_url
14825992302887 clean_url
14825992302887 gettext
14825992302887 wp_after_admin_bar_render
14825992302888 pre_option_template
14825992302888 option_template
14825992302888 template
14825992302888 theme_root
14825992302888 template_directory
14825992302889 parent_theme_file_path
14825992302889 shutdown

Beachten Sie, dass die vollständige Liste einfach nicht der Beschränkung von 30.000 Zeichen pro WPSO-Post entsprechen konnte, sodass ich viele Aktions-Hooks entfernt habe.

Gib den obigen Code in ein Plugin ein. Wenn Sie das von den Themen tun, werden functions.phpSie nicht fangen plugins_loaded. Ein weiterer Beweis, dass die Plugins vor dem Theme geladen sind.

Die möglichen Vorteile dieser Überprüfung sind vielfältig. Beachten Sie jedoch, dass die Ausgabe für verschiedene Seitenvorlagen, die Sie aufrufen, oder wenn Sie sich in einem Dashboard befinden, unterschiedlich ist.

Ich habe das einfach von /?p=1oder Hallo Welt Seite genannt.

Wenn Sie kein einziges Plugin aktiviert haben, können Sie diesen Code in einem mu-pluginsOrdner ablegen.

Es ist vielleicht besser, die WP FS-API zu verwenden , aber dieser Weg ist wirklich prägnant.

prosti
quelle
Innerhalb von wp-admin werden Plugins nach dem Thema oder in der Reihenfolge der Installation geladen ... und in Front-End-Plugins werden vor dem Thema geladen ...
Vishal Kumar Sahu
3

Sie können ein Widget in der .php-Datei des Plugins haben (und eine gemeinsame globale Variable, die beide verwenden können), wenn Sie danach fragen. Hier ist ein Tutorial mit Beispielcode, über den ich vor einiger Zeit gestolpert bin.

Außerdem finden Sie hier eine Liste der Aktionen, die während einer typischen Anforderung in der Reihenfolge ihrer Ausführung ausgeführt werden. # 2 und # 10 schlagen vor, dass Plugins zuerst geladen werden; Ich bin mir nicht sicher über functions.php.

montrealistisch
quelle
1
Richtig, Plugins werden vor Themendateien geladen. Wenn das Plugin Code enthält, aber nicht das gewünschte Widget, können Sie das Widget in der Datei functions.php Ihres Themas definieren.
Goldenapples