install_plugin_install_status( array|object $api, bool $loop = false )
Determine the status we can perform on a plugin.
Parameters
- $api
-
(Required) Data about the plugin retrieved from the API.
- $loop
-
(Optional) Disable further loops.
Default value: false
Return
(array) Plugin installation status data.
- 'status'
(string) Status of a plugin. Could be one of 'install', 'update_available', 'latest_installed' or 'newer_installed'. - 'url'
(string) Plugin installation URL. - 'version'
(string) The most recent version of the plugin. - 'file'
(string) Plugin filename relative to the plugins directory.
Source
File: wp-admin/includes/plugin-install.php
function install_plugin_install_status($api, $loop = false) {
// This function is called recursively, $loop prevents further loops.
if ( is_array($api) )
$api = (object) $api;
// Default to a "new" plugin
$status = 'install';
$url = false;
$update_file = false;
$version = '';
/*
* Check to see if this plugin is known to be installed,
* and has an update awaiting it.
*/
$update_plugins = get_site_transient('update_plugins');
if ( isset( $update_plugins->response ) ) {
foreach ( (array)$update_plugins->response as $file => $plugin ) {
if ( $plugin->slug === $api->slug ) {
$status = 'update_available';
$update_file = $file;
$version = $plugin->new_version;
if ( current_user_can('update_plugins') )
$url = wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=' . $update_file), 'upgrade-plugin_' . $update_file);
break;
}
}
}
if ( 'install' == $status ) {
if ( is_dir( WP_PLUGIN_DIR . '/' . $api->slug ) ) {
$installed_plugin = get_plugins('/' . $api->slug);
if ( empty($installed_plugin) ) {
if ( current_user_can('install_plugins') )
$url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $api->slug), 'install-plugin_' . $api->slug);
} else {
$key = array_keys( $installed_plugin );
$key = reset( $key ); //Use the first plugin regardless of the name, Could have issues for multiple-plugins in one directory if they share different version numbers
$update_file = $api->slug . '/' . $key;
if ( version_compare($api->version, $installed_plugin[ $key ]['Version'], '=') ){
$status = 'latest_installed';
} elseif ( version_compare($api->version, $installed_plugin[ $key ]['Version'], '<') ) {
$status = 'newer_installed';
$version = $installed_plugin[ $key ]['Version'];
} else {
//If the above update check failed, Then that probably means that the update checker has out-of-date information, force a refresh
if ( ! $loop ) {
delete_site_transient('update_plugins');
wp_update_plugins();
return install_plugin_install_status($api, true);
}
}
}
} else {
// "install" & no directory with that slug
if ( current_user_can('install_plugins') )
$url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $api->slug), 'install-plugin_' . $api->slug);
}
}
if ( isset($_GET['from']) )
$url .= '&from=' . urlencode( wp_unslash( $_GET['from'] ) );
$file = $update_file;
return compact( 'status', 'url', 'version', 'file' );
}
Changelog
Version | Description |
---|---|
WP-3.0.0 | Introduced. |