用wp_enqueue_script()和wp_enqueue_style()加载脚本与样式提高效率

但是我们一般不建议直接去修改主题的 header.php,或者添加代码到 wp_head() 或 wp_footer() 钩子上,而是要使用
WordPress 官方文档建议使用的 WP 内建的wp_enqueue_script() 和 wp_enqueue_style() 等函数进行操作。


函数:wp_enqueue_script()

函数用法:

参数解释:

$handle:用于区别 JS 名称,即标识字串 (string);

$src:JS 的文件 URL (string);

$deps:加载的 JS 所依存的其他 JS 标识字串数组 (array:string, 非必需);

$ver:JS 的版本号,留空则使用当前 WP 版本号 (string, 非必需);

$in_footer:是否放置到网页 HTML 底部加载 (boolean, 非必需)。

函数:wp_enqueue_style()

函数用法:

<?php wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer ); ?>

参数解释:

$handle:用于区别 CSS 的名称,即标识字串 (string);

$src:CSS 的文件 URL (string);

$deps:加载的 CSS 所依存的其他 CSS 标识字串数组 (array:string, 非必需);

$ver:CSS 文件的版本号,留空则使用当前 WP 版本号 (string, 非必需);

$media:用于加载 CSS 的头部标签 link 的 media 参数值 (string, 非必需)。

示例:

<?php
function my_enqueue_scripts() {
if( !is_admin ) { // 前台加载的脚本与样式表
// 去除已注册的 jquery 脚本
wp_deregister_script( 'jquery' );
// 注册 jquery 脚本
wp_register_script( 'jquery', get_template_directory_uri() . '/js/jquery.js', false, '1.0', false );
// 提交加载 jquery 脚本
wp_enqueue_script( 'jquery' );
 } 
} 
// 添加回调函数到 init 动作上
add_action( 'init', 'my_enqueue_scripts' );
?>

在以往我们制作 WP 主题的时候,当引入 JS 文件或 CSS 文件时,通常是直接编辑 header.php 文件,然后将相应的页面头部 HTML
代码添加进去。或者利用 wp_head() 函数钩子插入 HTML 代码。

遇到一个插件或主题功能比较多的 WordPres 网站时,如果仍使用自行插入代码的方式引入 JS / CSS,将可能导致 JS 的重载和 CSS
的重定义或覆盖的后果。而使用 wp_enqueue_script() 和wp_enqueue_style() 等函数操作头部引用,将输出 HTML
语句的工作交给 WP 内核去完成(几乎所有插件都这么做),不仅能够避免重复加载的现象出现,也可实现按 PHP 脚本顺序,任意修改、覆盖、删除即将被加载的 JS
文件和 CSS 文件。

另外一个函数:wp_print_scripts()

虽然将 JavaScript 文件都放到页面末尾加载对于页面加载速度很有帮助,但是请注意,所谓页面末尾指的是在 WordPress 的
wp_footer() 函数中调用,这个函数通常刚好位于页面的 标签前面(当然是末尾了)。

有时候我们可能会在 wp_footer 函数出现之前就需要用到某些 JavaScript,比如 jquery.js 文件。

这样的情况也是很常见的。比如我单独创建了一个链接页面,在这个页面中我使用了 jQuery 方法来获取链接网站的
favicon。很显然,我只需要在这唯一一个页面使用这部分代码,所以将这段代码直接放在这个页面模板中是最好的做法。

问题来了:这部分内容显然是在 wp_footer 之前出现的,那么这段代码就在 jquery.js 文件之前出现了,导致该代码段实际上无法工作,因为调用
jQuery 方法的代码段必须比 jquery.js 文件后加载。

那么如何处理这种特殊情况呢?其实也很简单。以上面的情景为例,既然我们需要先调用 jquery.js 文件,那我们就在该代码段之前直接输出需要的
jquery.js 文件,不使用 wp_enqueue_script() 函数,而改用wp_print_scripts() 函数。

wp_enqueue_script() 与 wp_print_scripts() 的区别是:wp_enqueue_script() 是告诉
WordPress “我在这个页面上需要用到某个 JavaScript 文件,你可要记得加载啊”。WordPress 默认在 wp_head()
中处理,而我们改为在 wp_footer() 中处理。wp_print_scripts() 则直接在你使用此方法的位置输出需要的 JavaScript
文件,而不是加入到 WordPress 的处理任务中。

如果我们在页面的中间使用,

<?php wp_print_scripts('jquery'); ?>

直接输出了 jquery.js 文件(通常是其压缩版本 jquery.min.js),那么即使其它的插件或者什么东西使用,

<?php wp_enqueue_script('jquery'); ?>

告诉 WordPress 需要加载 jquery.js,WordPress 在 wp_footer()
中处理的时候也会先检查前面是不是已经有了,如果有了就不会再重新加载一次。

