正確加載 CSS 到 WordPress

wpdaxue.com/loading-css-into-wordpress.html

倡萌之前分享過《正確加載 Javascript 和 CSS 到 WordPress》,今天分享一篇詳細解說正確加載 CSS 的文章。

沒有CSS,你只能很有限地風格化你的網頁。而如果沒有在WordPress包含適當的 CSS,將讓你的主題用戶很難自定義主題的樣式。

在本教程中,我們將看看以正確的方式來排隊加載 CSS 到 WordPress。

WordPress 是目前世界上最流行的內容管理系統,它有上千萬的用戶。這就是爲什麼,爲了製作一個成功的主題,我們需要思考每一個WordPress用戶,並嘗試通過本教程來正確地加載CSS文件到我們的主題中。

在 WordPress 中加載 CSS 的錯誤方式

多年來,WordPress 已經發展了其代碼,以便使它越來越靈活,排隊加載 CSS和JavaScript 就是在朝這個方向移動。我們的壞習慣已經保持一段時間了,儘管我們知道 WordPress 介紹了排隊加載 CSS 和 JavaScript 的方法,我們還是繼續添加這類代碼到主題的 header.php 文件:

1
<link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>">

或者我們添加下面的代碼到主題的 functions.php ,而且認爲這個方法更好些:

1
2
3
4
5
6
7
8
9
<?php
 
function add_stylesheet_to_head() {
    echo "<link href='http://fonts.lug.ustc.edu.cn/css?family=Open+Sans' rel='stylesheet' type='text/css'>";
}
 
add_action( 'wp_head', 'add_stylesheet_to_head' );
 
?>

在上面的情況下,WordPress 不能確定是否在在頁面加載了 CSS文件。這可能是一個可怕的錯誤!

如果另一個插件使用相同的CSS文件,就無法檢查CSS文件是否已經被包含在頁面中。然後插件第二次加載同一個文件,造成重複的代碼。

幸運的是,WordPress有一個非常簡單的解決方案:註冊和排隊樣式表。

在 WordPress 中加載 CSS 的正確方式

正如我們前面所說,WordPress已經成長了很多,多年來,我們不得不思考在世界上每一個WordPress用戶。

除了這些,我們還必須考慮成千上萬的WordPress插件。但是,不要讓這些大的數字嚇到你:WordPress 有非常有用的函數,來爲我們正確地加載CSS樣式到WordPress。

讓我們一起來看看。

註冊 CSS 文件

如果你要加載CSS樣式表,你首先應該使用 wp_register_style() 函數進行註冊:

1
2
3
<?php
wp_register_style( $handle, $src, $deps, $ver, $media );
?>
  • $handle(字符串,必需)是你的樣式表唯一名稱。其他函數將使用這個“handle”來排隊並打印樣式表。
  • $src(字符串,必需)指的是樣式表的URL。您可以使用函數,如 get_template_directory_uri() 來獲取主題目錄中的樣式文件。永遠不要去想硬編碼了!
  • $deps (數組,可選)處理相關樣式的名稱。如果丟失某些其他樣式文件將導致你的樣式表將無法正常工作,你可以使用該參數設置“依賴關係”。
  • $ver (字符串或布爾型,可選)版本號。你可以使用你的主題的版本號或任何一個你想要的。如果您不希望使用一個版本號,將其設置爲null。默認爲false,這使得WordPress的添加自己的版本號。
  • $media (字符串,可選)是指CSS的媒體類型,比如“screen”或“handheld”或“print”。如果你不知道是否需要使用這個,那就不使用它。默認爲“all”。

以下是 wp_register_style() 函數的一個例子:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
// wp_register_style() 示例
wp_register_style(
    'my-bootstrap-extension', // 名稱
    get_template_directory_uri() . 'https://static.wpdaxue.com/css/my-bootstrap-extension.css', // 樣式表的路徑
    array( 'bootstrap-main' ), // 依存的其他樣式表
    '1.2', // 版本號
    'screen', // CSS 媒體類型
);
 
?>

在WordPress中,註冊樣式是“可選的”。如果你的樣式不會被其他插件使用,或者你不打算使用任何代碼來再次加載它,你可以自由地排隊樣式而不需要註冊它。繼續看看它是如何實現的。

排隊 CSS 文件

註冊我們的風格文件後,我們需要“排隊”它,使其準備好在我們主題的<head>部分加載。

我們使用 wp_enqueue_style() 函數來實現:

1
2
3
<?php
wp_enqueue_style( $handle, $src, $deps, $ver, $media );
?>

該函數的參數和上面的 wp_register_style() 函數是一樣的,就不再重複。

但是,正如我們所說的, wp_register_style() 函數是不強制使用的,我要告訴你,你可以用兩種不同的方式使用 wp_enqueue_style():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
 
// 如果我們之前已經註冊過樣式
wp_enqueue_style( 'my-bootstrap-extension' );
 
// 如果我們之前沒有註冊,我們不得不設置 $src 參數!
wp_enqueue_style(
    'my-bootstrap-extension',
    get_template_directory_uri() . 'https://static.wpdaxue.com/css/my-bootstrap-extension.css',
    array( 'bootstrap-main' ),
    null, // 舉例不適用版本號
    // ...並且沒有指定CSS媒體類型
);
 
?>

請記住,如果一個插件將要用到你的樣式表,或者你打算將在你的主題的不同地方進行加載,你絕對應該先註冊。

加載樣式到我們的網站

我們不能在主題中隨便找個地方使用 wp_enqueue_style() 函數 - 我們需要使用“動作”鉤子。還有我們可以使用各種用途的三個動作鉤子:

以下是這些鉤子的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 
// 在網站前臺加載css
function mytheme_enqueue_style() {
    wp_enqueue_style( 'mytheme-style', get_stylesheet_uri() ); 
}
add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_style' );
 
