最合适的回答,由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版本,只需一个请求即可获取所有插件段塞的信息。