在 WordPress 中加载 JavaScript 最好使用 wp_enqueue_script()
函数以减少问题提高效率。如果不是有这些特殊情况要处理,使用 Autoptimize
插件显然比较好,它全面完成任务而且使用简单。但是如果使用的主题本身已经很简洁了,那么
直接把JavaScript脚本放在footer或者使用:JavaScript to Footer(后台搜索即可安装)更简单高效,也就更好。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索javascript
, string
, 文件
, 函数
, wordpress
代码
wp enqueue script、wp enqueue style、style script、latex scriptstyle、free style script,以便于您获取更多的相关知识。

时间: 2016-04-15

用wp_enqueue_script()和wp_enqueue_style()加载脚本与样式提高效率的相关文章

JavaScript 动态加载脚本和样式

  3大点: 1.元素位置 2.动态脚本 3.动态样式     一.元素位置 getBoundingClientRect().这个方法返回一个矩形对象,包含四个属性:left.top.right和bottom.分别表示元素各边与页面上边和左边的距离. var box = document.getElementById('box');//获取元素 alert(box.getBoundingClientRect().top);//元素上边距离页面上边的距离 alert(box.getBounding

JavaScript 动态加载脚本和样式的方法_javascript技巧

一 动态脚本 当网站需求变大,脚本的需求也逐步变大;我们不得不引入太多的JS脚本而降低了整站的性能; 所以就出现了动态脚本的概念,在适时的时候加载相应的脚本; 1.动态引入js文件 var flag = true; if(flag){ loadScript('browserdetect.js'); // 调用函数,引入路径; } function loadScript(url){ var script = document.createElement('script'); // 创建script

动态加载脚本提升javascript性能

 动态加载脚本可以有效提升javascript性能,下面有个不错的示例,大家可以参考下 通过文档对象模型(DOM),几乎可以用Javascript动态创建HTML中的所有 内容.其根本在于,<script>标签与页面中的其他元素并无差异:都能通过DOM引用,都能在文档中移动.删除,甚至被创建.用标准的DOM方法可以非常容易地创建一个新年的<script>元素:   代码如下: <script type="text/javascript">  var

JS动态加载脚本并执行回调操作_javascript技巧

关于在javascript里面加载其它的js文件的问题可能很多人都遇到过,但很多朋友可能并不知道怎么判断我们要加载的js文件是否加载完成,如果没有加载完成我们就调用文件里面的函数是不会成功的.本文讲解怎么在js中加载其它js文件并在加载完成后执行回调函数.  我们可以动态的创建 <script> 元素,然后通过更改它的 src 属性来加载脚本,但是怎么知道这个脚本文件加载完成了呢,因为我们有些函数需要在脚本加载完成生效后才能开始执行. 经过对网络上资源的搜索,我发现在 IE 浏览器中可以使用

无阻塞加载脚本分析[全]_javascript技巧

由于浏览器是单线程的,因此脚本在载的时候会阻塞下载其它资源:虽然在现在浏览器已经有所改善,但仍然有待改进. 很显然,脚本必须按顺序执行,但没有必要按顺序下载,解决方法: 1.内嵌JS 通常由于页面大小和缓存能带来更多好处,因此外部文件引入JS更好一些: 在少数情况下,比如首页.少量JS情况下尚可接受. 2.XHR Eval 通过XMLHttpRequest从服务器端获取脚本. 主要缺陷是,通过XHR获取的脚本必须部署在和主页面相同的域中. 复制代码 代码如下: Ajax.get("test.js

WebKit 中异步加载脚本(Running scripts in WebKit)- 大大提升界面呈现速度

WebKit 中异步加载脚本(Running scripts in WebKit)- 大大提升界面呈现速度 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. Running scripts in

jquery ajax()动态加载脚本文件的例子

上次说的jquery动态加载脚本,使用的是getScript(您可以点击相关文章查看),缺点和优点都说了.封装的函数是不自带缓存功能的,默认每次加载都刷新本地脚本.这样的一个特点对于网速不是很快的网站来说,那就是一个漫长的等待,虽然页面已经加载完毕了,但脚本还在路上,访客会以为脚本加载失败,就会反复的刷新页面,结果每次加载脚本都是重新获取的,造成资源的中断和大量的服务器请求.为了解决这个问题,我自己写了个方法,哈哈,当然是根据getScript把ajax方法打包到一个函数里便于多次复用. <!D

超级强大JS动态加载脚本同时使用加载js文件函数调用

    首先我们需要一个被加载的js文件,我在一个固定文件夹下创建了一个package.js,打开后在里面写一个方法functionOne,很简单,代码如下: function functionOne(){     alert("成功加载"); }         后面的html文件都创建在同一个目录下. 方法一:直接document.write 在同一个文件夹下面创建一个function1.html,代码如下: <html> <head>     <ti

Javascript 加载和执行-性能提高篇_javascript技巧

Js的阻塞性 Javascript 在浏览器中的性能问题,可能是最重要的可用性问题 Js的阻塞性 浏览器用单一进程来处理UI进程和Js的执行 不管是内嵌的还是外链的,下载并立即执行 因为它有可能会修改页面 页面生存周期的概念 瀑布图中看到了下载时间和executing time 在head中加入script 和link body加载到前不会输出任何东西,因此会看到空白页面 复制代码 代码如下: <script type="text/javascript"> document