检测插件/主题安装(通过上传)

时间:2014-05-01 作者:Christian

我目前正在尝试检测管理员何时上载(并安装)主题或插件。

我写的代码非常脆弱,因为它取决于插件/主题的名称是否与上载的zip文件相同(这种情况很少发生)。

function EventFileUploaded($attachmentID){
    if(isset($_REQUEST[\'action\'])){
        $file = get_attached_file($attachmentID);
        switch($_REQUEST[\'action\']){
            case \'upload-theme\':
                HandleThemeUpload($file);
                break;
            case \'upload-plugin\':
                HandlePluginUpload($file);
                break;
        }
    }
}
add_action(\'delete_attachment\', \'EventFileUploaded\');

function HandleThemeUpload($fileName){
    $themes = wp_get_themes();
    // TODO somehow find which theme in $themes was installed from $fileName
}

function HandlePluginUpload($fileName){
    $plugins = get_plugins();
    // TODO somehow find which plugin in $plugins was installed from $fileName
}
我基本上需要填写上面标记的两个待办事项。这是我使用的代码示例:

$fileName = explode(\'.\', basename($fileName));
foreach(get_plugins() as $pluginFile => $plugin){
    if(strtolower(str_replace(\' \', \'-\', $plugin[\'Name\'])) == $fileName){
        $newPlugin = $plugin;
        break;
    }
}
// use $newPlugin if set
当然,上面的代码在某些情况下会失败。

附言:我不确定该使用什么标签,请随意推荐更好的标签

1 个回复
最合适的回答,由SO网友:Paul G. 整理而成

我认为您在这里的最佳选择是在上传和处理上传的文件时连接到流中。

有一个过滤器(第327行,file.php):

apply_filters( \'wp_handle_upload\', array( \'file\' => $new_file, \'url\' => $url, \'type\' => $type ), \'upload\' );
您可以创建一个过滤器,在该过滤器中,您只需创建一个全局变量来保存当前值:

wp_get_themes();
wp_get_plugins();
然后,在现有功能范围内

HandleThemeUpload() { }
HandlePluginUpload() { }
你可以得到主题和插件again 然后使用array\\u diff()将这些结果与以前的全局结果进行比较:例如。

$NewPlugin = array_diff( $LatestPlugins, $OldGlobalPlugins );
然后你有了新的插件/主题。

希望这有帮助。

结束

相关推荐

如何在WooThemes画布中为注册用户创建不同的导航?

我正在用wordpress和画布主题(来自WooThemes)构建一个网站。我使用顶部导航在用户登录时显示项目。当用户未登录时,您只能看到“成为成员”和“登录”。当用户登录时,他/她会看到另一个带有其他菜单项的导航。我想到了以下解决方案:注册新导航应用钩子检查用户是否登录根据结果,为注册用户应用导航,否则显示其他我将此代码放在我的函数中。php:add_action( \'init\', \'register_top_menu_myisa\', 10 ); function regist