is_plugin_active फ़ंक्शन मौजूद नहीं है


17

मैं वर्डप्रेस 3.0.5 का उपयोग कर रहा हूं और 3.1rc4 के साथ परीक्षण किया है। अपने प्लगइन की मुख्य PHP फ़ाइल में, जब मैं कॉल करने की कोशिश करता हूँ तो मुझे_प्लगिन_एक्टिव मिलता है Call to undefined function is_plugin_active()। मैं add_action और add_filter को कॉल कर सकता हूं। इसे ठीक करने के लिए मुझे क्या जांच / परिवर्तन करना चाहिए?

यह प्लगइन्स पृष्ठ पर व्यवस्थापक के अंदर हो रहा है। मेरी मुख्य प्लगइन फ़ाइल मेरे पास सबसे ऊपर है, if (function_exists('is_plugin_active')) {जो हमेशा झूठी होती है।

मैं अपनी मुख्य प्लगइन फ़ाइल से अन्य प्लगइन्स (यदि यह किसी भी मदद करता है) में फ़ंक्शन नहीं देख सकता।


मुझे आपके विवरण पर यकीन नहीं है - अगर यह सक्रिय प्लगइन के साथ समस्या है या यदि आप सक्रियण पर या अन्य विशिष्ट परिस्थितियों में कुछ करने की कोशिश कर रहे हैं?
दुर्लभ

मैंने पाया है कि function_exists('is_plugin_active')मुख्य प्लग फ़ाइल से कॉल किए जाने पर गलत है यदि किसी विधि के बाहर है, लेकिन activated_pluginकार्रवाई के लिए कॉल की गई विधि के अंदर कॉल करते समय सत्य है।
कार्ल

आप किस पेज पर त्रुटि देखते हैं? प्लगइन का पेज (wp-admin / plugins.php)? प्रश्न में प्लगइन को सक्रिय करने से पहले या बाद में यह है? Rarst का एक अच्छा बिंदु है। क्या आप जानते हैं कि आप वर्डप्रेस के साथ फ़ंक्शन को किस बिंदु पर बुला रहे हैं?
जॉनीबोजैंगल्स

मैं प्लगइन को सक्रिय करने के बाद wp-admin / plugins.php पर त्रुटि देखता हूं। मेरे पास कुछ विधियों में जांच है जो क्रियाओं में झुकी हुई है और यह वहां काम करती है। ऐसा लगता है कि समावेश के आदेश के साथ कुछ करना है।
कार्ल

प्लगइन्स को वर्णमाला के क्रम में लोड किया जाता है, इसलिए यह केवल यह हो सकता है कि आपके प्लगइन को पर्याप्त रूप से संसाधित नहीं किया जा रहा है। अपने प्लगइन का नाम बदलकर अक्षर a (जैसे a_myplugin-name) शुरू करने की कोशिश करें ताकि यह पहले से लोड हो जाए। हालाँकि सबसे अच्छा विकल्प यह होगा कि आप अपने function_exists ब्लॉक को एक फंक्शन के भीतर से कॉल करें जो प्लग इन लोड होने के बाद चलता है। आप WP कोड पर मोटे तौर पर चल रहे आदेश देख सकते हैं: codex.wordpress.org/Plugin_API/Action_Reference
Phill Healey

जवाबों:


29

ऐसा इसलिए है क्योंकि जिस फ़ाइल में is_plugin_active () परिभाषित है - wp-admin/includes/plugin.php- केवल आपके प्लग-इन लोड होने के बाद व्यवस्थापक में लोड की जाती है।

इस प्रकार, आप इसे केवल तभी कह सकते हैं, जब 'admin_init' ने निकाल दिया:

function check_some_other_plugin() {
  if ( is_plugin_active('some-plugin.php') ) {
    ...
  }
}
add_action( 'admin_init', 'check_some_other_plugin' );

अगर मैं पहले से ही व्यवस्थापक में हूं, तो क्या ऐसा कुछ है जिसे गलत तरीके से कॉन्फ़िगर किया जा सकता है जो मुझे इस तक पहुंच से बाहर कर देगा?
कार्ल

1
अद्यतन उत्तर देखें।
scribu

10

आप टेम्प्लेट में और उपयोगकर्ता पृष्ठों से भी is_plugin_active () को कॉल कर सकते हैं, जो संबंधित प्लगइन्स के लिए उपयोगी हो सकता है (यानी मेरे नए प्लगइन को संचालित करने के लिए प्लगइन 'xyz' की आवश्यकता होती है)। कोडेक्स पर is_plugin_active () डॉक्स में बताए अनुसार आपको मैन्युअल रूप से plugin.php फ़ाइल को शामिल करना होगा।

यहां एक कार्यात्मक उदाहरण है जो मैं अपने प्रीमियम ऐड-ऑन पैक में उपयोग करता हूं ताकि यह सुनिश्चित किया जा सके कि ऐड-ऑन ऑब्जेक्ट को लागू करने से पहले फ्री बेस प्लगइन सक्रिय हो। यह आधार प्लग में उपलब्ध होने के लिए कुछ हुक और फिल्टर की आवश्यकता है या यह दुर्घटनाग्रस्त हो जाएगा।

include_once(ABSPATH.'wp-admin/includes/plugin.php');
if (!function_exists('is_plugin_active') || !is_plugin_active('store-locator-le/store-locator-le.php')) { 
   return;
}

एक तरफ के रूप में, अगर आपको is_plugin_active () के साथ एक सक्रिय व्यवस्थापक लॉगिन में समस्या आ रही है, तो इसकी संभावना है क्योंकि आप admin_init आग से पहले परीक्षण कर रहे हैं। admin_menu admin_init से पहले फायर करता है और admin_menu में परीक्षण करने से पहले मुझे "काट" दिया जाता है। "Admin_init" नाम जो मेरे लिए काउंटर-सहज ज्ञान युक्त लगता है क्योंकि admin_menu पहले से ही चला हुआ है। मुझे लगता है कि init को "चलाने के लिए पहली बात" ... शायद admin_kinda_init () बेहतर होगा। :)


