WordPress以什么顺序加载插件?

在特定插件的文件夹中,加载顺序是什么?

评论

您可以使用此插件进行深入调试:https://wordpress.org/plugins/whats-running/它列出了WordPress中所有必需的文件。

#1 楼

第一个问题的答案:


wp-settings.php中,WordPress首先检查所有必须使用的插件(可选mu-plugins文件夹中的插件)并加载它们。
然后,如果您正在运行多站点安装,它将检查网络激活的插件并加载它们。
然后,通过查看active_plugins数据库表的wp_options条目来检查所有其他活动插件,并循环遍历这些插件。插件将按字母顺序列出。

WordPress加载几乎所有内容的顺序如下:通常,每个插件的加载顺序无关紧要,因为正确编写的插件将使用WordPress钩子,这可让您稍后在WordPress启动中将功能插入到特定点。 (正确编写的插件还将在其函数和类之前加上前缀,以便没有任何冲突。)

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

回答第二个问题:

完全取决于插件。 WordPress仅在插件中加载一个文件,该文件通常名为the-plugin-name.php,并在顶部包含标题,描述,作者等。插件需要使用require_oncewp_enqueue_script以及其他功能来加载其余文件。

评论


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

–urok93
2012年8月27日在6:21

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

–第七钢
2012年8月27日13:31

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

–trusktr
13年7月1日在17:15



重要的是在apply_filters()运行时已加载的内容。 add_filter()必须在apply_filters()之前运行。如果add_filter()在插件文件中,而不在其他函数中,则它将在plugins_loaded钩子上运行,通常会在需要apply_filters()之前发生。

–第七钢
2014年11月21日17:28



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

–丹·克诺斯(Dan Knauss)
17 Mar 23 '17 at 16:12

#2 楼

我发现在插件中包含“延迟加载”操作很有用,该操作在所有插件完成加载后运行,如下所示:
在所有其他插件之后启动,这使我可以在我自己的函数my_other_function中使用其他插件定义的钩子,该函数在my_late_loader中启动。
但这可以确保在添加其他插件之前创建钩子,而与插件加载顺序无关。

#3 楼

我最初来到此页面时遇到的问题与第一个相同。 @SeventhSteel和@Clinton的答案都提供了一些非常有用的数据,但需要额外的挖掘。如这些答案所述,您正确编写的插件将使用钩子,并会进行如下调用:)
函数-第二个参数-已被挂钩。指定的操作是插件加载时间的主要决定因素。有一个可选的第三个参数(优先级),它使您可以精确控制函数在该组中的何处加载。 (尽管这很难精确,因为通常很难知道所有已安装插件的优先级。)在WordPress Codex中,有一个很好的清单,列出了所有可用的动作钩子,并解释了各种请求类型。
对于第二个问题,如“插件基础”文档中所述:

当WordPress在WordPress Admin的“插件”页面上加载已安装插件的列表时,它将搜索plugins文件夹(及其子文件夹) )以查找带有WordPress插件标题注释的PHP文件。

,因此将首先加载插件中带有标题的文件(根据文档,应该只有一个)。请参阅@Clinton的答案,以获取有关在单个插件中处理多个挂钩的建议。在WordPress的插件手册中。