改了样式前台不变,我先查 enqueue

· wordpress · 阅读 2
摘要

样式我改了三遍,浏览器硬刷新也没用。看网页源代码才发现,head 里请求的根本不是我改的那个文件。 先看实际发出去的地址 前台右键看源代码,搜主题目录名。常见就两种:链接 404,或者指到父主题、某个插件的 CSS,后面还挂着旧版本号。这时

样式我改了三遍,浏览器硬刷新也没用。看网页源代码才发现,head 里请求的根本不是我改的那个文件。

先看实际发出去的地址

前台右键看源代码,搜主题目录名。常见就两种:链接 404,或者指到父主题、某个插件的 CSS,后面还挂着旧版本号。这时候先别关缓存插件。地址都不对,清缓存只是自我安慰。

样式要挂在 wp_enqueue_scripts 上

写在当前启用主题的 functions.php。用了子主题就只改子主题,别改父主题。

add_action('wp_enqueue_scripts', function () {
    $path = get_stylesheet_directory() . '/assets/css/main.css';
    wp_enqueue_style(
        'my-theme',
        get_stylesheet_directory_uri() . '/assets/css/main.css',
        array(),
        file_exists($path) ? filemtime($path) : null
    );
});

第四个参数我用文件修改时间当版本号,query string 一变,浏览器会重新拉。写死 1.0.0 的话,文件明明改了,前台还是旧的。这个坑我不只踩过一次。

wp_enqueue_style 不要裸放在文件顶上。有的主题凑巧能输出,有的时机不对,link 根本不进 head。footer.php 里手写 link 也能看见效果,但和插件去重、按页面加载搅在一起之后,我还是改回 enqueue 了。

文件在磁盘上,请求仍是 404

多半是路径和目录不一致。get_stylesheet_directory_uri() 是当前主题的 URL,不是站点根目录。assets 写成 asset,本地 Windows 不区分大小写,传到 Linux 就 404。我有一次本地好好的,上线整站没样式,查了才看到就差一个 s。

句柄名 my-theme 如果和父主题、插件撞了,后注册的可能被丢掉。源代码里完全没有你的文件名,先把句柄改成一个冷僻点的再试。这点我没在所有热门主题上逐个验证,但官方主题里撞过。