WordPress函数 / Function Reference / wp_enqueue_script


描述


使用wp_enqueue_script()函数安全的将JavaScript脚本添加到WordPress生成的页面。wp_enqueue_script()函数会加载未被加载的脚本,并安全的处理依赖关系。


用法



1

wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );

使用wp_enqueue_scripts动作调用wp_enqueue_script()函数,或者使用admin_enqueue_scripts动作在管理页面调用wp_enqueue_script()函数,或者使login_enqueue_scripts动作在登录页面调用wp_enqueue_script()函数。


参数


$handle

(string) (required) 脚本名称,使用小写字母。

Default: None


$src

(string) (optional) 脚本的链接。例如:”http://example.com/wp-includes/js/scriptaculous/scriptaculous.js”。$src参数仅在WordPress没有内置当前时是必填项,$src参数是必填项。 你不需要写死脚本链接,针对插件使用plugins_url()函数,针对主题使用get_template_directory_uri()函数获取正确的链接。

Default: false


$deps

(array) (optional) 当前脚本依赖的脚本数组(必须在当前脚本之前加载)。如果没有依赖关系则$deps参数失效。$deps参数仅在WordPress没有内置当前脚本时是必填项。

Default: array()


$ver

(string) (optional) 指定脚本版本号的字符串,如果设置$ver参数,WordPress会自动把$ver参数作为查询字符串连接到路径末尾。默认为false。如果$ver参数没有设置或者设置为false,WordPress会自动把当前WordPress的版本号连接到路径末尾。如果$ver参数设置为null则不添加版本信息。$ver参数用于确保传递给客户端的正确版本不受缓存影响,因此让脚本附加版本号是有道理的。


$in_footer

(boolean) (optional) 通常脚本位于<head>区域。如果$in_footer参数设置为true,脚本会位于<body>底部。$in_footer参数需要主题在适当的位置有wp_footer()钩子。请注意,您必须在wp_head运行之前加载当前脚本,即使脚本放置在页脚。

Default: false


返回值


(void) wp_enqueue_script()函数无返回值。


举例


请注意:如果使用wp_head或wp_print_scripts动作钩子调用wp_enqueue_script()函数,则wp_enqueue_script()函数不会运行,js脚本需要在这些动作钩子运行前载入。参考上面的用法章节正确使用钩子。


从一个非WordPress默认位置加载默认WordPress脚本


请注意:不推荐主题强制默认使用第三方提供服务的JavaScript或CSS文件,这么做会让用户依赖于一个不受用户控制的外部主机。一个更好的选择是使用/推荐一个插件,例如:Use Google Libraries插件,此插件自动使用Google-CDN提供的和WordPress同一版本的jQuery,最终降低又主题或插件中写死文件造成的破坏风险。


警告:在插件中使用卸载WordPress内置的脚本的方法将被拒绝执行。


假设你要使用CDN的jQuery版本替换 WordPress内置版本,将如下代码添加到functions.php文件。



WordPress函数:wp_enqueue_script

function my_scripts_method() {

wp_deregister_script( 'jquery' );

wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js');

wp_enqueue_script( 'jquery' );

}

 

add_action('wp_enqueue_scripts', 'my_scripts_method');

通过使用wp_enqueue_scripts钩子(替代许多文章引用的init钩子)避免在管理页面注册jQuery脚本,这将导致在经常升级后编辑文章中断。


加载 scriptaculous 脚本




function my_scripts_method() {

wp_enqueue_script('scriptaculous');

}

 

add_action('wp_enqueue_scripts', 'my_scripts_method'); // For use on the Front end (ie. Theme)

上述代码只在前端页面加载Scriptaculous脚本库,如果你需要在管理页面加载,可以使用admin_enqueue_scripts动作钩子调用,但是脚本会在所有管理页面载入,这样往往会导致插件/核心冲突,最终破坏WordPress的管理体验。相反,你应该只在你需要的单独页面加载脚本,参考只在插件的页面部分加载脚本的例子。


加载依赖于 Scriptaculous 的脚本


加载一个依赖于Scriptaculous的新脚本。这将导致WordPress在加载当前脚本前先将Scriptaculous脚本加载到页面。




