WordPress加载插件文件的顺序是什么?

时间:2012-08-26 作者:urok93

插件在WordPress中的加载顺序是什么?

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

4 个回复
最合适的回答,由SO网友:SeventhSteel 整理而成

第一个问题的答案:中wp-settings.php, WordPress首先检查任何必须使用的插件(可选mu-plugins 文件夹)并加载这些。

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

然后通过查看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 等等。

SO网友:Clinton

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

add_action(\'plugins_loaded\', \'my_late_loader\');
然后,在所有其他插件之后启动my\\u late\\u loader函数,允许我在my\\u late\\u loader内启动的my\\u other\\u函数中使用其他插件定义的挂钩

/**
 * 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);
}
有点复杂(我知道),但这确保了在添加其他插件之前,不管插件加载顺序如何,都会创建其他插件中的挂钩。

SO网友:yodarunamok

我最初来到这一页时提出的问题与first 一SeventhSteel和Clinton的回答都提供了一些非常有用的数据,但还需要进一步挖掘。正如这些答案中所述,正确编写的插件将使用hooks, 而且会有a call something like the following):

add_action(\'init\', \'function_to_add\');
第一个参数是;行动名称;您的函数(第二个参数)与之挂钩指定的操作是插件加载时间的主要决定因素有一个可选的第三个参数(优先级),它可以让您对函数在该组中的加载位置进行精确的控制。(虽然这很难精确,因为通常很难知道所有已安装插件的优先级。)有一个excellent list of all the available action hooks 以及WordPress Codex中对各种请求类型的解释。

至于second question, 如Plugin Basics documentation:

当WordPress在WordPress管理员的插件页面上加载已安装插件的列表时,它会在插件文件夹(及其子文件夹)中搜索带有WordPress插件标题注释的PHP文件。

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

作为第一次使用WordPress插件的开发者,如果你能找到这个答案(就像我一样),WordPress的Plugin Handbook.

SO网友:Yaakov Aglamaz

关于插件之间的依赖关系,我发现控制加载顺序的最简单方法是用以下代码包装init:

add\\u action(\'init\',\'init\\u first\',11);在第一个插件中。php

add\\u action(\'init\',\'init\\u second\',12);在第二个插件中。php

因此,它们加载的实际顺序可能仍然是随机的,但它们运行的顺序将由您给定的优先级决定。

雅科夫。

结束

相关推荐

Plugins_url()错误地返回带有www子域的URL

我正在开发一个插件,为了回答这个问题,我们称之为“我的插件”。我的插件目录如下所示:my-plugin/ |- image.jpg |- script.js |- script.php |- plugin.php |- ajax.php 在脚本中。php我有一段代码指定了一些JS。在其中,我需要一个ajax的URL。php。e、 g.:<script type=\"text/javascript\"> foo = jQuer