Esiste un modo per un plug-in per ottenere il proprio numero di versione?
-
16-10-2019 - |
Domanda
C'è un'API che posso chiamare, all'interno del mio plug-in, per determinare il plug-in di versione?
Voglio solo avere il mio plug-in Emit un commento HTML con un proprio numero di versione ... per scopi diagnostici.
Soluzione
@ David :. Sia @ Adamo Backtrom e @ Viper007Bond dare qualche consiglio buono, quindi ho pensato di prendere i loro consigli e vedere se non ho potuto implementare qualcosa, vedi sotto
Quello che segue è un plugin chiamato WP attivo Plugin dati , che analizza i metadati intestazione per tutti i plugin attivi in ??qualsiasi momento alcun plugin è attivato e memorizza tutti i metadati per ogni plugin in un'opzione matrice in wp_options
. L'ho progettato per entrambi i plugin di WordPress regolari e plugin a livello di sito multisito. È possibile scaricarlo qui da Gist ma ho anche copiato il codice qui per la tua recensione:
<?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);
}
Vuoi vedere come funziona? Ecco un file di prova si può cadere nella root del vostro sito WordPress (http://example.com/test.php
.) Assicurarsi di aver sia questo plugin Akismet e attivato prima di testarlo.
<?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));
Se non è esattamente ciò che serve almeno dovrebbe dare un buon punto di partenza. Spero che questo aiuti.
Altri suggerimenti
È possibile analizzare i metadati del vostro plugin (che roba nella parte superiore del file), ma è meglio per le prestazioni se si imposta la propria variabile PHP con un numero di versione corrispondente. Quando si aggiorna il plugin, solo aggiornare entrambi i numeri di versione.
E 'un po' più lavoro per voi nel breve termine, ma molto meglio nel lungo periodo.
Non c'è negli schermi di amministrazione: get_plugin_data()
. In modelli, credo che è necessario il plugin per presa che i dati in PHP, per esempio, impostare una costante o globale o qualcosa, e mantenere tale valore sincronizzato con il numero di versione di intestazione plugin.
chiamate wp-settings.php
wp_get_active_and_valid_plugins()
, che tira i dati dall'opzione sito active_plugins
. Questa opzione contiene solo il percorso del file plugin, e wp-settings.php
gira solo include_once
sul file, quindi non è mai analizzato per i metadati plugin.