¿Hay una manera para que un plug-in para obtener su número de versión propia?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/361

  •  16-10-2019
  •  | 
  •  

Pregunta

¿Existe una API que pueda llamar, dentro de mi plug-in, para determinar el plug-in de la versión?

Yo sólo quiero tener mi plug-in emiten un comentario html con su propia versión número ... con fines de diagnóstico.

¿Fue útil?

Solución

@ David . Tanto @ Adam Backtrom y @ Viper007Bond dar un consejo bien, así que pensé en tomar su consejo y ver si no podía poner en práctica algo, ver más abajo

Lo que sigue es un plugin llamado WP activo plugins de datos que analiza los metadatos de cabecera para todos los plugins activos se activa en cualquier momento cualquier plugin y almacena todos los metadatos para cada plug-in en una opción de matriz en wp_options. Lo diseñé para los plugins de WordPress y plugins regulares en todo el sitio de múltiples sitios. Puede descargarlo aquí de Gist pero también he copiado el código aquí para su revisión:

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

¿Quieres ver cómo funciona? Aquí hay un archivo de prueba que puede caer en la raíz de su sitio de WordPress (http://example.com/test.php.) Asegúrese de que ha tanto este plugin Akismet y activada antes de probarlo.

<?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 no es exactamente lo que necesita, al menos, hay que darle un buen punto de partida. Espero que esto ayude.

Otros consejos

Puede analizar los metadatos de su plug-in (esas cosas en la parte superior del archivo), pero es mejor para el rendimiento si se acaba de establecer su propia variable de PHP con un número de versión coincidente. Al actualizar el plugin, simplemente actualizar los dos números de versión.

Es un poco más de trabajo para que en el corto plazo, pero mucho mejor en el largo plazo.

There is in the admin screens: get_plugin_data(). In templates, I think you will need the plugin to hold that data in PHP, e.g., set a constant or global or something, and keep that value synchronized with the plugin header version number.

wp-settings.php calls wp_get_active_and_valid_plugins(), which pulls data from the active_plugins site option. This option only contains the path to the plugin file, and wp-settings.php only runs include_once on the file, so it's never parsed for the plugin metadata.

Licenciado bajo: CC-BY-SA con atribución
scroll top