Typecho ShortLinks 插件与 AISummary 插件冲突失效的解决方案
AI 摘要
Typecho 中 ShortLinks 与 AISummary 插件因同时占用 Widget_Abstract_Contents 的 contentEx 钩子而冲突,导致外链转换失效。解决方案为给 AISummary 的钩子追加唯一后缀,如 contentEx_AISummary,避免重复注册,两插件即可并存。
事情是这样的。
有 default-ultra 主题的用户的博客引入了两个插件:
- 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');修改完成后,禁用插件后重新启动插件即可。
https://docs.typecho.org/plugins/hooks#:~:text=contentEx,%E8%BF%87%E6%BB%A4
根据官方文档是 AISummary 丢弃了 ShortLinks 的处理结果导致的,你可以看看 ShortLinks replace 函数开头那一行
不过你这个改接口 suffix 也行是吗?学到了。我只知道可以改权重
我这样也可以 :)
有其他小伙伴也有遇到插件冲突,改掉就好了。