Câu trả lời:
@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 không thể thực hiện điều gì đó, xem bên dưới.
Cái gì sau iS một plugin có tên WP Active Plugins Data phân tích siêu dữ liệu tiêu đề cho tất cả các plugin đang hoạt động bất cứ lúc nào bất kỳ plugin nào đượ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 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ừ ý chính nhưng tôi cũng đã sao chép mã ở đây để bạn xem xét:
<?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 nó.
<?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.
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 mình 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.
Có trong màn hình quản trị : 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
các cuộc gọi wp_get_active_and_valid_plugins()
, kéo dữ liệu từ active_plugins
tùy chọn trang web. 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.