在functions.php,小部件和插件之间,哪个首先加载?


78

客户询问是否可以对他使用的特定轮播插件进行小部件化。这意味着我应该在functions.php内创建一个调用插件功能的小部件。这意味着必须首先加载插件的代码,以便在加载functions.php文件时该功能可用于WordPress,对吗?那行得通吗?

Answers:


185

插件在主题之前加载(是的,我一直在寻找借口使用此插件):

在此处输入图片说明

但是,将这两者视为代码执行点是错误的。在大多数情况下,应在执行init钩子之前就钩住并执行所有内容。根据Codex小部件的注册,register_widget()应与挂钩widget_init

因为在这种情况下加载顺序无关紧要,所以无论何时在小部件需要时,您都将加载所有内容。


3
WP核心负载将毫无意义。
gagarine

7
我们有机会在2016年获得更新的图表吗?;-)
jgraup

9
@jgraup,您说WordPress核心中的事情发生了变化... :)
Rarst,2016年

1
@Rarst,touché;-)
jgraup

2
@IsaacLubow是的,不止一列中的内容针对那些各自的上下文运行,因为您可以看到,任何请求始终涉及相同的重要核心负载。
拉斯特

16

一种有趣的方法是按执行顺序列出到文件的所有挂钩。

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

}

您将获得如下输出:

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

请注意,完整列表完全不适合每个WPSO帖子的30.000个字符限制,因此我删除了许多操作挂钩。

将以上代码放入插件中。如果您按照主题进行操作functions.php,则不会被抓住plugins_loaded。另一证明插件已在主题之前加载。

这项检查可能有很多好处,但是请注意,对于您将调用的不同页面模板,或者如果您位于仪表板中,输出将有所不同。

我只是从“ /?p=1Hello World”页面或称呼此页面。

如果您没有激活单个插件,则可以将此代码放入mu-plugins文件夹中。

使用WP FS API可能会更好,但是这种方式确实很简洁。


内部wp-admin插件是在主题之后或按照安装顺序加载的...前端插件是在主题之前加载的...
Vishal Kumar Sahu

3

如果您要的是,您可以在插件的.php文件中包含一个小部件(并可以使用共享的全局变量)。这是一个带有示例代码教程,我偶然发现了。

另外,这是在典型请求期间按执行顺序运行的操作列表。#2和#10建议首先加载插件;不确定functions.php。


1
正确,插件先于主题文件加载。如果插件包含代码,但不包含所需的窗口小部件,则可以在主题的functions.php中定义窗口小部件。
goldenapples
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.