function my_scripts_method() {

wp_enqueue_script(

'newscript',

plugins_url('/js/newscript.js', __FILE__),

array('scriptaculous')

);

 

add_action('wp_enqueue_scripts', 'my_scripts_method');

从取决于一个WordPress脚本的主题加载脚本


主题中的JavaScript脚本在加载前通常需要加载其他JavaScript脚本。WordPress提供了一个在注册脚本时标记依赖关系的API。例如,下面的主题中的custom_script JavaScript脚本需要先加载jQuery脚本:




function my_scripts_method() {

wp_enqueue_script(

'custom-script',

get_template_directory_uri() . '/js/custom_script.js',

array('jquery')

);

}

add_action('wp_enqueue_scripts', 'my_scripts_method');

仅在插件页面加载脚本


add_action( 'admin_init', 'my_plugin_admin_init' );

add_action( 'admin_menu', 'my_plugin_admin_menu' );

 

function my_plugin_admin_init() {

/* Register our script. */

wp_register_script( 'my-plugin-script', plugins_url('/script.js', __FILE__) );

}

 

function my_plugin_admin_menu() {

/* Register our plugin page */

$page = add_submenu_page( 'edit.php', // The parent page of this menu

__( 'My Plugin', 'myPlugin' ), // The Menu Title

__( 'My Plugin', 'myPlugin' ), // The Page title

'manage_options', // The capability required for access to this item

'my_plugin-options', // the slug to use for the page in the URL

'my_plugin_manage_menu' // The function to call to render the page

);

 

/* Using registered $page handle to hook script load */

add_action('admin_print_scripts-' . $page, 'my_plugin_admin_scripts');

}

 

function my_plugin_admin_scripts() {

/*

* It will be called only on your plugin admin page, enqueue our script here

*/

wp_enqueue_script( 'my-plugin-script' );

}

 

function my_plugin_manage_menu() {

/* Output our admin page */

}

jQuery 无冲突模式封装


请注意:WordPress内置jQuery脚本库加载使用无冲突模式,这是为了防止与其他WordPress可以加载的JavaScript库的兼容性问题。


无冲突模式下,$()函数无效,使用jQuery()函数。例如:



1

2

3

$(document).ready(function(){

$(#somefunction) ...

});

变成:



1

2

3

jQuery(document).ready(function(){

jQuery(#somefunction) ...

});

为了使用jQuery默认的shortcut $,你可以使用如下封装代码:



1

2

3

jQuery(document).ready(function($) {

// $() will work as an alias for jQuery() inside of this function

});

上述封装将导致你的代码在页面加载完成后执行。$会调用jQuery。如果你想让代码立即执行,你可以使用下面的封装方法:



1

2

3

(function($) {

// $() will work as an alias for jQuery() inside of this function

})(jQuery);

WordPress内置脚本


Script Name Handle 所需依赖 *

Image Cropper Image cropper (not used in core, see jcrop)

Jcrop Image copper

SWFObject swfobject

SWFUpload swfupload

SWFUpload Degrade swfupload-degrade

SWFUpload Queue swfupload-queue

SWFUpload Handlers swfupload-handlers

jQuery jquery json2 (for AJAX calls)

jQuery Form jquery-form jquery

jQuery Color jquery-color jquery

jQuery UI Core jquery-ui-core (Just the base core.) jquery

jQuery UI Widget jquery-ui-widget jquery

jQuery UI Mouse jquery-ui-mouse jquery

jQuery UI Accordion jquery-ui-accordion jquery

jQuery UI Autocomplete jquery-ui-autocomplete jquery

jQuery UI Slider jquery-ui-slider jquery

jQuery UI Tabs jquery-ui-tabs jquery

jQuery UI Sortable jquery-ui-sortable jquery

jQuery UI Draggable jquery-ui-draggable jquery

jQuery UI Droppable jquery-ui-droppable jquery

jQuery UI Selectable jquery-ui-selectable jquery

jQuery UI Datepicker jquery-ui-datepicker jquery

jQuery UI Resizable jquery-ui-resizable jquery

jQuery UI Dialog jquery-ui-dialog jquery

jQuery UI Button jquery-ui-button jquery

jQuery Schedule schedule jquery

jQuery Suggest suggest jquery

ThickBox thickbox

jQuery Hotkeys jquery-hotkeys jquery

Simple AJAX Code-Kit sack

QuickTags quicktags

Farbtastic (color picker) farbtastic jquery

ColorPicker (deprecated) colorpicker jquery

Tiny MCE tiny_mce

Autosave autosave

WordPress AJAX Response wp-ajax-response

List Manipulation wp-lists

WP Common common

WP Editor editor

WP Editor Functions editor-functions

AJAX Cat ajaxcat

Admin Categories admin-categories

Admin Tags admin-tags

Admin custom fields admin-custom-fields

Password Strength Meter password-strength-meter

Admin Comments admin-comments

Admin Users admin-users

Admin Forms admin-forms

XFN xfn

Upload upload

PostBox postbox

Slug slug

Post post

Page page

Link link

Comment comment

Threaded Comments comment-repy

Admin Gallery admin-gallery

Media Upload media-upload

Admin widgets admin-widgets

Word Count word-count

Theme Preview theme-preview

JSON for JS json2

Plupload plupload

 备注


参考 WP_Scripts::add_data(), WP_Scripts::enqueue()

使用全局变量:(unknown type) $wp_scripts

jQuery UI Effects 不包括在 jquery-ui-core

从 WordPress 3.3 起,wp_enqueue_script()函数可以在页面中被调用(在HTML body内)。这样会在页面底部加载脚本。


更改日志


Since: 2.6 (BackPress version: r16)


源文件


wp_enqueue_script() 位于 wp-includes/functions.wp-scripts.php