Ich möchte eine Plugin-Versionsnummer dynamisch erhalten

10

Grüß dich, ich habe kürzlich W3TC gekrippt, um eine "In-Update" -Änderungslistenanzeige (sehr cool) in meinem Plugin zu implementieren , aber es gibt einen unangenehmen Code, den ich lieber vermeiden würde.

Wenn Sie sich den Anfang dieser Datei ansehen , sehen Sie den folgenden Code:

define ( 'BMLT_CURRENT_VERSION', '2.1.16' ); // This needs to be kept in synch with the version above.

Ick. : P.

Das muss auf dem neuesten Stand gehalten werden, damit die Funktion zwischen Ihrem Plugin und der aktuellen stabilen Version deltas kann.

Ich habe den Codex durchlas, und kann es nicht finden, aber es hat GOT für das Erhalten der Version eines Plugins eine API - Funktion sein.

Irgendwelche Hinweise?

Chris Marshall
quelle

Antworten:

14

Es gibt eine Funktion namens get_plugin_data () . Versuchen Sie, dies aus der Haupt-Plugin-Datei heraus aufzurufen, wenn Sie Folgendes benötigen:

$plugin_data = get_plugin_data( __FILE__ );
$plugin_version = $plugin_data['Version'];

Aber wie in den Antworten auf die andere Frage gesagt, ist es für die Leistung besser, einfach eine PHP-Variable zu definieren, während Sie dies tun.

goldene Äpfel
quelle
Vielen Dank! Hoffentlich wird die Leistung keine große Sache sein, da dies nur einmal aufgerufen wird und einen Curl-Call beinhaltet. Ich bin gerade in Schwierigkeiten geraten, weil ich überall mehrere Kopien der Versionsnummer habe.
Chris Marshall
1
es scheint nicht zu funktionieren. Ich bekomme diese Warnung Call to undefined function get_plugin_data().
Ari
@AriSusanto Versuchen Sie es auf dem Frontend zu verwenden? Die Verwaltungsfunktionen des WP-Plugins werden nur im Admin-Bereich definiert. Wenn Sie dies im Frontend verwenden müssen, müssen Sie die Datei einschließen wp-admin/includes/plugin.php.
Goldenapples
Nein, ich benutze es im Administrationsbereich.
Ari
Wenn Sie den undefinierten Fehler haben, können Sie die Funktion get_plugin_data verwenden. Für die Leistung habe ich hier einen Kommentar hinzugefügt: wordpress.stackexchange.com/questions/361/…
Taufe
9

Eine Alternative zu get_plugin_data()ist get_file_data () , die ohne die Overhead Laden zusätzliche Dateien zur Verfügung steht.

Fügen Sie dies einfach Ihrer Haupt-Plugin-Datei hinzu:

$plugin_data = get_file_data(__FILE__, array('Version' => 'Version'), false);
$plugin_version = $plugin_data['Version'];

Unter der Haube get_file_datascannt ein Hackmesser, um ziemlich performant zu sein.

Und wenn nötig, definieren Sie Ihre Konstante:

define ( 'YOURPLUGIN_CURRENT_VERSION', $plugin_version );
Paulcol.
quelle
Ich denke für die Leistung ist es auch besser, die Versionsnummer manuell zu schreiben? (wie hier erklärt: wordpress.stackexchange.com/questions/361/… )
Taufe
@baptx ja, dies ist jedoch eine Optimierung, die vernachlässigbar wäre, wenn man bedenkt, was Wordpress sonst bei jeder Anfrage tut. Mit anderen Worten, es spielt keine Rolle
Paulcol.
1

Eine mögliche Lösung kann Regex sein:

$plugin_version = NULL;
if(preg_match('/\*[\s\t]+?version:[\s\t]+?([0-9.]+)/i',file_get_contents( __FILE__ ), $v))
    $plugin_version = $v[1];

Ich muss erwähnen, dass diese Regex etwas schneller ist als, get_file_data()aber im Allgemeinen werden Sie es nicht bemerken.

Ivijan Stefan Stipić
quelle