wp_enqueue_style 必须挂载到 wp_enqueue_scripts 钩子,不可在 functions.php 顶层或 header.php 中直接调用;handle 需唯一前缀并检查是否已入队,$src 必须为可访问 url,$deps 和 $ver 不可省略。

wp_enqueue_style 必须挂到 wp_enqueue_scripts 钩子上
直接在 functions.php 顶层写 wp_enqueue_style(),PHP 会报 Fatal error: Call to undefined function wp_enqueue_style();塞进 header.php 更糟,headers already sent 错误直接中断页面。WordPress 的资源系统只在 wp_enqueue_scripts 动作触发时才初始化,早于它函数不存在,晚于它 HTML 已输出,<link> 插不进去。
正确做法只有一条路径:
- 把
wp_enqueue_style()包进一个函数里,比如mytheme_enqueue_styles() - 用
add_action('wp_enqueue_scripts', 'mytheme_enqueue_styles')挂载 - 插件还要额外加
add_action('admin_enqueue_scripts', 'myplugin_enqueue_styles'),否则后台页面不加载
handle 名重复会导致 CSS 静默失效
你写 wp_enqueue_style('style', ...),而主题或另一个插件也注册了同名 'style',后注册的会完全覆盖前一个——没警告、没报错、浏览器源码里根本看不到对应 <link>,CSS 就是不生效,常被误判为“代码没运行”。
防冲突必须做三件事:
-
handle加唯一前缀,例如'mytheme-header-fix'、'plugin-notice-css' - 检查是否已存在:
wp_style_is('mytheme-header-fix', 'enqueued')返回true表示已被加载 - 若需替换主题默认样式(如
'twentytwentyfour-style'),先wp_dequeue_style('twentytwentyfour-style'),再wp_enqueue_style()
$src 必须是可访问 URL,不是服务器路径
常见错误是传入 __DIR__ . '/assets/css/main.css' 或 get_template_directory() . '/style.css',结果生成 404 —— 浏览器请求的是文件系统路径,不是 Web 可达地址。
必须用 URI 函数生成 URL:
- 主题根目录下的
style.css:用get_stylesheet_uri() - 子主题自定义 CSS:
get_stylesheet_directory_uri() . '/assets/css/custom.css' - 父主题资源:
get_template_directory_uri() . '/css/ie.css' - 绝对 URL(CDN)也可,但确保能被公网访问
$deps 和 $ver 参数不能省略
省略 $deps 或 $ver 在 PHP 8+ 下会触发 warning;更严重的是逻辑问题:
- 不传
$deps(比如你的 CSS 依赖'bootstrap'),加载顺序错乱,规则被覆盖 - 不传
$ver,浏览器强缓存旧文件,改了 CSS 也不生效 - 即使无依赖,也要显式传空数组
array();版本号建议用filemtime()动态生成,例如:filemtime(get_stylesheet_directory() . '/assets/css/custom.css')
最易被忽略的是子主题场景:父主题样式必须显式声明为依赖,否则子主题 CSS 可能先于父主题加载,导致覆盖失效。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











