
很多人学到主题配置和插件 Hook 以后,马上就会碰到一个更实用的问题:
怎么给文章、分类、标签这些对象,加上自己的字段?
比如:
- 给文章加 SEO 标题
- 给文章加封面图
- 给分类加描述
- 给标签加扩展信息
这时候如果你还用“全局配置”的思路去处理,很快就会乱掉。
因为这类数据往往不是属于整个主题,而是属于某一个对象。
这就是 Metas 发挥作用的地方。
一、先分清:Config 和 Metas 不是一回事
很多人第一次做自定义字段,最容易在这里混。
Config
更适合放:
- 主题全局设置
- 插件全局设置
- 默认图
- 首页文案
- API Key
也就是:
全局都适用的值。
Metas
更适合放:
- 某篇文章自己的 SEO 标题
- 某篇文章自己的封面图
- 某个分类自己的说明
- 某个标签自己的模板参数
也就是:
挂在单个对象上的值。
如果你把这两类东西混了,后面编辑体验会非常糟糕。
二、什么时候你应该立刻想到 Metas
只要需求符合下面任意一条,你都应该优先考虑 Metas:
- 值只属于一篇文章
- 值只属于一个分类
- 值只属于一个标签
- 不同内容对象之间需要各自独立维护
- 前台模板需要按对象读取
例如:
- 文章封面
- 文章 SEO 描述
- 分类顶部说明
- 标签页附加介绍
这类数据都不应该做成主题 Config。
三、Z-BlogPHP 里,Metas 最常见的落地思路
常见路径其实很清楚:
- 在编辑页注入一个字段
- 提交时使用
meta_<key>的命名 - 前台通过
$object->Metas->key读取
也就是说,Metas 的关键不只是“存”,而是这条链路要完整。
四、文章自定义字段,通常从编辑页 Hook 开始
如果你要给文章编辑页加一个字段,常见会从这些 Hook 里找落点:
Filter_Plugin_Edit_ResponseFilter_Plugin_Edit_Response2Filter_Plugin_Edit_Response3
具体挂哪一个,取决于你想插到编辑页的什么位置。
你不需要一开始就死背顺序,先知道这类需求该往 Edit_Response 家族找就够了。
五、字段名为什么常写成 meta_<key>
这是一个很实用的约定。
如果你要给文章加一个 SEO 标题字段,常见会写成:
<input type="text" name="meta_seotitle" value="" />
如果你要加封面图字段,可能是:
<input type="text" name="meta_cover" value="" />
这种命名方式的好处是:
- 语义清楚
- 容易和普通表单项区分
- 后面读取时也容易对应回
$article->Metas->seotitle
六、前台读取时,怎么读才自然
如果字段属于文章,就从文章对象上读:
$article->Metas->seotitle
如果字段属于分类,就从分类对象上读:
$category->Metas->seotitle
如果字段属于标签,就从标签对象上读:
$tag->Metas->intro_extra
这个思路非常直观:
- 字段挂在哪个对象
- 就从哪个对象的
Metas里读
七、一个最常见的例子:给文章加 SEO 标题和描述
这类需求特别适合拿来练手。
思路通常是这样的:
第一步,在文章编辑页注入字段
比如:
meta_seotitlemeta_seodescription
第二步,编辑文章时填写
也就是让内容编辑者在后台每篇文章里单独填。
第三步,前台 header.php 读取
例如先判断:
- 当前文章有没有专属 SEO 标题
- 如果有,就优先输出
- 如果没有,再回退到普通标题或主题默认值
这就是一个非常标准的 Metas 使用场景。
八、分类和标签的自定义字段也很值得做
很多人只想到文章字段,忽略了分类和标签。
但对于内容站来说,分类和标签页本身就经常需要更多信息。
比如你可能想给分类加:
- 页面标题补充
- 页面描述
- 顶部介绍文本
- 横幅图
这时就可以考虑:
Filter_Plugin_Category_Edit_ResponseFilter_Plugin_Tag_Edit_Response
这两个入口很常用。
尤其做 SEO 站的时候,分类和标签字段的价值很高。
九、后台扩展不只是“加一个输入框”
很多人第一次做编辑页字段,只盯着那个输入框本身。
其实完整度更重要。
至少要同时考虑:
- 这个字段属于谁
- 应该出现在哪个编辑页
- 前台哪个位置会消费它
- 空值怎么处理
- 全局默认值和对象值怎么配合
如果这些没想清楚,就很容易出现:
- 后台能填
- 前台不读取
- 字段意义模糊
- 编辑体验很差
十、Metas 和默认值怎么配合最稳
这也是实际开发里很常见的需求。
比如文章封面图,很多时候不会要求每篇都填。
这时更稳的顺序通常是:
- 先看文章
Metas里有没有专属封面 - 没有的话,再看文章正文能不能提取首图
- 还没有,再回退到主题默认图
这个思路也适用于 SEO 标题、摘要描述之类的字段。
也就是说:
Metas 常常是优先值,不一定是唯一值。
十一、最常见的 6 个坑
1. 本该做 Metas 的东西,硬做成全局配置
后面每篇文章都得共享同一个值,很别扭。
2. 字段注入了,但前台没消费
这是最常见的问题之一。
3. 前台直接读 Metas,但没有空值兜底
一旦没填,页面结构就开始出问题。
4. 字段名没有统一命名习惯
后面排查和维护会很难受。
5. 分类字段、标签字段只做后台,不做前台落地
那它们的价值就打了折。
6. 把后台扩展写得太重
第一版先把字段链路跑通,比一开始做复杂后台体验更重要。
十二、一个很实用的开发顺序
如果你第一次做 Metas,我建议按这个顺序练:
- 先给文章加一个简单字段
- 在前台详情页把它读出来
- 再给
header.php或列表页接入真实用途 - 接着再做分类字段
- 最后再做标签字段
这样你会很快从“知道有 Metas”进入“真的会用 Metas”。
结语
Metas 最有价值的地方,不是它名字特别,而是它把“对象自己的数据”这件事处理得很自然。
只要你先把这条边界守住:
- 全局设置走
Config - 对象字段走
Metas
再把下面这条链路跑通:
- 编辑页注入字段
- 字段命名清楚
- 前台正确读取
- 空值有兜底
后面你做文章 SEO、文章封面、分类介绍、标签扩展,都会顺很多。
下一篇我们继续攻最容易卡人的三块:路由、评论和 API。
发表评论
发表评论