typecho插件开发坑

当年给 Typecho 写插件,文档散、示例少,很多坑是部署到线上才撞上的。下面几条是我反复交学费总结出来的,不算完整教程,但能少踩几个雷。

1. 类名必须以 _Plugin 结尾

插件主类名要叫 Something_PluginSomething 通常和插件文件夹名一致。

class HelloWorld_Plugin implements Typecho_Plugin_Interface
{
    public static function activate() { }
    public static function deactivate() { }
    public static function config(Typecho_Widget_Helper_Form $form) { }
    public static function personalConfig(Typecho_Widget_Helper_Form $form) { }
}

名字不对,后台可能根本识别不到插件,或者激活时报类找不到。改完类名记得文件夹名、文件名、类名三者对齐。

2. 更新时先禁用插件

这是血泪教训:直接覆盖 PHP 文件,有时 OPcache 或旧钩子还在,页面白屏、后台进不去都有见过。

稳妥流程:

  1. 后台 → 控制台 → 插件 → 先禁用
  2. 上传/覆盖新版本文件
  3. 再启用,看激活钩子是否正常

如果已经白屏,只能 FTP 删掉 usr/plugins/你的插件 目录或改文件名,先救站再说。

3. 目录和文件怎么放

标准结构:

usr/plugins/YourPlugin/
  Plugin.php      # 主类文件,名字随意但习惯叫 Plugin.php
  (其他辅助 php、静态资源)

Plugin.phpimplements Typecho_Plugin_Interface 四个静态方法都要有,哪怕 config 暂时留空。

4. 钩子里别写太重的东西

activate() 适合注册钩子、建表;别在里面跑大 SQL 或远程请求。失败会导致插件无法启用,排查很烦。

持久化配置走 config() 表单,运行期逻辑挂 Typecho_Plugin::factory('...')->... 的 action/filter。

5. 调试习惯

  • 本地开 define('__TYPECHO_DEBUG__', true); 看报错
  • 改完插件先禁用再启用,确认钩子重新注册
  • 和主题、其他插件抢同一个 filter 时,注意优先级

Typecho 插件体系不复杂,但命名规范 + 更新流程最容易翻车。先把这两条刻进肌肉记忆,再谈功能花样。

版权声明: 本文首发于 指尖魔法屋-typecho插件开发坑https://blog.thinkmoon.cn/post/253_typecho%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91%E5%9D%91/) 转载或引用必须申明原指尖魔法屋来源及源地址!