Dinamik olarak bir eklenti sürüm numarası almak istiyorum


10

Selam Geçenlerde de, (çok serin) "in-güncelleme" Değişiklik listesi ekranı uygulamaya W3TC cribbed benim eklenti ama kaçınmak tercih ediyorum kod garip bir bit var.

Bu dosyanın üst kısmına bakarsanız aşağıdaki kodu görürsünüz:

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

Ick. : P

Bunun güncel tutulması gerekir, böylece fonksiyon eklentiniz ve mevcut kararlı sürüm arasında delta yapabilir.

Ben Codex perused, ve bulamıyorum, ama bir eklentinin sürümünü almak için bir API işlevi GOT vardır .

Herhangi bir ipucu var mı?

Yanıtlar:



14

Get_plugin_data () adında bir işlev vardır . Gerekirse bunu ana eklenti dosyasından aramayı deneyin:

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

Ancak diğer sorunun cevaplarında da belirtildiği gibi, performansın sadece bir PHP değişkenini yaptığınız gibi tanımlaması daha iyidir.


Teşekkürler! Umarım, performans sadece bir kez çağrıldığından ve bir kıvrılma çağrısı içerdiğinden, büyük bir anlaşma olmaz. Her yerde sürüm numarasının birden fazla kopyasına sahip olmakla başım belaya girdi.
Chris Marshall

1
işe yaramıyor gibi görünüyor. Bu uyarıyı alıyorum Call to undefined function get_plugin_data().
Ari

@AriSusanto Ön uçta kullanmaya mı çalışıyorsunuz? WP eklentisi yönetim işlevleri yalnızca yönetici bölümünde tanımlanır. Bunu ön uçta kullanmanız gerekiyorsa dosyayı eklemeniz gerekir wp-admin/includes/plugin.php.
goldenapples

Hayır, yönetim panelinde kullanıyorum.
Ari

Tanımlanmamış bir hatayla karşılaşırsanız, get_plugin_data işlevini kullanabilirsiniz.
Performans için

9

Alternatif olarak get_plugin_data(), ek dosya yükleme yükü olmadan kullanılabilen get_file_data () kullanılır.

Bunu ana eklenti dosyanıza eklemeniz yeterlidir:

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

Kaputun altında, get_file_dataoldukça performanslı olmak için bazı cleaver taramalar var.

Ve gerekirse sabitinizi tanımlayın:

define ( 'YOURPLUGIN_CURRENT_VERSION', $plugin_version );

Performans için sürüm numarasını elle yazmak daha iyi olur sanırım? (burada açıklandığı gibi: wordpress.stackexchange.com/questions/361/… )
baptx

@baptx evet, ancak bu, Wordpress'in her istekte yaptığı her şey göz önüne alındığında bir optimizasyon ihmal edilebilir. Başka bir deyişle, önemli değil
paulcol.

1

Olası bir çözüm regex olabilir:

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

Bu normal ifadenin biraz daha hızlı olduğunu belirtmeliyim, get_file_data()ancak genel olarak fark etmeyeceksiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.