it-swarm-vi.tech

Có cách nào để trình cắm có được số phiên bản của chính nó không?

Có API nào tôi có thể gọi, bên trong trình cắm của mình để xác định phiên bản của trình cắm không?

Tôi chỉ muốn trình cắm của mình phát ra một nhận xét html với số phiên bản của chính nó ... cho mục đích chẩn đoán.

8
David G

@david : Cả @Adam Backtrom và @ Viper007Bond đều đưa ra một số lời khuyên tốt vì vậy tôi nghĩ tôi sẽ nhận lời khuyên của họ và xem liệu tôi có thể thực hiện điều gì không, xem bên dưới.

Cái gì sau iS một plugin có tênWP Dữ liệu plugin hoạt độngphân tích siêu dữ liệu tiêu đề cho tất cả các plugin đang hoạt động bất cứ khi nào plugin được kích hoạt và nó lưu trữ tất cả siêu dữ liệu cho mỗi plugin vào một tùy chọn mảng trong wp_options. Tôi đã thiết kế nó cho cả plugin WordPress thông thường và plugin nhiều trang web. Bạn có thể tải xuống ở đây từ Gist nhưng tôi cũng đã sao chép mã ở đây để đánh giá của bạn:

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

Bạn muốn xem làm thế nào nó hoạt động? Đây là một tệp thử nghiệm mà bạn có thể thả vào thư mục gốc của trang web WordPress của mình (http://example.com/test.php.) Hãy chắc chắn rằng bạn đã kích hoạt cả plugin này và Akismet trước khi kiểm tra.

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

Nếu nó không chính xác những gì bạn cần ít nhất thì nó sẽ cho bạn một điểm khởi đầu tốt. Hi vọng điêu nay co ich.

9
MikeSchinkel

Bạn có thể phân tích dữ liệu meta của plugin (thứ đó ở đầu tệp), nhưng sẽ tốt hơn cho hiệu suất nếu bạn chỉ đặt biến PHP của riêng bạn với số phiên bản phù hợp. Khi bạn cập nhật plugin, chỉ cần cập nhật cả hai số phiên bản.

Đó là công việc hơi nhiều cho bạn trong ngắn hạn, nhưng tốt hơn rất nhiều trong dài hạn.

2
Viper007Bond

Có trong màn hình quản trị viên: get_plugin_data(). Trong các mẫu, tôi nghĩ rằng bạn sẽ cần plugin để giữ dữ liệu đó trong PHP, ví dụ: đặt hằng số hoặc toàn cầu hoặc một cái gì đó và giữ giá trị đó được đồng bộ hóa với số phiên bản tiêu đề của plugin.

wp-settings.php gọi wp_get_active_and_valid_plugins(), lấy dữ liệu từ tùy chọn trang active_plugins. Tùy chọn này chỉ chứa đường dẫn đến tệp plugin và wp-settings.php chỉ chạy include_once trên tệp, vì vậy nó không bao giờ được phân tích cú pháp cho siêu dữ liệu plugin.

1
Annika Backstrom