Metas、自定义字段和后台扩展怎么做?别把全局配置和文章字段混了

Metas、自定义字段和后台扩展怎么做?别把全局配置和文章字段混了 配图

很多人学到主题配置和插件 Hook 以后,马上就会碰到一个更实用的问题:

怎么给文章、分类、标签这些对象,加上自己的字段?

比如:

  • 给文章加 SEO 标题
  • 给文章加封面图
  • 给分类加描述
  • 给标签加扩展信息

这时候如果你还用“全局配置”的思路去处理,很快就会乱掉。

因为这类数据往往不是属于整个主题,而是属于某一个对象。

这就是 Metas 发挥作用的地方。

一、先分清:ConfigMetas 不是一回事

很多人第一次做自定义字段,最容易在这里混。

Config

更适合放:

  • 主题全局设置
  • 插件全局设置
  • 默认图
  • 首页文案
  • API Key

也就是:

全局都适用的值。

Metas

更适合放:

  • 某篇文章自己的 SEO 标题
  • 某篇文章自己的封面图
  • 某个分类自己的说明
  • 某个标签自己的模板参数

也就是:

挂在单个对象上的值。

如果你把这两类东西混了,后面编辑体验会非常糟糕。

二、什么时候你应该立刻想到 Metas

只要需求符合下面任意一条,你都应该优先考虑 Metas

  • 值只属于一篇文章
  • 值只属于一个分类
  • 值只属于一个标签
  • 不同内容对象之间需要各自独立维护
  • 前台模板需要按对象读取

例如:

  • 文章封面
  • 文章 SEO 描述
  • 分类顶部说明
  • 标签页附加介绍

这类数据都不应该做成主题 Config

三、Z-BlogPHP 里,Metas 最常见的落地思路

常见路径其实很清楚:

  1. 在编辑页注入一个字段
  2. 提交时使用 meta_<key> 的命名
  3. 前台通过 $object->Metas->key 读取

也就是说,Metas 的关键不只是“存”,而是这条链路要完整。

四、文章自定义字段,通常从编辑页 Hook 开始

如果你要给文章编辑页加一个字段,常见会从这些 Hook 里找落点:

  • Filter_Plugin_Edit_Response
  • Filter_Plugin_Edit_Response2
  • Filter_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_seotitle
  • meta_seodescription

第二步,编辑文章时填写

也就是让内容编辑者在后台每篇文章里单独填。

第三步,前台 header.php 读取

例如先判断:

  • 当前文章有没有专属 SEO 标题
  • 如果有,就优先输出
  • 如果没有,再回退到普通标题或主题默认值

这就是一个非常标准的 Metas 使用场景。

八、分类和标签的自定义字段也很值得做

很多人只想到文章字段,忽略了分类和标签。

但对于内容站来说,分类和标签页本身就经常需要更多信息。

比如你可能想给分类加:

  • 页面标题补充
  • 页面描述
  • 顶部介绍文本
  • 横幅图

这时就可以考虑:

  • Filter_Plugin_Category_Edit_Response
  • Filter_Plugin_Tag_Edit_Response

这两个入口很常用。

尤其做 SEO 站的时候,分类和标签字段的价值很高。

九、后台扩展不只是“加一个输入框”

很多人第一次做编辑页字段,只盯着那个输入框本身。

其实完整度更重要。

至少要同时考虑:

  • 这个字段属于谁
  • 应该出现在哪个编辑页
  • 前台哪个位置会消费它
  • 空值怎么处理
  • 全局默认值和对象值怎么配合

如果这些没想清楚,就很容易出现:

  • 后台能填
  • 前台不读取
  • 字段意义模糊
  • 编辑体验很差

十、Metas 和默认值怎么配合最稳

这也是实际开发里很常见的需求。

比如文章封面图,很多时候不会要求每篇都填。

这时更稳的顺序通常是:

  1. 先看文章 Metas 里有没有专属封面
  2. 没有的话,再看文章正文能不能提取首图
  3. 还没有,再回退到主题默认图

这个思路也适用于 SEO 标题、摘要描述之类的字段。

也就是说:

Metas 常常是优先值,不一定是唯一值。

十一、最常见的 6 个坑

1. 本该做 Metas 的东西,硬做成全局配置

后面每篇文章都得共享同一个值,很别扭。

2. 字段注入了,但前台没消费

这是最常见的问题之一。

3. 前台直接读 Metas,但没有空值兜底

一旦没填,页面结构就开始出问题。

4. 字段名没有统一命名习惯

后面排查和维护会很难受。

5. 分类字段、标签字段只做后台,不做前台落地

那它们的价值就打了折。

6. 把后台扩展写得太重

第一版先把字段链路跑通,比一开始做复杂后台体验更重要。

十二、一个很实用的开发顺序

如果你第一次做 Metas,我建议按这个顺序练:

  1. 先给文章加一个简单字段
  2. 在前台详情页把它读出来
  3. 再给 header.php 或列表页接入真实用途
  4. 接着再做分类字段
  5. 最后再做标签字段

这样你会很快从“知道有 Metas”进入“真的会用 Metas”。

结语

Metas 最有价值的地方,不是它名字特别,而是它把“对象自己的数据”这件事处理得很自然。

只要你先把这条边界守住:

  • 全局设置走 Config
  • 对象字段走 Metas

再把下面这条链路跑通:

  • 编辑页注入字段
  • 字段命名清楚
  • 前台正确读取
  • 空值有兜底

后面你做文章 SEO、文章封面、分类介绍、标签扩展,都会顺很多。

下一篇我们继续攻最容易卡人的三块:路由、评论和 API。

发表评论

发表评论