現在許多 WordPress 網站都開始講要正確加載 jQuery 、 Javascript 和 CSS 到你的 WordPress 網站。之前也分享過一篇用 wp_enqueue_script() 和 wp_enqueue_style() 加載腳本與樣式提高效率的文章。今天來一篇更詳細講解如何使用 WordPress 官方推薦的方式來加載腳本/ CSS 的文章。
有兩種常用的 add_action 鈎子可以加載 腳本和 CSS 到 WordPress:
- init: 確保始終為您的網站頭部加載腳本和 CSS(如果使用 home.php,index.php 或一個模板文件),以及其他 「前端」 文章、頁面和模板樣式。
- wp_enqueue_scripts:「適當」 的鈎子方法,並不總是有效的,根據你的 WordPress 設置。
下面的所有例子都在 WordPress 多站點模式、 WordPress 3.4.2 通過測試 (如果不支持後續版本,請留言告知)
加載外部 jQuery 庫和主題自定義的腳本、樣式
下面這個例子在 add_action 鈎子中使用 init 。使用 init 有兩個原因,一是因為我們正在註銷 WordPress 默認的 jQuery 庫,然後加載谷歌的 jQuery 庫;二是確保在 WordPress 的頭部就加載腳本和 CSS 。
使用 if ( !is_admin() ) 是為了確保這些腳本和 css 只在前端加載,不會再後台管理界面加載。
/** Google jQuery Library, Custom jQuery and CSS Files */
function myScripts() {
wp_register_script( 'google', 'http://googleajax.admincdn.com/ajax/libs/jquery/1.8.2/jquery.js' );
wp_register_script( 'default', get_template_directory_uri() . '/jquery.js' );
wp_register_style( 'default', get_template_directory_uri() . '/style.css' );
if ( !is_admin() ) { /** Load Scripts and Style on Website Only */
wp_deregister_script( 'jquery' );
wp_enqueue_script( 'google' );
wp_enqueue_script( 'default' );
wp_enqueue_style( 'default' );
}
}
add_action( 'init', 'myScripts' );
加載 WP 默認 jQuery 庫和主題自定義的腳本、樣式
第 3 行:使用 array(『jquery』) 是為了告訴 WordPress 這個 jquery.js 是依賴 WordPress 的 jQuery 庫文件,從而使 jquery.js 在 WordPress jQuery 庫文件後加載。
/** Add Custom jQuery and CSS files to a Theme */
function myScripts() {
wp_register_script( 'default', get_template_directory_uri() . '/jquery.js', array('jquery'), '' );
wp_register_style( 'default', get_template_directory_uri() . '/style.css' );
if ( !is_admin() ) { /** Load Scripts and Style on Website Only */
wp_enqueue_script( 'default' );
wp_enqueue_style( 'default' );
}
}
add_action( 'init', 'myScripts' );
加載 print.css 到你的 WordPress 主題
第 3 行:最後的 『print』 是媒體屏幕調用,確保 print.css 在網站的打印機中的文件加載時才加載。
/** Adding a Print Stylesheet to a Theme */
function myPrintCss() {
wp_register_style( 'print', get_template_directory_uri() . '/print.css', '', '', 'print' );
if ( !is_admin() ) { /** Load Scripts and Style on Website Only */
wp_enqueue_style( 'print' );
}
}
add_action( 'init', 'myPrintCss' );
使用 wp_enqueue_scripts 替換 init
如果你要在文章或頁面加載唯一的腳本,那就應該使用 wp_enqueue_scripts 替換 init 。使用 wp_enqueue_scripts 僅僅只會在前台加載腳本和 CSS,不會在後台管理界面加載,所以沒必要使用 !is_admin() 判斷。
使用 is_single() 只在文章加載腳本或 CSS
第 3 行的 # 替換為文章的 ID 就可以讓腳本和 css 只加載到那篇文章。當然,如果直接使用 is_single()(不填 ID),就會在所有文章加載腳本和 CSS 。
/** Adding Scripts To A Unique Post */
function myScripts() {
if ( is_single(#) ) { /** Load Scripts and Style on Posts Only */
/** Add jQuery and/or CSS Enqueue */
}
}
add_action( 'wp_enqueue_scripts', 'myScripts' );
使用 is_page() 只在頁面加載腳本或 CSS
第 3 行的 # 替換為頁面的 ID 就可以讓腳本和 css 只加載到那個頁面。當然,如果直接使用 is_single()(不填 ID),就會在所有頁面加載腳本和 CSS 。
/** Adding Scripts To A Unique Page */
function myScripts() {
if ( is_page(#) ) { /** Load Scripts and Style on Pages Only */
/** Add jQuery and/or CSS Enqueue */
}
}
add_action( 'wp_enqueue_scripts', 'myScripts' );
使用 admin_enqueue_scripts 加載腳本到後台
這個例子將在整個後台管理界面加載腳本和 CSS 。這個方法不推薦用在插件上,除非插件重建了整個後台管理區。
第 10 行使用 admin_enqueue_scripts 替換了 init 或 wp_enqueue_scripts
第 5 、 6 行,如果你要自定義後台管理區,你可以需要禁用默認的 WordPress CSS 調用。
/** Adding Scripts To The WordPress Admin Area Only */
function myAdminScripts() {
wp_register_script( 'default', get_template_directory_uri() . '/jquery.js', array('jquery'), '' );
wp_enqueue_script( 'default' );
//wp_deregister_style( 'ie' ); /** removes ie stylesheet */
//wp_deregister_style( 'colors' ); /** disables default css */
wp_register_style( 'default', get_template_directory_uri() . '/style.css', array(), '', 'all' );
wp_enqueue_style( 'default' );
}
add_action( 'admin_enqueue_scripts', 'myAdminScripts' );
加載腳本和 CSS 到 WordPress 登錄界面
第 6 行:我無法弄清楚如何在在登錄頁面註冊/排序 CSS 文件,所以這行手動添加樣式表。
第 10-14 行:用來移除 WordPress 默認的樣式表。
/** Adding Scripts To The WordPress Login Page */
function myLoginScripts() {
wp_register_script( 'default', get_template_directory_uri() . '/jquery.js', array('jquery'), '' );
wp_enqueue_script( 'default' );
?>
<link rel='stylesheet' id='default-css' href='<?php echo get_template_directory_uri() . '/style.css';?>' type='text/css' media='all' />
<?php }
add_action( 'login_enqueue_scripts', 'myLoginScripts' );
/** Deregister the login css files */
function removeScripts() {
wp_deregister_style( 'wp-admin' );
wp_deregister_style( 'colors-fresh' );
}
add_action( 'login_init', 'removeScripts' );
加載腳本和 CSS 到 WordPress 插件
WordPress 插件加載腳本和 CSS 也是常見的。主要的不同之處在於文件的 URL 。主題使用的是 get_template_directory_uri ,而插件應該用 plugins_url ,因為文件是從插件目錄進行加載的。
從插件加載腳本和 CSS
這個例子將在整個網站前端加載腳本和 CSS 。
/** Global Plugin Scripts for Outside of Website */
function pluginScripts() {
wp_register_script( 'plugin', plugins_url( 'jquery.js' , __FILE__ ), array('jquery'), '' );
wp_register_style( 'plugin', plugins_url( 'style.css' , __FILE__ ) );
if ( !is_admin() ) { /** Load Scripts and Style on Website Only */
wp_enqueue_script( 'plugin' );
wp_enqueue_style( 'plugin' );
}
}
add_action( 'init', 'pluginScripts' );
從插件加載腳本和 CSS 到後台管理區
如果你需要在整個後台管理區加載腳本和 CSS,就使用 admin_enqueue_scripts 替換 init 。
/** Global Plugin Scripts for The WordPress Admin Area */
function pluginScripts() {
wp_register_script( 'plugin', plugins_url( 'jquery1.js' , __FILE__ ), array('jquery'), '' );
wp_enqueue_script( 'plugin' );
wp_register_style( 'plugin', plugins_url( 'style1.css' , __FILE__ ) );
wp_enqueue_style( 'plugin' );
}
add_action( 'admin_enqueue_scripts', 'pluginScripts' );
從插件加載腳本和 CSS 到插件設置頁面
例子只會加載所需的腳本和 CSS 到插件設置頁面,不會在管理區的其他頁面加載。
第 3 行:自定義 page= 後面的值為你的插件設置頁面
/** Adding Scripts On A Plugins Settings Page */
function pluginScripts() {
if ( $_GET['page'] == "plugin_page_name.php" ) {
wp_register_script( 'plugin', plugins_url( 'jquery.js' , __FILE__ ), array('jquery'), '' );
wp_enqueue_script( 'plugin' );
wp_register_style( 'plugin', plugins_url( 'style.css' , __FILE__ ) );
wp_enqueue_style( 'plugin' );
}
}
add_action( 'admin_enqueue_scripts', 'pluginScripts' );
將 jQuery 庫移動到頁腳
你不能將 WordPress 默認的 jQuery 庫移動到頁面底部,但是你可以將自定義的 jQuery 或其他外部 jQuery 庫 (比如 Google 的) 移動到底部。不要將 CSS 移動到頁面底部。
第 3 、 4 行:最後的 『true』 告訴 WordPress 在頁面底部加載這些腳本。
/** Moves jQuery to Footer */
function footerScript() {
wp_register_script('jquery', ("http://googleajax.admincdn.com/ajax/libs/jquery/1.8.2/jquery.js"), false, '', true );
wp_register_script( 'default', get_template_directory_uri() . '/jquery.js', false, '', true );
if ( !is_admin() ) { /** Load Scripts and Style on Website Only */
wp_deregister_script( 'jquery' );
wp_enqueue_script( 'jquery' );
wp_enqueue_script( 'default' );
}
}
add_action( 'init', 'footerScript' );
根據不用的用户角色和功能加載 jQuery 和 CSS
如果你的網站有作者、編輯和其他管理員,你可能需要通過 jQuery 來為他們顯示不同的信息。你需要使用 current_user_can 確定登錄的用户的角色和功能 。
下面三個例子中,如果用户已經登錄,將在整個網站加載這些腳本和 CSS 。使用 !is_admin() 包裝 enqueue_script 確保只在前台加載,或者在 add_action 使用 admin_enqueue_scripts 就可以確保只在後台管理區加載。
為可以 「編輯文章」 的管理員加載腳本和 CSS
只對超級管理員和網站管理員生效
/** Add CSS & jQuery based on Roles and Capabilities */
function myScripts() {
if ( current_user_can('edit_posts') ) {
/** Add jQuery and/or CSS Enqueue */
}
}
add_action( 'init', 'myScripts' );
為所有登錄用户加載腳本和 CSS
/** Admins / Authors / Contributors / Subscribers */
function myScripts() {
if ( current_user_can('read') ) {
/** Add jQuery and/or CSS Enqueue */
}
}
add_action( 'init', 'myScripts' );
為管理員以外的已登錄用户加載腳本和 CSS
/** Disable for Super Admins / Admins enable for Authors / Contributors / Subscribers */
function myScripts() {
if ( current_user_can('read') && !current_user_can('edit_users') ) {
/** Add jQuery and/or CSS Enqueue */
}
}
add_action( 'init', 'myScripts' );
最後的提示
上面的很多例子如果使用相同的 add_action,就可以被合併成一個單一的函數。
換句話説,您可以使用多個 if 語句在一個函數中分裂了你的腳本和 CSS 調用,如:if_admin!if_admin,is_page,is_single 和 current_user_can 的,因為每次使用相同的 add_action 的 init 。
參考原文 (有刪改):http://technerdia.com/1789_include-jquery-css.html