TYPECHO WIKI
每一个作品都值得被记录

Typecho自动删除冗余、空白字段

Typecho维基君Typecho教程 • 1451次浏览 • 发布 2020-09-29 • 更新 2020-09-29

Typecho的插件钩子似乎并没有对自定义字段有过多支持,仅有一个 Widget_Abstract_Contents->isFieldReadOnly 可以用来过滤某些只读字段。

然而若是你通过模板在文章编辑器内插入了某些自定义字段,即便没有输入数值,这些字段也会被更新到数据库中,造成冗余和空白数据。

硬着头皮又翻阅了一些Typecho处理自定义字段的代码,我发现Typecho的自定义字段虽然拥有 str_value、int_value、float_value三种类别,但是其默认只会将自定义字段保存为string类型。

梳理了一下流程,我通过修改 var/Widget/Abstract/Contents.php 内的源码,终于解决了这个问题。
详细教程方法如下:

  1. 打开 var/Widget/Abstract/Contents.php
  2. 找到 public function applyFields(array $fields, $cid) 这个方法,搜寻 $this->setField($name, $type, $value, $cid); 这行代码;
  3. $this->setField 这行代码的上方添加代码:

    // hack
    if(empty($value)){
    $this->db->query($this->db->delete('table.fields')->where('cid = ? AND name = ?', $cid, $name));
    continue;
    }

  4. 保存文件即可。

今后在你发表、更新文章之时,当程序检测到当前字段为空白或者'0'时,就会自动尝试从数据库中删除相关字段,并且跳过这一次的保存动作。
虽然上面的代码可以帮助你在更新文章时删除冗余字段,但已经保存在数据库中的字段,还需要你再去 phpmyadmin 中手动删除。
下面的SQL代码可以帮助你自动完成这项工作:

DELETE FROM typecho_fields WHERE str_value = '' OR str_value = '0';

(PS:记得事先备份数据库,并且更换typecho_fields为你正确的Typecho字段表)

广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,Typecho.Wiki所有文章均包含本声明。
厂商投放

【腾讯云】🎉五一云上盛惠!云服务器99元/月续费同价!

腾讯云五一劳动节海量产品 · 轻松上云!云服务器首年1.8折起,买1年送3个月!超值优惠,性能稳定,让您的云端之旅更加畅享。快来腾讯云选购吧!

广告
添加新评论 »