Gibt es eine Möglichkeit für ein Plug-In, seine eigene Versionsnummer zu erhalten?

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

  •  16-10-2019
  •  | 
  •  

Frage

Gibt es eine API, die ich in meinem Plug-In anrufen kann, um die Version des Plug-in zu bestimmen?

Ich möchte nur, dass mein Plug-in einen HTML-Kommentar mit seiner eigenen Versionsnummer ausgibt ... für diagnostische Zwecke.

War es hilfreich?

Lösung

@David: Sowohl @Adam Backtrom als auch @Viper007Bond geben gute Ratschläge, daher dachte ich, ich würde ihren Rat annehmen und sehen, ob ich nichts umsetzen kann, siehe unten.

Was folgt, ist ein Plugin genannt WP Active Plugins -Daten Dadurch wird die Header -Metadaten für alle aktiven Plugins analysiert, wenn jedes Plugin aktiviert wird und die gesamte Metadaten für jedes Plugin in eine Array -Option in gespeichert werden wp_options. Ich habe es sowohl für reguläre WordPress-Plugins als auch für ebellose Plugins mit mehreren Plätzen entworfen. Du kannst Laden Sie es hier von GIST herunter Ich habe den Code hier auch für Ihre Bewertung kopiert:

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

Möchten Sie sehen, wie es funktioniert? Hier ist eine Testdatei, die Sie in der Stammin Ihrer WordPress -Site fallen können (http://example.com/test.php.) Stellen Sie sicher, dass Sie dieses Plugin und Akismet aktivieren, bevor Sie es testen.

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

Wenn es nicht genau das ist, was Sie zumindest brauchen, sollte es Ihnen einen guten Ausgangspunkt geben. Hoffe das hilft.

Andere Tipps

Sie können die Meta -Daten Ihres Plugins analysieren (dieses Zeug oben in der Datei), aber es ist besser für die Leistung, wenn Sie nur Ihre eigene PHP -Variable mit einer passenden Versionsnummer festlegen. Wenn Sie das Plugin aktualisieren, aktualisieren Sie einfach beide Versionsnummern.

Es ist kurzfristig etwas mehr Arbeit für Sie, aber langfristig viel besser.

Es gibt in den Administratorbildschirmen: get_plugin_data(). In Vorlagen benötigen Sie das Plugin, um diese Daten in PHP, z. B. eine konstante oder globale oder so etwas festzulegen und diesen Wert mit der Versionsnummer der Plugin -Header synchronisiert zu halten.

wp-settings.php Anrufe wp_get_active_and_valid_plugins(), was Daten aus dem zieht active_plugins Site -Option. Diese Option enthält nur den Pfad zur Plugin -Datei und wp-settings.php Nur läuft include_once Auf der Datei wird es also nie für die Plugin -Metadaten analysiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top