it-swarm.asia

Bir eklentinin kendi sürüm numarasını almasının bir yolu var mı?

Eklentinin sürümünü belirlemek için eklentimin içinde arayabileceğim bir API var mı?

Sadece eklentimin tanı amaçlı, kendi sürüm numarasına sahip bir HTML yorumu yayınlamasını istiyorum.

8
David G

@david : Her ikisi de @Adam Backtrom ve @ Viper007Bond bazı iyi tavsiyeler veriyor, bu yüzden onların tavsiyelerini alıp bir şey uygulayamayacağımı göreyim dedim, aşağıya bakınız.

WP Aktif Eklentiler Verileriadlı bir eklentiyi izleyenler: _ herhangi bir eklenti etkinleştirildiğinde tüm aktif eklentiler için üstbilgi meta verilerini ayrıştırır ve her eklenti için tüm meta verileri depolar. eklentisi, wp_options içindeki bir dizi seçeneğine eklenir. Hem normal WordPress eklentileri hem de site genelinde çok siteli eklentiler için tasarladım. buradan Gist'ten indirebilirsiniz fakat incelemeniz için buraya da kodu kopyaladım:

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

Nasıl çalıştığını görmek ister misiniz? İşte WordPress sitenizin kök dizinine bırakabileceğiniz bir test dosyası (http://example.com/test.php.) Test etmeden önce hem bu eklentinin hem de Akismet'in etkin olduğundan emin olun.

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

Tam olarak ihtiyacınız olan şey değilse, en azından size iyi bir başlangıç ​​noktası vermelidir. Bu yardımcı olur umarım.

9
MikeSchinkel

Eklentinizin meta verilerini ayrıştırabilirsiniz (dosyanın üstündedir), ancak eşleşen bir sürüm numarası ile kendi PHP değişkenini ayarlamanız performans için daha iyidir. Eklentiyi güncellediğinizde, sadece iki versiyon numarasını da güncelleyin.

Kısa vadede sizin için biraz daha fazla iş, ancak uzun vadede çok daha iyi.

2
Viper007Bond

Yönetici ekranlarında var: get_plugin_data(). Şablonlarda, bu verileri PHP'de tutmak için eklentiye ihtiyaç duyacağınızı düşünüyorum, örneğin sabit veya global bir şey ayarlayın ve bu değeri eklenti başlık sürüm numarasıyla senkronize halde tutun.

wp-settings.php, active_plugins site seçeneğindeki verileri alan wp_get_active_and_valid_plugins() işlevini çağırır. Bu seçenek yalnızca eklenti dosyasının yolunu içerir ve wp-settings.php yalnızca dosyadaki include_once dosyasını çalıştırır, bu nedenle eklenti meta verileri için hiçbir zaman ayrıştırılmaz.

1
Annika Backstrom