从 caogenbj 到“自己的主题”:重构路线图

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

先给”改出来的主题”做个体检

我把 caogenbj 这个主题从头扫了一遍,症状是这样的:

症状 具体表现
认不出爹 index.php 里背景图路径写的是 themes/jiaoxueshiping/,那是它的原名
带着别人的东西 category-liupangketang.php 里有 30 处指向 wuli.fre9.com 的链接,还有 3 张本主题里不存在的轮播图
名字对不上 页脚写的是”零月租手机卡 © 2015-2020″——那是另一个站的名字和年份
文件重复 6 个 category-*.php 内容高度雷同,改一处要改六遍
缺零件 没有 404.php、search.php、tag.php
写死了 96 处 http://www.caogenbj.com 的站内链接存在数据库里

这些不是”代码写错了”,是“这个主题还在替别人活着”。

重构的目标不是”写得更漂亮”,是让它变成一个你能独立维护的东西。

第一步:摸清家底(不改代码)

这一步最关键,也最容易被跳过。直接动手改,改到一半发现”这个文件根本没被调用”,白干。

1. 列文件清单

ls -la wp-content/themes/caogenbj/

把 PHP 文件、CSS、JS、图片分开列。我当时列出来是 11 个 PHP + 一堆图片和两个 JS 库。

2. 查调用关系

每个模板文件上来第一行几乎都是 get_header(),最后是 get_footer()。你要查的是两件事:

  • 哪些模板真的会被用到? 对照卷一讲的模板层级——比如 category-liupangketang.php,只有当存在 slug 为 liupangketang 的分类时才会被用;
  • 哪些函数被谁调用? 用搜索:
grep -rn "lingfeng_breadcrumbs" *.php

如果搜出来只有定义、没有调用,那就是死代码。

3. 找出”写死的东西”

grep -rn "http://" *.php | grep -v "w3.org"
grep -rn "themes/" *.php
grep -rn "caogenbj.com" *.php

三条命令下来,所有”绑在特定站上”的地方就暴露了。我那次搜出 29 处 http://,其中真正该改的 15 处、不该动的 14 处(后面会讲怎么区分)。

这一步的产出应该是一张表:哪个文件、什么用途、要不要留。

第二步:断奶(去掉别人的痕迹)

按”风险从低到高”排,我是这么做的:

低风险:改文字

  • 页脚的品牌名和年份;
  • style.css 里的 Theme Name、Author、Author URI;
  • Theme URI 改成自己的站。

这些改动不影响任何逻辑,改完刷一下就能确认。

中风险:改路径

把 themes/jiaoxueshiping/ 改成 get_stylesheet_directory_uri()。

为什么要用函数而不是直接写目录名?因为写死的目录名,下次改主题名又要改一遍。用函数,改目录名它自动跟着变。

// 改前
background: url(http://www.caogenbj.com/wp-content/themes/jiaoxueshiping/notice_bg.gif)

// 改后
background: url(<?php echo esc_url( get_stylesheet_directory_uri() . '/notice_bg.gif' ); ?>)

高风险:删文件

这一步要格外小心。category-liupangketang.php 这种,删之前必须确认两件事:

  1. 有没有这个 slug 的分类?没有,模板永远不会被调用;
  2. 有没有别的文件 include 它?

两条都确认了才删。删完立刻刷几个页面看看,别一次删五个。

我这次的做法是:不删,先注释掉或者在文件名后面加 .bak。观察一周,没出问题再真删。这叫”可回退的删除”。

第三步:立规矩(让下次不用想)

前三步是”清理”,这一步是”防止再脏”。

规矩一:所有函数加前缀

function caogenbj_strimwidth() { ... }
function caogenbj_breadcrumbs() { ... }

我原来那个主题的函数全是 lingfeng_ 开头——那是模板作者的名字。改成自己的前缀,不是为了好看,是为了将来跟插件撞名时,能一眼看出是谁的。

规矩二:资源走 enqueue

把 header.php 里那两个硬写的 <script> 改成 wp_enqueue_script。

收益很实在:缓存插件能版本化它们了。 你改了 CSS,把版本号加一,访客浏览器就会重新下载。硬写的话,只能让访客自己按 Ctrl+F5(他不会按)。

规矩三:输入输出都过一道

echo $变量 全部改成 echo esc_html( $变量 );href="<?php echo $url ?>" 改成 esc_url()。

规矩四:重复的模板合并

6 个 category-*.php 如果内容一样,就只留一个 category.php。真要区分,用条件判断:

<?php if ( is_category( 'liupangketang' ) ) : ?>
  ...
<?php else : ?>
  ...
<?php endif; ?>

为什么这条重要? 我给你算一笔:这次修一个背景图路径,因为有 6 个雷同的分类模板,同一处改要改 9 遍(6 个分类模板 + index + 2 个其他)。漏一处,就前功尽弃。

第四步:能升级

前三条做完,主题是你的了。但要能长期维护,还差两件事:

一、版本控制。

最轻量的做法:每次大改之前,把主题目录打包成 caogenbj-20261106.zip,放在本地。出问题了,解压覆盖就回去。

正式一点就上 Git。主题目录 git init,每次改完 commit。好处是”能看出改了什么”——不用靠记忆。

二、子主题(如果还想跟着上游更新)。

我前面写过一篇专门讲子主题。这里只说结论:如果你已经改到这个程度(重写了 head、换了模板、加了 SEO 层),那就不用考虑子主题了——你已经不是”继承”,你是”分家”。

分家之后,”上游更新”这条路就断了。接受它,然后自己维护好。

优先级:不要一次全改

上面这些如果一次全做,工作量大概两三天,而且极易出错。

我给自己的排序是这样的(按”风险 vs 收益”):

  1. 先修”会出错”的:漏 wp_head()、函数重名、语法错误。这些直接导致功能失效或白屏;
  2. 再修”影响收录”的:title / description / canonical / 站点地图。这些影响流量;
  3. 然后修”影响体验”的:死链、404、图片过大、脚本阻塞;
  4. 最后修”影响心情”的:代码风格、命名、注释、文件整理。

很多人卡在第 4 步,因为第 4 步最”看得见”——改完代码变整齐了,很有成就感。但第 1、2 步才是真的在挣钱。

我这次的实际顺序是:http 链接 → 摘要函数 → wp_head → SEO 层 → 安全 → 变量名。前四步占了八成时间,最后一步(改 lingfeng_ 前缀)到现在还没做。

没做也不影响站运行。这就是”优先级”的意思。

小结

一句话记住:摸家底 → 断奶 → 立规矩 → 能升级。四步按顺序来,别一次全改;先修会出错的,再修影响收录的。

下一篇是这个系列的最后一篇:把六卷的内容收成一张图。

本系列导航

相关文章

发表回复

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

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