it-swarm-id.com

Apakah ada cara bagi plug-in untuk mendapatkan nomor versinya sendiri?

Apakah ada API yang bisa saya hubungi, di dalam plug-in saya, untuk menentukan versi plug-in?

Saya hanya ingin plugin saya memancarkan komentar html dengan nomor versi sendiri ... untuk tujuan diagnostik.

8
David G

@david : Baik @Adam Backtrom dan @ Viper007Bond memberikan beberapa saran bagus jadi saya pikir saya akan mengambil saran mereka dan melihat apakah saya tidak dapat mengimplementasikan sesuatu, lihat di bawah.

Apa yang mengikuti iS sebuah plugin bernamaWP Data Plugin Aktifyang mem-parsing metadata header untuk semua plugin aktif kapan saja plugin diaktifkan dan menyimpan semua metadata untuk masing-masing plugin menjadi opsi array di wp_options. Saya mendesainnya untuk plugin WordPress reguler dan plugin multisite situs-lebar. Anda dapat mengunduhnya di sini dari Gist tetapi saya juga menyalin kode di sini untuk ulasan Anda:

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

Ingin melihat cara kerjanya? Berikut ini adalah file uji yang dapat Anda masukkan di root situs WordPress Anda (http://example.com/test.php.) Pastikan Anda telah mengaktifkan plugin ini dan Akismet sebelum Anda mengujinya.

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

Jika tidak tepat yang Anda butuhkan setidaknya itu akan memberi Anda titik awal yang baik. Semoga ini membantu.

9
MikeSchinkel

Anda dapat menguraikan meta data plugin Anda (hal-hal di bagian atas file), tetapi lebih baik untuk kinerja jika Anda hanya mengatur variabel PHP Anda sendiri dengan nomor versi yang cocok. Saat Anda memperbarui plugin, perbarui kedua nomor versi.

Ini sedikit lebih bekerja untuk Anda dalam jangka pendek, tetapi jauh lebih baik dalam jangka panjang.

2
Viper007Bond

Ada di layar admin: get_plugin_data(). Di templat, saya pikir Anda akan memerlukan plugin untuk menyimpan data itu di PHP, mis., Menetapkan konstanta atau global atau sesuatu, dan menjaga agar nilai itu disinkronkan dengan nomor versi header plugin.

wp-settings.php memanggil wp_get_active_and_valid_plugins(), yang menarik data dari opsi situs active_plugins. Opsi ini hanya berisi path ke file plugin, dan wp-settings.php hanya menjalankan include_once pada file, sehingga tidak pernah diuraikan untuk metadata plugin.

1
Annika Backstrom