如何以编程方式获取所有活动插件的版本?

时间:2018-03-19 作者:Parthavi Patel

我想检查插件的最新版本是否可用。为此,我需要当前版本的活动插件。如何以编程方式获取所有活动插件的当前版本?

2 个回复
最合适的回答,由SO网友:Frank P. Walentynowicz 整理而成

问题分析

要获取有关已安装插件的信息,提供插件的版本,我们将使用get_plugins() 作用请记住,此函数仅在后端可用,因此我们的代码必须驻留在后端。此函数返回的数据不会告诉我们哪些插件处于活动状态。要筛选出活动插件,我们将使用get_option(\'active_plugins\') 作用它将返回一个简单数组,由返回的数组的键组成get_plugins() 作用

代码

对于我们的方法来说,最好的例子就是实际的代码。我们将创建一个仪表板小部件,显示三列表,显示活动插件的名称、当前版本以及WordPress存储库中的最新版本。让我们创建myDashboardWidget.php 文件,并将下面的代码放入其中。

<?php
if(is_admin()) { // make sure, the following code runs in back end

    // returns version of the plugin represented by $slug, from repository
    function getPluginVersionFromRepository($slug) {
        $url = "https://api.wordpress.org/plugins/info/1.2/?action=plugin_information&request[slugs][]={$slug}";
        $response = wp_remote_get($url); // WPOrg API call   
        $plugins = json_decode($response[\'body\']);

        // traverse $response object
        foreach($plugins as $key => $plugin) {
            $version = $plugin->version;
        }
        return $version;
    }

    // dashboard widget\'s callback
    function activePluginsVersions() {
        $allPlugins = get_plugins(); // associative array of all installed plugins
        $activePlugins = get_option(\'active_plugins\'); // simple array of active plugins

        // building active plugins table
        echo \'<table width="100%">\';
        echo \'<thead>\';
        echo \'<tr>\';
        echo \'<th width="50%" style="text-align:left">Plugin</th>\';
        echo \'<th width="20%" style="text-align:left">currVer</th>\';
        echo \'<th width="20%" style="text-align:left">repoVer</th>\';
        echo \'</tr>\';
        echo \'</thead>\';
        echo \'<tbody>\';

        // traversing $allPlugins array
        foreach($allPlugins as $key => $value) {
            if(in_array($key, $activePlugins)) { // display active only
                echo \'<tr>\';
                echo "<td>{$value[\'Name\']}</td>";
                echo "<td>{$value[\'Version\']}</td>";
                $slug = explode(\'/\',$key)[0]; // get active plugin\'s slug

                // get newest version of active plugin from repository
                $repoVersion = getPluginVersionFromRepository($slug);

                echo "<td>{$repoVersion}</td>";
                echo \'</tr>\';
            }
        }
        echo \'</tbody>\';
        echo \'</table>\';
    }     

    // widget\'s registration
    function fpwAddDashboardWidget() {
        wp_add_dashboard_widget(
            \'active_plugins_versions\', // widget\'s ID
            \'Active Plugins Versions\', // widget\'s title
            \'activePluginsVersions\'    // widget\'s callback (content)
        );  
    }
    add_action(\'wp_dashboard_setup\', \'fpwAddDashboardWidget\');
}
现在,将此文件放入/wp-content/mu-plugins/ 目录

已解释代码

阅读内的注释myDashboardWidget.php 文件

Note: 如果表的第三列中没有显示版本,则插件不在存储库中(高级或已停用)。

代码效率

此示例代码的效率可以大大提高。为每个插件发出WPOrg API请求。/plugins/info/1.2/ API版本,只需一个请求即可获取所有插件段塞的信息。

SO网友:Cristian

您可以使用以下代码:

<?php 

// Check if get_plugins() function exists. This is required on the front end of the
// site, since it is in a file that is normally only loaded in the admin.
if ( ! function_exists( \'get_plugins\' ) ) {
    require_once ABSPATH . \'wp-admin/includes/plugin.php\';
}

$all_plugins = get_plugins();
print_r( $all_plugins );
希望这有帮助。

结束

相关推荐

WordPress Plugins won't save

我有一个WordPress网站,我刚刚接管了一个客户,因此我没有能力与以前的网站管理员/开发人员交谈。该网站使用的是YOOtheme对Subway稍加修改的版本。为了更新插件位置,Subway的一部分有“小部件选项”。我无法更改外观或小部件显示的页面,因为我无法保存任何内容。它看起来像已保存,但没有保存,或者您会在保存按钮旁边看到“加载循环”,它一直在运行。Things to note:<WordPress和插件是最新的。在我们转移到新服务器之前,插件是可更新的。新服务器有一个max\\u inpu