// 在後臺加載css
function mytheme_enqueue_options_style() {
    wp_enqueue_style( 'mytheme-options-style', get_template_directory_uri() . 'https://static.wpdaxue.com/css/admin.css' ); 
}
add_action( 'admin_enqueue_scripts', 'mytheme_enqueue_options_style' );
 
// 在登錄頁面加載css
function mytheme_enqueue_login_style() {
    wp_enqueue_style( 'mytheme-options-style', get_template_directory_uri() . 'https://static.wpdaxue.com/css/login.css' ); 
}
add_action( 'login_enqueue_scripts', 'mytheme_enqueue_login_style' );
 
?>

WordPress 有一個重要的公告:“使用 wp_enqueue_scripts() ,不要用 wp_print_styles() ”,它會告訴你一個與 WordPress3.3版本可能的不兼容錯誤。

一些額外的函數

WordPress 有一些關於 CSS 非常有用的函數:他們允許我們打印內嵌樣式,查看樣式文件的排隊狀態,添加元數據以及註銷樣式。

讓我們一起來看看。

添加動態內聯樣式:wp_add_inline_style()

如果你的主題有選項可自定義主題的樣式,你可以使用 wp_add_inline_style() 函數來打印內置的樣式:

1
2
3
4
5
6
7
8
9
10
11
<?php
 
function mytheme_custom_styles() {
    wp_enqueue_style( 'custom-style', get_template_directory_uri() . 'https://static.wpdaxue.com/css/custom-style.css' );
    $bold_headlines = get_theme_mod( 'headline-font-weight' ); // 比方說,它的值是粗體“bold”
    $custom_inline_style = '.headline { font-weight: ' . $bold_headlines . '; }';
    wp_add_inline_style( 'custom-style', $custom_inline_style );
}
add_action( 'wp_enqueue_scripts', 'mytheme_custom_styles' );
 
?>

方便快捷。但請記住:你必須使用與後面要添加的內聯樣式樣式表相同的hadle名稱。

檢查樣式表的排隊狀態:wp_style_is()

在某些情況下,我們可能需要一個風格的狀態信息:是否註冊,是否入列,它是打印或等待打印?您可以使用 wp_style_is() 函數來確定它:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
 
/*
 * wp_style_is( $handle, $state );
 * $handle - name of the stylesheet
 * $state - state of the stylesheet: 'registered', 'enqueued', 'done' or 'to_do'. default: 'enqueued'
 */
 
// wp_style_is() 示例
function bootstrap_styles() {
 
    if( wp_style_is( 'bootstrap-main' ) {
 
        // 排隊 my-custom-bootstrap-theme 如果 bootstrap-main 已經排隊
        wp_enqueue_style( 'my-custom-bootstrap-theme', 'http://url.of/the/custom-theme.css' );
 
    }
 
}
add_action( 'wp_enqueue_scripts', 'bootstrap_styles' );
 
?>

添加元數據到樣式表:wp_style_add_data()

wp_style_add_data() 是一個非常棒的函數,它可以讓你添加元數據到你的樣式中,包括條件註釋、RTL的支持和更多!

來看看吧:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
 
/*
 * wp_style_add_data( $handle, $key, $value );
 * Possible values for $key and $value:
 * 'conditional' string      Comments for IE 6, lte IE 7 etc.
 * 'rtl'         bool|string To declare an RTL stylesheet.
 * 'suffix'      string      Optional suffix, used in combination with RTL.
 * 'alt'         bool        For rel="alternate stylesheet".
 * 'title'       string      For preferred/alternate stylesheets.
 */
 
// wp_style_add_data() 示例
function mytheme_extra_styles() {
    wp_enqueue_style( 'mytheme-ie', get_template_directory_uri() . 'https://static.wpdaxue.com/css/ie.css' );
    wp_style_add_data( 'mytheme-ie', 'conditional', 'lt IE 9' );
    /*
     * alternate usage:
     * $GLOBALS['wp_styles']->add_data( 'mytheme-ie', 'conditional', 'lte IE 9' );
     * wp_style_add_data() is cleaner, though.
     */
}
 
add_action( 'wp_enqueue_scripts', 'mytheme_ie_style' );
 
?>

真棒,不是嗎?

註銷樣式文件:wp_deregister_style()

如果你需要“註銷”樣式表(爲了使用修改後的版本,例如重新註冊),你可以用 wp_deregister_style() 實現。

讓我們看一個例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
 
function mytheme_load_modified_bootstrap() {
    // 如果 bootstrap-main 之前已註冊...
    if( wp_script_is( 'bootstrap-main', 'registered' ) ) {
        // ...取消註冊...
        wp_deregister_style( 'bootstrap-main' );
        // ...取而代之,註冊我們自定義的 modified bootstrap-main.css...
        wp_register_style( 'bootstrap-main', get_template_directory_uri() . 'https://static.wpdaxue.com/css/bootstrap-main-modified.css' );
        // ...然後排隊它
        wp_enqueue_style( 'bootstrap-main' );
    }
}
 
add_action( 'wp_enqueue_scripts', 'mytheme_load_modified_bootstrap' );
 
?>

雖然它不是必須的,但是通常你註銷了一個樣式,就應該重新註冊一個樣式,否則可能會打亂其他的一些東西。

還有一個類似的函數叫做 wp_dequeue_style() ,正如它的名字所暗示的一樣,用來取消已經排隊的樣式表。

結語

恭喜你,現在你知道一切關於在 WordPress 正確加載 CSS 的方法!希望你喜歡本教程。

你有你想分享任何方法或經驗?請在下面評論,並與我們分享您的知識!如果你喜歡這篇文章,不要忘記與你的朋友分享!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章