it-swarm-ko.tech

플러그인이 자신의 버전 번호를 얻을 수있는 방법이 있습니까?

플러그 인의 버전을 확인하기 위해 내 플러그인에서 호출 할 수있는 API가 있습니까?

난 그냥 내 플러그인을 자신의 버전 번호와 함께 HTML 주석을 방출하고 싶습니다 ... 진단 목적으로.

8
David G

@ david: @Adam Backtrom과 @ Viper007Bond는 좋은 충고를하기 때문에 조언을 받아서 구현할 수 없는지 알아 봅니다. 아래를 참조하십시오.

WP 활성 플러그인 데이터 라는 플러그인은 모든 플러그인이 활성화 될 때마다 모든 활성 플러그인의 헤더 메타 데이터를 구문 분석하고 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));

그것이 적어도 당신이 필요로하는 것이 아니라면, 그것은 당신에게 좋은 출발점을 주어야합니다. 희망이 도움이됩니다.

9
MikeSchinkel

플러그인의 메타 데이터 (파일의 맨 위에있는 것들)를 파싱 할 수 있지만 일치하는 버전 번호로 PHP 변수를 설정하면 성능이 더 좋습니다. 플러그인을 업데이트 할 때 두 버전 번호 만 업데이트하면됩니다.

단기간에 조금 더 많은 일을하지만 장기적으로는 훨씬 좋아집니다.

2
Viper007Bond

관리자 화면에는 get_plugin_data()이 (가) 있습니다. 템플릿에서는 PHP에서 데이터를 보관하는 플러그인이 필요합니다 (예 : 상수 또는 전역 변수를 설정하고 해당 값을 플러그인 헤더 버전 번호와 동기화하는 등).

wp-settings.phpactive_plugins 사이트 옵션에서 데이터를 가져 오는 wp_get_active_and_valid_plugins()을 호출합니다. 이 옵션은 플러그인 파일의 경로 만 포함하며 wp-settings.php는 파일에 대해 include_once 만 실행하므로 플러그인 메타 데이터는 분석되지 않습니다.

1
Annika Backstrom