必须用wp_enqueue_style()挂到wp_enqueue_scripts钩子上,否则因函数未定义或headers已发送而报错或静默失效;handle需唯一前缀,src须为可访问url,$deps和$ver须显式传参。

必须用 wp_enqueue_style() 挂到 wp_enqueue_scripts 钩子上,其他方式要么报错,要么静默失效——这不是写法“不够优雅”的问题,是根本不会进 WordPress 资源调度流程。
为什么直接在 functions.php 顶层调用 wp_enqueue_style 会报错
WordPress 还没加载资源函数,PHP 直接抛 Fatal error: Call to undefined function wp_enqueue_style()。这不是语法错误,是执行时机不对:wp_enqueue_style() 只在 wp_enqueue_scripts 钩子触发后才被定义。
- ❌ 不要写在
functions.php最外层(没函数包裹、没挂钩子) - ❌ 不要塞进
header.php:此时 HTML 已开始输出,会触发headers already sent - ❌ 不要挂到
init或wp_head:前者太早,函数未就绪;后者太晚,<link>插不进 - ✅ 正确姿势:封装函数 +
add_action('wp_enqueue_scripts', 'mytheme_enqueue_styles')
handle 名称重复会导致 CSS 静默消失
$handle 是全局唯一标识符,不是昵称。两个地方都用 'style',后注册的会彻底覆盖前一个——Network 面板看不到请求,控制台无报错,<link> 标签直接不生成。
构建并排查Microsoft Word邮件合并及DOCX模板工作流,使用合并域、内容控件、文档属性、重复区块、数据等
- ✅ 命名必须加前缀:
'mytheme-header-fix'、'childtheme-override' - ✅ 替换父主题样式(如
'twentytwentyfour-style'):先wp_dequeue_style('twentytwentyfour-style'),再wp_enqueue_style() - ✅ 检查是否已入队:
wp_style_is('mytheme-header-fix', 'enqueued')返回true才算成功
src 必须是可访问 URL,不是服务器路径
传 get_template_directory() . '/style.css' 或 __DIR__ . '/assets/css/main.css' 进去,生成的是 file:/// 或绝对路径链接,浏览器直接 404。WordPress 不解析 PHP 文件路径,只认能被浏览器直接请求的完整 URL。
- ✅ 主题根目录
style.css:get_stylesheet_uri() - ✅ 父主题 CSS(子主题中引用):
get_template_directory_uri() . '/assets/css/main.css' - ✅ 子主题自定义 CSS:
get_stylesheet_directory_uri() . '/css/custom.css' - ✅ 插件内 CSS:
plugin_dir_url(__FILE__) . 'css/admin.css'(比plugins_url()更稳,尤其在符号链接或多站点下)
$deps 和 $ver 参数不可省略,且类型要对
PHP 8+ 下省略 $deps 或传 null/false 会触发 warning;更重要的是,不声明依赖会导致加载顺序错乱——比如你的 CSS 依赖 Bootstrap,但 Bootstrap 没加载完你就渲染了,栅格、按钮全崩。
- ✅
$deps即使没依赖也要显式传array() - ✅
$ver推荐用filemtime(get_template_directory() . '/assets/css/custom.css'),防缓存又不用手动改版本号 - ✅ 子主题若需依赖父主题样式,必须显式声明
$deps数组,不能靠@import或手动<link>
最常被忽略的其实是 $deps 的空数组写法和 $handle 的前缀强制性——它们不出错,但一出错就是“CSS 看不见”,连调试线索都没有。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










