it-swarm.asia

هل هناك طريقة للحصول على مكون إضافي للحصول على رقم الإصدار الخاص به؟

هل هناك واجهة برمجة تطبيقات يمكنني الاتصال بها ، داخل المكون الإضافي ، لتحديد إصدار المكون الإضافي؟

أريد فقط أن أرسل المكون الإضافي تعليقًا بتنسيق html مع رقم الإصدار الخاص به ... لأغراض التشخيص.

8
David G

@ david : يقدم كلا منAdam Backtrom و @ Viper007Bond بعض النصائح الجيدة لذلك اعتقدت أنني سأتخذ نصيحتهما ونرى ما إذا كان لا يمكنني تنفيذ شيء ما ، انظر أدناه.

ما يلي هو المكون الإضافي المسمىWP بيانات المكونات الإضافية النشطةالذي يوزع البيانات الوصفية للرأس لجميع المكونات الإضافية النشطة في أي وقت يتم تنشيط أي مكون إضافي ويقوم بتخزين جميع البيانات الأولية لكل البرنامج المساعد في خيار مجموعة في wp_options. لقد صممت من أجل كل من الإضافات العادية ووردبريس والإضافات على مستوى الموقع. يمكنك تنزيله هنا من 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.php تستدعي wp_get_active_and_valid_plugins() ، التي تسحب البيانات من خيار موقع active_plugins. يحتوي هذا الخيار فقط على المسار إلى ملف البرنامج المساعد ، ولا يعمل wp-settings.php إلا على include_once على الملف ، لذلك لم يتم تحليله مطلقًا لبيانات تعريف البرنامج المساعد.

1
Annika Backstrom