Typecho ShortLinks 插件与 AISummary 插件冲突失效的解决方案
AI 摘要
Typecho 中 ShortLinks 与 AISummary 插件因同时占用 Widget_Abstract_Contents 的 contentEx 钩子而冲突,导致外链转换失效。解决方案为给 AISummary 的钩子追加唯一后缀,如 contentEx_AISummary,避免重复注册,两插件即可并存。
事情是这样的。
我的博客引入了两个插件:
- ShortLinks:把文章内容中的外部链接转换为指定内部链接。
- AISummary:调用ChatGPT、Kimi Chat等AI接口,智能提取文章摘要。
然后出现了这样的情况:两个插件同时启用后,AISummary 插件生效了,可以正常在文章头部显示文章摘要,但是 ShortLinks 插件却失效了,所有的外链并没有自动处理。
其实这个问题大概率就是因为插件冲突了,经过检查,也确实是因为插件冲突了。
ShortLinks 插件的 Plugin.php 中,有这一行代码:
Typecho_Plugin::factory('Widget_Abstract_Contents')->contentEx = array('ShortLinks_Plugin', 'replace');AISummary 插件的 Plugin.php 中,有这一行代码:
Typecho_Plugin::factory('Widget_Abstract_Contents')->contentEx = array('AISummary_Plugin', 'customContent');在插件中使用 Widget_Abstract_Contents 接口,出现插件冲突,通常是因为不同插件对同一钩子(contentEx)进行了重复注册或存在命名冲突。
解决冲突问题也很简单,只需要把钩子名称修改掉,确保唯一性即可。
比如:
// 原代码
Typecho_Plugin::factory('Widget_Abstract_Contents')->excerptEx = array('AISummary_Plugin', 'customExcerpt');
Typecho_Plugin::factory('Widget_Abstract_Contents')->contentEx = array('AISummary_Plugin', 'customContent');
// 修改后的代码
Typecho_Plugin::factory('Widget_Abstract_Contents')->excerptEx_AISummary = array('AISummary_Plugin', 'customExcerpt');
Typecho_Plugin::factory('Widget_Abstract_Contents')->contentEx_AISummary = array('AISummary_Plugin', 'customContent');修改完成后,禁用插件后重新启动插件即可。
- 上一篇:Typecho default-ultra 主题使用说明与注意事项
- 下一篇:没有了