让zblog插件挂载的接口优先级为最高

zblog下,我们一般挂载接口都是用 Add_Filter_Plugin 函数,如果有很多个插件挂了同样的接口,当系统在调用时,会以此按照挂载的顺序来调用插件。

有些时候,我们的插件需要调用最原始的数据,如果我们挂载的接口不是最先被调用,这样可能就无法得到最原始的数据,最终可能会导致插件达不到想要的效果。

有两种方法可以提高优先级:

方法一:

挂载接口时,不要将函数写在 ActivePlugin_xxx 函数里,直接写在函数外。zblog加载插件的原理是,系统在初始化时,先引入所有插件的include.php文件,再依次调用每个插件的 ActivePlugin_xxx 函数来挂载接口。这样写在此函数外,include文件被引用时就会被率先挂载

让zblog插件挂载的接口优先级为最高,zblog,zblog插件,php,第1张

方法二:

某些特殊的情况下,我们的接口并不需要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;
}

原理就是将接口钩子数组反转后挂载接口,然后再反转数组,这样我们的接口就被添加在第一位了,也就会最先调用