如何使用wp_enQueue_脚本通过本地回退从CDN加载js和style资源?

时间:2013-11-11 作者:bobkennedy

我很难找到正确的方法来做这件事。我想在此处加载CDN资源:http://www.bootstrapcdn.com/ 但是使用wp_enqueue_scripts 并有本地后备。

这是我现在直接在标题中用于局部回退的方法。php:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script>window.jQuery || document.write(\'<script src="js/jquery.js">\\x3C/script>\')</script>
我希望所有资源都使用类似的内容,但也要使用wp\\u enqueue\\u脚本。我使用此方法成功切换了enqueue Jquery,但这并没有提供回退:

/** Jquery **/
wp_deregister_script( \'jquery\' );
wp_register_script( \'jquery\', \'//ajax.googleapis.com/ajax/libs/jquery/1.5./jquery.min.js\',\'\', \'latest\', true );
wp_enqueue_script(\'jquery\',\'\',\'\',true);
非常感谢您的帮助!

2 个回复
SO网友:Larzan

由于4.5中有一个函数允许您将内联js附加到排队的js文件中,因此称为wp_add_inline_script.

现在,此函数不允许添加任何具有</script> 出于安全原因。但当您查看wp\\u add\\u inline\\u脚本源代码时,可以看到它只是wp_scripts()->add_inline_script() 使用一些添加的字符串分析调用恶意字符串。

因此,如果您不介意直接使用此函数,而不需要添加wp\\u add\\u inline\\u脚本的安全层,该脚本会解析安全问题(只需</script> 现在检查,但将来可能会更多)然后您可以执行以下操作:

function _enqueue_my_scripts() {
  // the normal enqueue
  wp_enqueue_script( \'jquery-cdn\', \'https://code.jquery.com/jquery-3.3.1.min.js\' );
  // our custom code which will check for the existance of jQuery (in this case)
  wp_scripts()->add_inline_script( \'jquery-cdn\',
    "window.jQuery || document.write(\'<script src=\\"".get_template_directory_uri() ."/js/jQuery.js\\">\\\\x3C/script>\')", \'after\');
}
add_action(\'wp_enqueue_scripts\', \'_enqueue_my_scripts\', 100);
请确保准确复制wp\\u scripts()调用,并且只为要测试的库的测试和\'/js/jQuery\'切换出库测试(\'window.jQuery\')。js的一部分是库的路径,因为字符串在输出之前会被解析,只有这样才能以正确的方式打印出来。

上面的代码将为您提供

<script type=\'text/javascript\' src=\'https://code.jquery.com/jquery-3.3.1.min.js\'></script>
<script type=\'text/javascript\'>
window.Swiper || document.write(\'<script src="http://localhost/wordpress/wp-content/themes/wp-theme/js/jQuery.js">\\x3C/script>\')
</script>
在HTML中。

SO网友:Ivan Hanák

切换您的功能wp_register_script 立即致电wp_enqueue_script.

现在,即使您正在注册jquery并通过wp_enqueue_script, 您正在作为URL空字符串传递,这就是为什么您没有将其排入队列。

结束

相关推荐

W3缓存、CDN、主题文件合计

我更新了样式。我最近安装的WordPress的css文件。更改是有效的:当以管理员身份登录时(我的博客设置为,管理员永远不会收到网站的缓存版本,而是“实时”版本),我可以看到它们。但我的博客是通过CDN(使用W3 Total缓存)提供的。通过CDN,更改是无效的:CDN不服务于“我的主题”中修改过的文件。即使我在修改后上传了它们(仪表板>性能>CDN>上传主题文件)。我的CDN运行在AmazonCloud前端。并且在W3 Total缓存上禁用了Minify。通过我的CDN提供的主题文件是