is_plugin_active ফাংশন বিদ্যমান নেই


17

আমি ওয়ার্ডপ্রেস 3.0.5 ব্যবহার করছি এবং 3.1rc4 দিয়ে পরীক্ষা করেছি। আমার প্লাগইনের মূল পিএইচপি ফাইলে, যখন আমি কল করতে চেষ্টা করি_প্লুগিন_একটিভ Call to undefined function is_plugin_active()। আমি add_action এবং add_filter কল করতে পারি can এটি ঠিক করার জন্য আমার কী চেক / পরিবর্তন করা উচিত?

প্লাগইন পৃষ্ঠায় প্রশাসকের অভ্যন্তরে এটি ঘটছে happening আমার কাছে থাকা আমার প্রধান প্লাগইন ফাইলের শীর্ষে, if (function_exists('is_plugin_active')) {যা সর্বদা মিথ্যা দেয়।

আমি অন্যান্য প্লাগইনগুলিতে আমার প্রধান প্লাগইন ফাইল থেকে ফাংশনগুলি দেখতে পাচ্ছি না (যদি এটি কোনও উপকারে থাকে)।


আপনার বিবরণ থেকে আমি নিশ্চিত নই - এটি যদি অ্যাক্টিভেটেড প্লাগইন নিয়ে আসে বা আপনি যদি অ্যাক্টিভেশন বা অন্য নির্দিষ্ট শর্তে কিছু করার চেষ্টা করছেন?
রাস্ট

আমি খুঁজে পেয়েছি যে এটি function_exists('is_plugin_active')যদি মিথ্যা হয় মূল প্লাগইন ফাইল থেকে কল করা হয় যদি কোনও পদ্ধতির বাইরে থাকে তবে সত্য হয় যখন সেই পদ্ধতির অভ্যন্তরে ডাকা হয় যা activated_pluginকর্মের জন্য বলা হয় ।
কার্ল

কোন পৃষ্ঠায় আপনি ত্রুটিটি দেখতে পাচ্ছেন? প্লাগইনের পৃষ্ঠা (wp-admin / plugins.php)? আপনি প্রশ্নে প্লাগইন সক্রিয় করার আগে বা পরে এটি কি? বিরল একটি ভাল পয়েন্ট আছে। আপনি কি জানেন যে আপনি কোন মুহূর্তে ওয়ার্ডপ্রেসে ফাংশনটি কল করছেন?
জনিবোজঙ্গলস

আমি প্লাগইনটি সক্রিয় করার পরে ডাব্লুপি-অ্যাডমিন / প্লাগইনস.এফপিতে ত্রুটিটি দেখছি। আমি ক্রিয়া হিসাবে ডুবে আছে এমন কয়েকটি পদ্ধতিতে আমার চেক আছে এবং এটি সেখানে কাজ করে। মনে হচ্ছে এটি অন্তর্ভুক্তির সাথে কিছু করার আছে to
কার্ল

প্লাগইনগুলি বর্ণানুক্রমিক ক্রমে লোড করা হয়, সুতরাং এটি সহজেই হতে পারে যে আপনার প্লাগইনটি পর্যাপ্ত পর্যায়ে প্রক্রিয়াজাত করা হচ্ছে না। অক্ষরটি (যেমন_এ_মাইপ্লাগিন-নাম) দিয়ে শুরু করার জন্য আপনার প্লাগইনটির নাম পরিবর্তন করার চেষ্টা করুন যাতে এটি আগে লোড হয়। তবে সর্বোত্তম বিকল্পটি হ'ল প্লাগইনগুলি লোড হওয়ার পরে চলে এমন কোনও ফাংশন থেকেই আপনার ফাংশন_এক্সিস্ট ব্লককে কল করুন call আপনি ডাব্লুপি কোডেক্সে মোটামুটি চলমান অর্ডার দেখতে পাচ্ছেন: কোডেক্স.ওয়ার্ডপ্রেস.আর
ফিল হিলি

উত্তর:


29

এর কারণ হল যে ফাইলটি_প্লুগিন_এ্যাকটিভ () সংজ্ঞায়িত - wp-admin/includes/plugin.php- আপনার প্লাগইন লোড হওয়ার পরে কেবল অ্যাডমিনে লোড হয়।

সুতরাং, আপনি কেবল 'অ্যাডমিন_ইনিট' বরখাস্ত করার পরে এটি কল করতে পারবেন:

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

যদি আমি ইতিমধ্যে অ্যাডমিনে থাকি তবে এমন কি এমন কিছু আছে যা ভুলভাবে কনফিগার করা হয়েছে যা আমাকে এতে অ্যাক্সেস করতে অস্বীকার করবে?
কার্ল

1
আপডেট উত্তর দেখুন।
স্ক্রিবু

10

আপনি টেমপ্লেটগুলিতে এবং ব্যবহারকারী পৃষ্ঠাগুলিতেও is_plugin_active () কল করতে পারেন যা সম্পর্কিত প্লাগইনগুলির জন্য দরকারী হতে পারে (যেমন আমার নতুন প্লাগইন পরিচালনা করতে প্লাগইন 'xyz' প্রয়োজন)। কোডেক্সের is_plugin_active () ডক্সে উল্লিখিত হিসাবে আপনাকে ম্যানুয়ালি প্লাগইন.এফপি ফাইল অন্তর্ভুক্ত করতে হবে।

অ্যাড-অন অবজেক্টটি চালুর আগে ফ্রি বেস প্লাগইনটি সক্রিয় রয়েছে কিনা তা নিশ্চিত করতে আমি আমার প্রিমিয়াম অ্যাড-অন প্যাকগুলিতে ব্যবহার করি এমন একটি কার্যকরী উদাহরণ। বেস প্লাগইনে এটির জন্য কিছু নির্দিষ্ট হুক এবং ফিল্টার উপস্থিত থাকতে হবে বা এটি ক্রাশ হবে।

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 () নিয়ে সমস্যা হয় তবে এটি সম্ভবত কারণ আপনি অ্যাডমিন_ইনিট অগ্নিকান্ডের আগে পরীক্ষা করছেন। অ্যাডমিন_মেনু অ্যাডমিন_ইনিটের আগে আগুন জ্বালিয়েছিল এবং অ্যাডমিন_মেনুতে পরীক্ষা দেওয়ার আগে আমাকে "কামড়েছে"। "অ্যাডমিন_ইনিট" নামটি যা প্রশাসনিক_মেনু ইতিমধ্যে চালিত হওয়ার কারণে আমার কাছে প্রতিক্রিয়াশীল বলে মনে হয়। আমি ডিআইডিটিকে "প্রথম চালানো জিনিস" হিসাবে ভাবি ... সম্ভবত অ্যাডমিন_কিন্ডা_ইনিট () ভাল হবে। :)


