it-swarm.com.de

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

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?

77
pixeline

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

enter image description here

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

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

180
Rarst

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 für die Beschränkung von 30.000 Zeichen pro WPSO-Post geeignet ist, sodass ich viele Aktions-Hooks entfernt habe.

Gib den obigen Code in ein Plugin ein. Wenn Sie das aus den Themen functions.php machen, werden Sie plugins_loaded nicht fangen. 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 der Seite /?p=1 oder Hello World aufgerufen.

Wenn Sie kein einziges Plugin aktiviert haben, können Sie diesen Code in den Ordner mu-plugins kopieren.

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

13
prosti

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 das ich vor einiger Zeit gestolpert bin.

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

3
montrealist