Saya Ingin Mendapatkan Nomor Versi Plugin secara Dinamis

10

Howdy, saya baru-baru ini mengutip W3TC untuk mengimplementasikan tampilan daftar perubahan "dalam pembaruan" (sangat keren), di plugin saya , tetapi ada sedikit kode yang aneh yang saya ingin hindari.

Jika Anda melihat bagian atas file ini , Anda akan melihat kode berikut:

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

Ya : P

Itu perlu terus diperbarui, agar fungsinya dapat menghapus antara plugin Anda, dan versi stabil saat ini.

Saya telah membaca dengan teliti Codex, dan tidak dapat menemukannya, tetapi ada GOT untuk menjadi fungsi API untuk mendapatkan versi plugin.

Ada petunjuk?

Chris Marshall
sumber

Jawaban:

14

Ada fungsi yang disebut get_plugin_data () . Coba panggil ini dari dalam file plugin utama jika Anda perlu:

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

Tetapi seperti yang dikatakan dalam jawaban untuk pertanyaan lain, lebih baik kinerjanya untuk hanya mendefinisikan variabel PHP seperti yang Anda lakukan.

lempengan emas
sumber
Terima kasih! Semoga kinerja tidak menjadi masalah besar, karena ini hanya disebut sekali, dan melibatkan panggilan curl. Saya baru saja mendapat masalah karena memiliki banyak salinan nomor versi di semua tempat.
Chris Marshall
1
sepertinya tidak berhasil. Saya mendapat peringatan ini Call to undefined function get_plugin_data().
Ari
@AriSusanto Apakah Anda mencoba menggunakannya di ujung depan? Fungsi administrasi plugin WP hanya ditentukan di bagian admin. Jika Anda perlu menggunakan ini di ujung depan Anda harus memasukkan file wp-admin/includes/plugin.php.
goldenapples
Tidak, saya menggunakannya di panel administrasi.
Ari
Jika Anda memiliki kesalahan yang tidak terdefinisi, Anda dapat menggunakan fungsi get_plugin_data. Untuk kinerja, saya menambahkan komentar di sini: wordpress.stackexchange.com/questions/361/…
baptx
9

Sebuah alternatif untuk get_plugin_data()ini get_file_data () yang tersedia tanpa overhead loading file tambahan.

Cukup tambahkan ini ke file plugin utama Anda:

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

Di bawah kapnya get_file_datamelakukan beberapa pemindaian golok menjadi cukup performant.

Dan jika perlu, tetapkan konstanta Anda:

define ( 'YOURPLUGIN_CURRENT_VERSION', $plugin_version );
paulcol.
sumber
Saya kira untuk kinerja juga lebih baik untuk menulis nomor versi secara manual? (seperti dijelaskan di sini: wordpress.stackexchange.com/questions/361/… )
baptx
@aptx ya, bagaimanapun, ini adalah salah satu optimasi akan diabaikan mengingat semua yang dilakukan Wordpress pada setiap permintaan. Dengan kata lain, itu tidak masalah
paulcol.
1

Salah satu solusi yang mungkin adalah regex:

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

Harus menyebutkan bahwa regex ini sedikit lebih cepat daripada get_file_data()tetapi secara umum Anda tidak akan menyadarinya.

Ivijan Stefan Stipic
sumber