Question

Y at-il une API que je peux appeler, dans mon plug-in, pour déterminer le plug-in de la version?

Je veux juste avoir mon plug-in émettre un commentaire html avec son propre numéro de version ... à des fins de diagnostic.

Était-ce utile?

La solution

@ David :. Les deux @Adam Backtrom et @ Viper007Bond donner quelques bons conseils pour que je pensais que je prendrais leurs conseils et voir si je ne pouvais pas mettre en œuvre quelque chose, voir ci-dessous

Ce qui suit est un plugin appelé WP active Plugins de données qui analyse les métadonnées d'en-tête pour tous les plugins actifs à tout moment un plugin est activé et il stocke toutes les métadonnées pour chaque plug-in dans une option de réseau dans wp_options. Je l'ai conçu pour les deux plugins WordPress réguliers et l'ensemble du site multisites plugins. Vous pouvez télécharger ici de fond mais j'ai aussi copié le code ici pour votre avis:

<?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);
}

Vous voulez voir comment cela fonctionne? Voici un fichier de test que vous pouvez déposer à la racine de votre site WordPress (de http://example.com/test.php.) Assurez-vous que vous avez à la fois ce plugin et Akismet activé avant de le tester.

<?php
/*
* test.php - Place in root of WordPress website.
*
* Before running be sure to activate both Akismet and the WP Active Plugin Data plugin
*
*/

include "wp-load.php";

header('Content-type:text/plain');
$akismet = "akismet/akismet.php";
echo "Akismet Version: " . get_active_plugin_version($akismet);
echo "\n\nAkismet Description: " . get_active_plugin_attribute($akismet,'Description');
echo "\n\nAll Akismet Data:\n";
print_r(get_active_plugins_data($akismet));

Si ce n'est pas exactement ce dont vous avez besoin au moins il devrait vous donner un bon point de départ. Espérons que cela aide.

Autres conseils

Vous pouvez analyser les métadonnées de votre plug-in (qui stuff en haut du fichier), mais il vaut mieux pour les performances si vous venez de définir votre propre variable PHP avec un numéro de version correspondant. Lorsque vous mettez à jour le plug-in, simplement mettre à jour les numéros de version.

Il est un peu plus de travail pour vous à court terme, mais beaucoup mieux à long terme.

Il y a dans les écrans d'administration: get_plugin_data(). Dans les modèles, je pense que vous aurez besoin du plug-in Conclure que les données en PHP, par exemple, définir une constante ou globale ou quelque chose, et conserver cette valeur synchronisée avec le numéro de version d'en-tête de plug-in.

appels wp-settings.php wp_get_active_and_valid_plugins(), qui extrait des données de l'option du site active_plugins. Cette option ne contient que le chemin vers le fichier de plug-in, et wp-settings.php ne fonctionne que include_once sur le fichier, il n'a jamais analysé pour les métadonnées de plug-in.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top