問題描述

我嘗試在我的主題中創建登錄頁面。很簡單:

add_action( 'login_enqueue_scripts', function()
{
    wp_enqueue_style( 'TEST', get_template_directory_uri() . '/css/login.css' );
});

不幸的是,它不按預期工作。 link 元素出現在登錄頁面的 body 中,很晚。

渲染輸出:

<link rel='stylesheet' id='TEST-css'  href='http://themes.wp/t5-theme-base/css/login.css?ver=3.9-alpha' type='text/css' media='all' />
<div class="clear"></div>
</body>
</html>

這是錯誤的,如何在 head 中打印鏈接元素?

最佳解決方案

對於每個 enqueue 動作,都有相應的 print_styles 動作:

  • wp_enqueue_scriptswp_print_styles

  • admin_enqueue_scriptsadmin_print_styles

  • customize_controls_enqueue_scriptscustomize_controls_print_styles

不是登錄頁面。沒有 login_print_styles 動作或功能,所以您的樣式表會拋出 do_action( 'login_footer' );

但是有一個簡單的修復:

if ( ! has_action( 'login_enqueue_scripts', 'wp_print_styles' ) )
    add_action( 'login_enqueue_scripts', 'wp_print_styles', 11 );

WordPress 現在將在該頁面上註冊的所有 link 元素在恰當的位置,即 head 元素之後,緊跟在內置樣式表之後。

結果:

<link rel='stylesheet' id='dashicons-css'  href='http://git.wp/wp-includes/css/dashicons.min.css?ver=3.9-alpha' type='text/css' media='all' />
<link rel='stylesheet' id='wp-admin-css'  href='http://git.wp/wp-admin/css/wp-admin.min.css?ver=3.9-alpha' type='text/css' media='all' />
<link rel='stylesheet' id='buttons-css'  href='http://git.wp/wp-includes/css/buttons.min.css?ver=3.9-alpha' type='text/css' media='all' />
<link rel='stylesheet' id='colors-fresh-css'  href='http://git.wp/wp-admin/css/colors.min.css?ver=3.9-alpha' type='text/css' media='all' />
<!--[if lte IE 7]>
<link rel='stylesheet' id='ie-css'  href='http://git.wp/wp-admin/css/ie.min.css?ver=3.9-alpha' type='text/css' media='all' />
<![endif]-->
<link rel='stylesheet' id='TEST-css'  href='http://themes.wp/t5-theme-base/css/login.css?ver=3.9-alpha' type='text/css' media='all' />

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。