Typecho 文档:检查在用插件是否使用了指定接口
适用程序:Typecho
程序版本:1.2.1
文档作者:Lopwon
作者博客:Lopwon.com
发布页面:Lopwon.com/attachment/3863/
许可方式:CC BY-NC-SA
注意:此文档源于作者在博客改造中的一些经验总结,转载还请署名。
敬告:此文档操作涉及程序核心文件的修改,作者不对你在使用中产生的任何问题造成的不良后果,承担责任。
文档说明
不同插件大概率会使用相同的接口,而有些接口在同时使用时会存在冲突,坊间有通过给接口使用 _999 标记来提高优先级,但是,似乎会排挤其他使用相同接口的插件,导致失效。以下提供另一种方式,即:当检查到所有启用的插件中,如果使用了指定的接口时,则做出提示。如此由用户决定是否停用有冲突的插件,或不启用当前的插件。
使用方法
A 涉及文件
usr/plugins/***/Plugin.php
B 改造文件
作用:获取使用了指定接口的插件信息
1. 打开文件 usr/plugins/***/Plugin.php 添加以下代码(留意注释,以及按需修改):
$interface = 'Widget_Abstract_Contents:contentEx'; // 目标接口,请自定义,如 Widget_Archive:header
$plugin = Typecho_Plugin::export(); // 获取所有已启用的插件信息
$activated = $plugin['activated']; // 获取 activated 信息
$pluginNames = [];
foreach ($activated as $pluginName => $pluginDetails) {
if (isset($pluginDetails['handles'][$interface])) { // 检查插件的 handles 中是否包含目标接口
$pluginNames[] = $pluginName;
}
}
if (!empty($pluginNames)) {
echo '包含接口 ' . $interface . ' 的插件名称:' . implode(', ', $pluginNames);
} else {
echo '没有插件包含接口 ' . $interface;
}
至此,在判断内可以执行更多的操作。