让zblog插件挂载的接口优先级为最高
在zblog下,我们一般挂载接口都是用 Add_Filter_Plugin 函数,如果有很多个插件挂了同样的接口,当系统在调用时,会以此按照挂载的顺序来调用插件。
有些时候,我们的插件需要调用最原始的数据,如果我们挂载的接口不是最先被调用,这样可能就无法得到最原始的数据,最终可能会导致插件达不到想要的效果。
有两种方法可以提高优先级:
方法一:
挂载接口时,不要将函数写在 ActivePlugin_xxx 函数里,直接写在函数外。zblog加载插件的原理是,系统在初始化时,先引入所有插件的include.php文件,再依次调用每个插件的 ActivePlugin_xxx 函数来挂载接口。这样写在此函数外,include文件被引用时就会被率先挂载
方法二:
某些特殊的情况下,我们的接口并不需要zblog在初始化时添加挂载,而是需要的时候才添加,这样如果接口需要被最先调用,可以用下面的函数来添加。
Add_Filter_Plugin_First('Filter_Plugin_xxx_xxx','xxx');
function Add_Filter_Plugin_First($plugname, $functionname, $exitsignal = PLUGIN_EXITSIGNAL_NONE){
$GLOBALS['hooks'][$plugname] = array_reverse(UsingPluginFilter($plugname), true);
Add_Filter_Plugin($plugname, $functionname, $exitsignal);
$GLOBALS['hooks'][$plugname] = array_reverse($GLOBALS['hooks'][$plugname], true);
return true;
}
原理就是将接口钩子数组反转后挂载接口,然后再反转数组,这样我们的接口就被添加在第一位了,也就会最先调用