函數説明

使用 wp_enqueue_script() 函數安全的將 JavaScript 腳本添加到 WordPress 生成的頁面。 wp_enqueue_script() 函數會加載未被加載的腳本,並安全的處理依賴關係。

函數用法

<?php 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) 通常腳本位於

區域。如果 $in_footer 參數設置為 true,腳本會位於底部。 $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 文件。

function my_scripts_method() {
	wp_deregister_script( 'jquery' );
	wp_register_script( 'jquery', 'http://googleajax.admincdn.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');

上述代碼只在前端頁面加載 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() 函數。例如:

$(document).ready(function(){
	$(#somefunction) ...
});

變成:

jQuery(document).ready(function(){
	jQuery(#somefunction) ...
});

為了使用 jQuery 默認的 shortcut $,你可以使用如下封裝代碼:

jQuery(document).ready(function($) {
	// $() will work as an alias for jQuery() inside of this function
});

上述封裝將導致你的代碼在頁面加載完成後執行。 $會調用 jQuery 。如果你想讓代碼立即執行,你可以使用下面的封裝方法:

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

源文件

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