scribble

守望的麦子

About Projects Tool Guestbook

23 Sep 2009
WP插件是如何调用JS和CSS的

稳健的程序代码和丰富的插件扩展造就了WP的今天,也有的人说用WP就是玩插件,可见WP插件的重要性!如今越来越多的插件借助JS和CSS来实现强有力的功能扩展。将插件中的javascript和css放置到分离的文件中是非常重要的,因为那样做会使插件维护起来更加容易。那么WP插件是如何调用javascript和CSS文件的呢?

在WordPress 2.8出来后,很多插件出现了兼容性的问题,根本原因就在于引入JS文件的时候出现了问题。

WordPress中如果要引入script有两个相关函数:

1
wp_register_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false );

wp_register_script函数的作用是注册要调用的脚本,而且可以设置脚本所依赖的框架(必须是WordPress默认注册的框架)。

handle是一个惟一的名字,如果以后再要引用这个脚本,则必须使用这个名字。唯一的参数。

src是脚本文件的绝对路径,这个参数也是必须置顶的。

deps是一个数组,表明你的脚本需要依赖哪些库,比如jquery,prototype等。此为可选参数

ver是一个字符串,标明脚本的版本。也是可选的。

in_footer是WordPress2.8里面才添加的参数,默认为FALSE,链接放在head里面。如果为TRUE的话,那么脚本链接将添加在页面的底部,如果脚本比较大的话,能够加快页面的加载速度,提高用户的浏览体验。

举一个例子:

1
wp_register_script( 'kay_js', WP_PLUGIN_URL. 'kay/js/script.js', array('jquery'), '1.0');

wp_register_script函数只注册脚本,在运行的时候并不会让脚本装载到页面。我们还需要wp_enqueue_script函数:

1
wp_enqueue_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false );

wp_enqueue_script函数除了src参数为可选外,其它的参数都是一样的。如果提供了src参数的话,则会自动为你自动注册该脚本,相当于先调用了wp_register_script。

1
wp_enqueue_script( 'kay_js');

这样就可以在加载的队列里面加入该脚本了。由于wp_enqueue_script会自动注册,上面两条语句可以合做一条:

1
2
wp_enqueue_script( 'kay_js', WP_PLUGIN_URL. 'kay/js/script.js',
array('jquery'), '1.0');

在合适的时候调用这些函数就是一个最关键的问题了,在WordPress 2.7.1中注册到wp_head中可以执行,但是在2.8里面就无法正常运行了。查阅了文档发现对于脚本来说应该注册到wp_print_scripts才能够确保执行。

代码如下:

1
2
3
4
5
6
7
8
class kay {
    function add_jsfile() {
        wp_register_script( 'kay_js', WP_PLUGIN_URL. 'kay/js/script.js', array('jquery'), '1.0');
        wp_enqueue_script( 'kay_js');
    }
}
$kay = new kay();
add_action('wp_print_scripts', array(&$kay, 'add_jsfile'));

这样在页面就可以正常加载js文件了。对于css文件来说,与js文件完全类似,只不过函数名称稍微变化一下,没有依赖的框架而已。如:

1
2
3
4
5
6
7
8
class kay {
    function add_cssfile() {
        wp_register_style( 'kay_css', WP_PLUGIN_URL. 'kay/js/script.js', array('jquery'), '1.0');
        wp_enqueue_style( 'kay_css');
    }
}
$kay = new kay();
add_action('wp_print_styles', array(&$kay, 'add_cssfile'));

此外还有一种笨办法可以使页面加载文件,那就是在wp_head文件里面直接echo了,如:

1
2
3
4
5
6
function echo_js() {
    echo "<script src="url-to-your-js-file.js" type="text/javascript"></script>";
        echo "<link href="url-to-your-css-file.css" type="text/css"/>";
        echo "<style type="text/css">.btn{border-width:1px}</style>"
}
add_action('wp_head', echo_js);

最后这种方法还是不推荐的,能够选用前面的方法还是选用前面的方法,兼容性更好。

Til next time,
Jason at 00:00

scribble

About Projects Tool Guestbook