プラグインのバージョン番号を動的に取得したい


10

どうも、私は最近、プラグインに「更新中」の変更リスト表示(非常にクール)を実装するようにW3TCを変更しましたが、避けたいコードが少し厄介です。

このファイルの先頭を見ると、次のコードが表示されます。

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

いや。:P

これは最新の状態に保つ必要があるため、関数はプラグインと現在の安定バージョンとの間で差分を取ることができます。

コーデックスをよく読んだところ、見つかりませんが、プラグインのバージョンを取得するためのAPI関数がGOTにあります。

手がかりはありますか?

回答:



14

get_plugin_data()という関数があります。必要な場合は、メインプラグインファイル内から呼び出してみてください。

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

しかし、他の質問への回答で述べられているように、PHP変数を定義するだけでパフォーマンスが向上します。


ありがとう!これは一度だけ呼び出され、curl呼び出しが含まれるため、パフォーマンスはそれほど重要ではありません。あちこちにバージョン番号の複数のコピーがあることで問題が発生しました。
Chris Marshall、

1
動作しないようです。この警告が表示され Call to undefined function get_plugin_data()ます。
アリ

@AriSusantoフロントエンドで使用しようとしていますか?WPプラグイン管理関数は、adminセクションでのみ定義されます。フロントエンドでこれを使用する必要がある場合は、ファイルを含める必要がありますwp-admin/includes/plugin.php
goldenapples 2013

いいえ、管理パネルで使用します。
Ari

未定義のエラーがある場合は、get_plugin_data関数を使用できます。パフォーマンスのために、私はここにコメントを追加しました:wordpress.stackexchange.com/questions/361/...
baptx

9

の代替get_plugin_data()get_file_data()で、追加のファイルをロードするオーバーヘッドなしで使用できます。

これをメインのプラグインファイルに追加するだけです。

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

ボンネットの下では、get_file_dataいくつかの包丁スキャンは非常に高性能です。

そして必要に応じて定数を定義します:

define ( 'YOURPLUGIN_CURRENT_VERSION', $plugin_version );

パフォーマンスについては、手動でバージョン番号を記述する方が良いと思いますか?(ここで説明されているように:wordpress.stackexchange.com/questions/361/…
baptx

@baptxはい、ただし、Wordpressがすべてのリクエストで実行する他のすべてのことを考えると、これは無視できる最適化の1つです。言い換えれば、それは問題ではありません
ポールコル。

1

考えられる解決策の1つは正規表現です。

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

この正規表現は少し速いget_file_data()が、一般的には気付かないことを言及する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.