जोड़ना include_once(ABSPATH.'wp-admin/includes/plugin.php');मेरे लिए चाल है। धन्यवाद!
डेव

8

मैन्युअल रूप से फ़ंक्शन को डुप्लिकेट करने के लिए एक त्वरित और गंदा समाधान होगा:

if ( ! function_exists( 'is_plugin_active' ) ) {
    function is_plugin_active( $plugin ) {
        return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
    }
}

यह बहुत छोटा है इसलिए इसे अपने कोड में वर्कअराउंड के रूप में लागू करना बहुत कठिन नहीं होना चाहिए।


4

सरल और आसान। WP से लिया गया

if ( ! function_exists( 'is_plugin_active' ) )
     require_once( ABSPATH . '/wp-admin/includes/plugin.php' );

और तब के किसी भी उदाहरण

 if ( is_plugin_active( 'feed-them-social/feed-them.php' ) ) {

   }

फ़ंक्शन की जाँच करें। इसलिए कोई और त्रुटि नहीं।


1
यदि आप उपयोग कर रहे हैं तो आपको requireonceफ़ंक्शन की जांच करने की आवश्यकता नहीं है ...?
फिल हिले

आप ऐसा करते हैं ताकि आप यह सुनिश्चित कर सकें कि इसका उपयोग करने का प्रयास करने से पहले प्लगइन को परिभाषित किया गया है, अन्यथा आप लाइन में आने वाली परेशानियों में भाग सकते हैं।
स्पेंसर लाबादी

3

मैंने अपने स्वयं के is_plugin_active फ़ंक्शन को plugin.php के बजाय परिभाषित करने के तरीके के साथ टॉम ऑगर्स के उत्तर को प्राथमिकता दी। हालाँकि, समान फ़ंक्शन नाम का उपयोग करने से मेरा व्यवस्थापक क्षेत्र क्रैश हो गया। एक अलग फ़ंक्शन नाम का उपयोग करके इसे हल किया गया:

function is_plugin_active_byme( $plugin ) {
    return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}

मैं सहमत हूँ। जब आप फ़ंक्शन की अपनी घोषणा में संघर्ष की जांच कर सकते हैं, तो WP नहीं करता है और इसलिए आपका WP एक त्रुटि को ट्रिगर करेगा।
क्रिस स्प्रैग

1

क्या आप is_plugin_activeएडमिन या फ्रंट-एंड के अंदर का उपयोग कर रहे हैं ? मुझे पूरा यकीन है कि is_plugin_activeयह केवल एक एडमिन फ़ंक्शन है जो wp-admin के अंदर पाया जाता है / / plugin.php शामिल है।

इसके अतिरिक्त, क्या आपकी मुख्य प्लगइन फाइल वर्डप्रेस फाइल हैडर का उपयोग करती है ? क्या आपके प्लगइन को उपरोक्त plugin.php फ़ाइल के लोड होने के बाद शामिल किया जा रहा है?


यह प्लगइन्स पृष्ठ पर व्यवस्थापक के अंदर हो रहा है। प्लगइन का सुझाव दिया WP फ़ाइल हैडर है। यदि प्लगइन plugin.php के बाद प्लगइन को शामिल किया जा रहा है, तो मैं कैसे जांच सकता हूं?
कार्ल

1

सक्रिय प्लगइन्स डीबग करने के लिए:

var_dump(get_option(...));

एक विशिष्ट प्लगइन की जाँच करने के लिए:

in_array(get_option(...));

कार्रवाई को " active_plugins" IIRC कहा जाता है ।


0

इनमें से किसी भी समाधान ने मेरे लिए काम नहीं किया, लेकिन यह किया:

include_once('wp-admin/includes/plugin.php');

मुझे यह समाधान codebangers.com पर मिला

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.