加载要在插件中使用的Modinizr(或其他JavaScript库)

时间:2012-08-19 作者:Geert

下载的副本Modernizr, 将它放在插件的目录中,只要在需要时将脚本排入队列即可。完成。

问题是现代化may already be loaded by another plugin. 您不想多次加载它。在您自己排队之前,如何确定Modernizer是否已经可用?这适用于任何其他JavaScript库。

你可以check whether a script was loaded 通过使用wp_script_is() 作用但是,该函数要求name of the handle 脚本已由注册。你只能猜测,对吗?即使我们假设句柄名称只是“modernizr”,您如何检查某个版本(如2.6.1)?更糟糕的是,既然定制的Modernizr构建是可能的,那么如何检查所需的功能是否包括在内?

整体wp_enqueue_script() 对于默认情况下随WordPress附带的库,如jQuery、jQuery UI、Thickbox等,安装程序运行良好。Their handle names are documented 而且你知道应该是哪个版本。当然,WordPress并没有为所有JavaScript库提供这样的主文件。

我是否遗漏了一些东西,或者这只是开发插件时必须处理的混乱情况?

3 个回复
最合适的回答,由SO网友:Ryan Street 整理而成

wp_enqueue_script() 利用WP_Scripts 类,它扩展了WP_Dependencies 班如果您签出该类,您将在顶部看到一组数组。因此,您可以实际循环遍历排队脚本列表,如下所示:

global $wp_scripts; // If inside a function

foreach($wp_scripts->queue as $script) {
    // Do some tomfoolery here... ;)
}
此外,如果您使用wp_enqueue_script(), 它不会多次加载脚本。它实际上是检查它是否已排队,所以我认为上面的内容无论如何都是没有意义的。很高兴知道这两种情况。

参考文献:

http://core.trac.wordpress.org/browser/tags/3.4.1/wp-includes/functions.wp-scripts.php

http://core.trac.wordpress.org/browser/trunk/wp-includes/class.wp-dependencies.php

http://codex.wordpress.org/Function_Reference/wp_enqueue_script

SO网友:Wyck

如果插件写得好,应该使用wp_enqueue_script() 从而解决您的问题。

如果插件写得不好,并以另一种方式加载,那么您将不得不使用一些黑客解决方案来匹配名称、版本、标题或其他更奇特的内容。无法控制人们编写插件的方式,尤其是在更改文件名时。

您还可以检查是否使用javscript加载了Modernizer。

SO网友:Daniel Chatfield

只要两个插件作者都遵循标准,这真的不重要。我假设您所说的是管理部分的排队。这两个插件应该只在它们的管理页面上排队,这样就不会发生冲突。即使是这样,也不是世界末日,因为加载2个副本不会导致JavaScript错误,您可以检查加载了哪个版本的modernizrModernizr._version.

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register