質問: プラグインが独自のバージョン番号を取得する方法はありますか? プラグインのバージョンを確認するために、私のプラグイン内で呼び出すことができるapiはありますか?診断目的のために、プラグインに独自のバージョン番号を付けたhtmlコメントを発行させたいだけです。
回答: @ david:@adam backtromと@ viper007bondの両方がいくつかの良いアドバイスを与えているので、彼らのアドバイスを受けて、何かを実装できないかどうかを確認したいと思いました、 下記参照。続くのはwp active plugins dataと呼ばれるプラグインで、すべてのアクティブなプラグインのヘッダーメタデータをいつでも解析します任意のプラグインがアクティブ化され、各プラグインのすべてのメタデータがwp_optionsの配列オプションに保存されます。通常のwordpressプラグインとサイト全体のマルチサイトプラグインの両方のために設計しました。 gist からダウンロードできますが、レビュー用にここにコードをコピーしました:<?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); } それがどのように機能するかを知りたいですか? wordpressサイト(http://example.com/test.php。)のルートにドロップできるテストファイルを次に示します。テストする前に、このプラグインとakismetの両方がアクティブになっていることを確認してください。<?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)); 少なくとも必要なものでない場合は、出発点として適切です。お役に立てれば。