যুক্ত করা 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

সহজ এবং সহজ। ডাব্লুপি থেকে নেওয়া

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

আমি প্লাগইন.এফপি অন্তর্ভুক্ত না করে নিজের ইজ_প্লাগিন_একটিভ ফাংশনটি কীভাবে সংজ্ঞায়িত করব তা দিয়ে আমি টম অগারের উত্তরটিকে প্রাধান্য দিয়েছি। তবে, একই ফাংশনটির নাম ব্যবহারের ফলে আমার প্রশাসক অঞ্চলটি ক্রাশ হয়ে গেছে। একটি ভিন্ন ফাংশন নাম ব্যবহার করে এটি সমাধান হয়েছে:

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

আমি রাজী. আপনি যদি আপনার ক্রিয়াকলাপের ঘোষণায় দ্বন্দ্বের জন্য পরীক্ষা করতে পারেন, ডাব্লুপি না করে এবং তাই আপনার ডাব্লুপি একটি ত্রুটি ঘটায়।
ক্রিস স্প্রেগ

1

আপনি is_plugin_activeঅ্যাডমিনের ভিতরে বা ফ্রন্ট-এন্ড ব্যবহার করছেন? আমি পুরোপুরি নিশ্চিত যে is_plugin_activeএটি কেবলমাত্র অ্যাডমিন ফাংশন যা ডাব্লুপি-অ্যাডমিন / অন্তর্ভুক্ত / প্লাগইন.পিপি-র ভিতরে পাওয়া যায়।

অতিরিক্তভাবে, আপনার মূল প্লাগইন ফাইলটি কি ওয়ার্ডপ্রেস ফাইল শিরোলেখ ব্যবহার করে ? উপরের প্লাগইন.এফপি ফাইলটি লোড হওয়ার পরে আপনার প্লাগইনটি কি অন্তর্ভুক্ত হচ্ছে?


প্লাগইন পৃষ্ঠায় প্রশাসকের অভ্যন্তরে এটি ঘটছে happening প্লাগইনটিতে প্রস্তাবিত ডাব্লুপি ফাইলের শিরোনাম রয়েছে। প্লাগইনটি প্লাগইন.এফপি এর পরে অন্তর্ভুক্ত করা হচ্ছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?
কার্ল

1

সক্রিয় প্লাগইনগুলি ডিবাগ করতে:

var_dump(get_option(...));

একটি নির্দিষ্ট প্লাগইন পরীক্ষা করতে:

in_array(get_option(...));

ক্রিয়াটিকে " active_plugins" আইআইআরসি বলা হয় called


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.