head 与 wp_head:主题最容易漏的一环

作者: admin 分类: wordpress主题制作教程 发布时间: 2026-11-06 18:33

一个“网站看着正常、插件却全失效”的怪事

我之前的 caogenbj 主题,装过 SEO 插件、装过缓存插件,后台设置得好好的,前台却一点变化都没有。我一度以为插件有问题,卸了装、装了卸,折腾了很久。

后来打开 header.php 才发现:我的主题根本没调 wp_head()。

head 部分是我自己手写的,写完直接 </head> 收尾,中间漏了那一行。

wp_head() 是什么

它不是“WordPress 的开头”,而是给所有插件留的一个输出口。

插件想往 <head> 里塞东西(比如 SEO 的 meta、缓存的预加载、统计代码),只有一条路:挂到 wp_head 这个钩子上。而主题必须在 head 里调用 wp_head(),这个“出口”才会打开。

打个比方:wp_head() 是墙上的一个插座。插件是各种电器,都带着插头。你不装插座,电器再好也通不了电。

没有它会怎样

  • SEO 插件全失效:title、description、canonical、结构化数据,一条都不会输出;
  • 缓存插件失效:minify、预加载都往 head 注入,全被堵住;
  • 站点验证失败:百度/谷歌的 HTML 标签验证,验证 meta 必须出现在 head 里,插件注入的进不来;
  • 统计代码失效:如果统计是靠插件插的,也进不来。

最坑的是:网站照样能打开,所以你不会发现。直到你装了个插件、发现没反应,才会怀疑到这一层。

为什么容易漏

因为“手写 head”看起来很方便——title、description、CSS、JS,自己写几行就搞定了,还“可控”。

但手写的代价是:你把所有插件都关在门外了。

正规的 head 应该长这样:

<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>

就这几行。title、description、CSS、JS,都交给 wp_head() 和插件去输出。

怎么检查自己的主题

打开主题的 header.php,搜 wp_head。搜不到,就是漏了。

另一个检查方法:打开任意页面,看源码里有没有 wp-json 或者 api.w.org 之类的痕迹。有,说明 wp_head() 在工作;完全没有,大概率是漏了。

我后来怎么改的

我把 header.php 的整个 head 段重写了,只留框架 + wp_head(),具体的 title/description/canonical 交给一个单独的 head-seo.php 去生成。

这样两个好处:

  • wp_head() 有了,插件能正常工作;
  • SEO 标签由自己的文件统一管,不依赖插件,也不冲突。

小结

一句话记住:wp_head() 是插件往 head 输出的唯一出口,主题不调它,所有插件都白装。

下一篇讲:如果你坚持手写 head,会付出什么代价。

本系列导航

相关文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Powered by 草根站长笔记 © 2015-2026 草根站长笔记 Inc.版权所有,禁止转载