wp_enqueue_style必须挂载到wp_enqueue_scripts钩子上,handle需唯一加前缀,$src须为URL而非路径,$deps和$ver不可省略;直接写<link>或放functions.php顶层会导致样式静默失效。

直接在 functions.php 顶层写 wp_enqueue_style(),或在 header.php 里硬加 <link>,CSS 大概率不生效——不是代码写错了,是压根没进 WordPress 的资源调度系统。
wp_enqueue_style 必须挂到 wp_enqueue_scripts 钩子上
WordPress 只在 wp_enqueue_scripts 这个动作触发时才加载并定义 wp_enqueue_style() 函数。早于它(比如 init)函数未就绪;晚于它(比如 wp_head)HTML 已开始输出,PHP 会报 “headers already sent” 错误。
- ✅ 正确:封装函数后用
add_action('wp_enqueue_scripts', 'my_theme_enqueue_styles')挂载 - ❌ 错误:
wp_enqueue_style()直接写在functions.php文件最外层 - ❌ 错误:塞进
header.php或用echo '<link ...>'手动输出 - ⚠️ 子主题必须在自己的
functions.php中挂载,父主题的钩子不会自动继承
$handle 重复会导致样式静默失效
$handle 是全局唯一标识符,不是随便起的别名。两个地方用了相同 $handle(如都叫 'style'),后注册的会彻底覆盖前一个——无报错、无警告、浏览器里也看不到对应 <link> 标签。
- ✅ 建议加项目前缀:
'mytheme-main-css'、'childtheme-fixes' - ✅ 检查是否已加载:
wp_style_is('mytheme-main-css', 'enqueued')返回true表示已存在 - ✅ 替换父主题默认样式(如
'twentytwentyfour-style'):先wp_dequeue_style('twentytwentyfour-style'),再wp_enqueue_style()
$src 必须是 URL,不是服务器路径
$src 参数要的是浏览器能直接请求的完整 URL,不是 __DIR__、get_template_directory() 这类返回服务器绝对路径的函数结果。传进去只会生成 404。
安全的随机密码生成器。支持自定义长度、字符类型(大写/小写字母、数字、特殊符号),排除相似字符,批量生成。纯 Python 标准库,无需 API 密钥。
立即学习“前端免费学习笔记(深入)”;
- ✅ 主题根目录
style.css:get_stylesheet_uri() - ✅ 父主题 CSS(子主题中引用):
get_template_directory_uri() . '/assets/css/main.css' - ✅ 子主题自定义 CSS:
get_stylesheet_directory_uri() . '/css/custom.css' - ⚠️ 特别注意:
get_stylesheet_directory()返回的是类似/var/www/html/wp-content/themes/mychild的路径,拼进$src就必然 404
$deps 和 $ver 不可省略或传错类型
$deps 是依赖数组,$ver 是版本号字符串。PHP 8+ 对空值更敏感:传 NULL 或布尔值会触发 warning;不声明依赖则无法控制加载顺序(比如你的 CSS 依赖 Bootstrap,但没声明,结果你的规则被覆盖)。
- ✅
$deps必须显式传空数组:array(),不能省略或写NULL - ✅
$ver推荐用文件修改时间:filemtime(get_stylesheet_directory() . '/css/custom.css'),避免缓存问题 - ✅ 媒体类型(
$media)如'all'可省略(默认即'all'),但若指定需加引号
最容易被忽略的是 $deps 和 $ver 的类型约束——它们看着可选,实则是 WordPress 资源调度链的关键齿轮。漏掉或传错,轻则缓存失效,重则依赖断裂、样式错乱,而且问题往往藏在加载顺序里,很难一眼定位。

















