WordPress以什么顺序加载插件文件?


Answers:


26

回答第一个问题:

  1. 在中wp-settings.php,WordPress首先检查所有必须使用的插件(可选mu-plugins文件夹中的插件)并加载它们。

  2. 然后,如果您正在运行多站点安装,它将检查网络激活的插件并加载它们。

  3. 然后,它通过查看数据库表的active_plugins条目来检查所有其他活动插件wp_options,并循环浏览这些插件。插件将按字母顺序列出。

这是WordPress几乎加载所有内容的顺序:http : //codex.wordpress.org/Action_Reference#Actions_Run_During_a_Typical_Request

关键是,通常每个插件的加载顺序都没有关系,因为正确编写的插件将使用WordPress钩子,这使您可以在WordPress启动后将功能插入到特定点。(正确编写的插件还将在其函数和类之前加上前缀,以免发生任何冲突。)

有关插件API的更多信息:http : //codex.wordpress.org/Plugin_API/

回答第二个问题:

完全取决于插件。WordPress仅在插件中加载一个文件,该文件通常被命名为文件the-plugin-name.php,并在顶部包含标题,描述,作者等。取决于插件如何使用require_oncewp_enqueue_script和诸如此类来加载其其余文件。


因此,如果我创建一个插件,然后在以后发布一个应在原始插件运行后运行的附加插件,我如何确保该顺序?
urok93 2012年

这实际上取决于您要执行的操作。但是通常,您可以使用add_action()函数将它们中的每一个设置为在特定的挂钩上运行,该函数可以设置优先级。codex.wordpress.org/Function_Reference/add_action
SeventhSteel

@SeventhSteel但是,如果一个插件依赖于另一个插件创建的钩子,该怎么办。如果一个插件用于apply_filters()创建一个钩子,但在使用的插件之前运行add_filter(),那么它仍然可以工作吗?从逻辑上讲,似乎apply_filters()已经触发了,因此add_filter()第二个插件中的调用不会执行任何操作。仅使用插件创建的挂钩时,插件以什么顺序加载有关系吗?
trusktr

重要的是在apply_filters()运行时加载了什么。add_filter()必须先运行apply_filters()。如果add_filter()是在插件文件中,而不是在另一个函数中,则它将在plugins_loaded钩子上运行,这通常会在需要之前发生apply_filters()
SeventhSteel 2014年

一种常见的情况是有多个插件在其后附加其内容the_content-如何确定其出现顺序?
Dan Knauss

9

我发现在插件中包含“延迟加载”操作很有用,该操作在所有插件完成加载后运行,如下所示:

add_action('plugins_loaded', 'my_late_loader');

然后,在所有其他插件之后启动函数my_late_loader,这使我可以在自己的函数my_other_function中使用其他插件定义的挂钩,该函数在my_late_loader中启动

/**
 * Late loading function for actions that must run after all plugins 
 * have loaded
 */
function my_late_loader(){
    add_action( 'some_hook', 'my_other_function', 10, 1);
}

有点费解(我知道),但是这可以确保在添加其他插件之前创建钩子,而与插件加载顺序无关。

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.