Created
August 15, 2010 05:42
-
-
Save mikeschinkel/525130 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
Plugin Name: WP Active Plugins Data | |
Plugin URI: http://mikeschinkel.com/wordpress-plugins/wp-active-plugins-data/ | |
Description: Loads Plugin Data on Plugin Activation and Persists to wp_options for quick retrieval. | |
Version: 0.1 | |
Author: Mike Schinkel | |
Author URI: http://mikeschinkel.com | |
Note: Written for http://wordpress.stackexchange.com/questions/361/is-there-a-way-for-a-plug-in-to-get-its-own-version-number | |
*/ | |
require_once(ABSPATH.'wp-admin/includes/plugin.php'); | |
function get_active_plugin_version($plugin_path_file, $sitewide = false) { | |
return get_active_plugin_attribute($plugin_path_file,'Version'); | |
} | |
function get_active_plugin_attribute($plugin_path_file, $attribute) { | |
$all_plugins_data = get_active_plugins_data($plugin_path_file,$sitewide); | |
return (isset($all_plugins_data[$attribute]) ? $all_plugins_data[$attribute] : false); | |
} | |
function get_active_plugins_data($plugin_path_file, $sitewide = false) { | |
$failsafe = false; | |
$plugin = plugin_basename(trim($plugin_path_file)); | |
$sitewide = (is_multisite() && ( $sitewide || is_network_only_plugin($plugin))); | |
if ($sitewide) { | |
$all_plugins_data = get_site_option('active_sitewide_plugin_data',array()); | |
} else { | |
$all_plugins_data = get_option('active_plugin_data',array()); | |
} | |
if (!$failsafe && !is_array($all_plugins_data) || count($all_plugins_data)==0) { | |
$failsafe = true; // Don't risk infinite recursion | |
if ($sitewide) { | |
$active_plugins = get_site_option('active_sitewide_plugins',array()); | |
} else { | |
$active_plugins = get_option('active_plugins',array()); | |
} | |
persist_active_plugin_data(null,$active_plugins,$sitewide); | |
$all_plugins_data = get_active_plugin_version($plugin_path_file,$sitewide); | |
} | |
return $all_plugins_data[$plugin_path_file]; | |
} | |
add_action('update_site_option_active_sitewide_plugins','persist_sitewide_active_plugin_data',10,2); | |
function persist_sitewide_active_plugin_data($option, $plugins) { | |
persist_active_plugin_data(null,$plugins,'sitewide'); | |
} | |
add_filter('update_option_active_plugins','persist_active_plugin_data',10,2); | |
function persist_active_plugin_data($old_plugins, $new_plugins, $sitewide=false) { | |
$active_plugin_data = array_flip($new_plugins); | |
$plugin_dir = WP_PLUGIN_DIR; | |
foreach($new_plugins as $plugin) { | |
$active_plugin_data[$plugin] = get_plugin_data("$plugin_dir/$plugin"); | |
} | |
if ($sitewide) | |
update_site_option('active_sitewide_plugin_data',$active_plugin_data); | |
else | |
update_site_option('active_plugin_data',$active_plugin_data); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment