কেন অ্যাক্টিভেট_প্লাগিন নিবন্ধক_অ্যাক্টিভেশন_হুকে কাজ করছে না


10

প্রথম প্লাগইনটি সক্রিয় করার সময় আমি দ্বিতীয় প্লাগইনটি স্বয়ংক্রিয়ভাবে সক্রিয় করার চেষ্টা করছি।

register_activation_hook(__FILE__, 'example_activation' );
function example_activation() {
        include_once(ABSPATH .'/wp-admin/includes/plugin.php');
        activate_plugin('hello.php');
}

এটি রেজিস্টার_এক্টিভেশন_হুকের অভ্যন্তরে কাজ করছে না .. এটি যদি আমি সরাসরি ব্যবহার করি তবে এটি কাজ করছে:

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

আমি কীভাবে এটি ঠিক করতে পারি? সাহায্যের জন্য ধন্যবাদ

সমাধান:

আমি এখন এটি নিজের জন্য ব্যবহার করছি:

// When this plugin activate, activate another plugin too.
register_activation_hook(__FILE__, function(){
    $dependent = 'hello.php';
    if( is_plugin_inactive($dependent) ){
        add_action('update_option_active_plugins', function($dependent){
            /* for some reason, 
            activate_plugin($dependent); 
               is not working */
            activate_plugin('hello.php');
        });
    }
}); 

// When this plugin deactivate, deactivate another plugin too.
register_deactivation_hook(__FILE__, function(){
    $dependent = 'hello.php';
    if( is_plugin_active($dependent) ){
        add_action('update_option_active_plugins', function($dependent){
            deactivate_plugins('hello.php');
        });
    }
}); 

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

মাত্র এক সেকেন্ড. আমার পোস্ট সম্পাদনা করা প্রয়োজন।
ক্রিস

হ্যাঁ এটি প্রথম প্লাগইনে যা দ্বিতীয় প্লাগইনকে সক্রিয় করার চেষ্টা করছে .. দ্বিতীয় প্লাগইন
হ্যালো.এফপি

উত্তর:


8

কী ঘটছে তার সম্পূর্ণ ব্যাখ্যার জন্য এই পোস্টটি দেখুন (এটি প্লাগইনগুলি নিষ্ক্রিয় করার জন্য, তবে সমস্যাটি একই।

সংক্ষিপ্ত বিবরণ: প্লাগ-ইনগুলি মূলত ডাটাবেসে সঞ্চিত সক্রিয় পগ-ইনগুলির অ্যারেটিতে যুক্ত করে সক্রিয় করা হয়। আপনি যখন প্রথম প্লাগ-ইন সক্রিয় করেন, তখন ওয়ার্ডপ্রেস সমস্ত সক্রিয় প্লাগইনগুলির অ্যারেটি পুনরুদ্ধার করে, এতে প্লাগ-ইন যুক্ত করে (তবে এখনও ডাটাবেস আপডেট করে না) এবং তারপরে আপনার ইনস্টলেশন কলব্যাক চালায়।

এই ইনস্টলেশন কলব্যাকটি আপনার কোড চালায়।

যে ওয়ার্ডপ্রেস উপরে অ্যারে, যা প্রথম কিন্তু থাকা ডাটাবেসের আপডেট করার পর না দ্বিতীয় প্লাগ-ইন। এইভাবে আপনার দ্বিতীয় প্লাগ-ইন সক্রিয় হবে না বলে মনে হচ্ছে।

সমাধান: উপরের লিঙ্কে উল্লেখ করেছেন সমাধানটি এরকম কিছু (অরীক্ষিত):

//This goes inside Plugin A.
//When A is activated. activate B.
register_activation_hook(__FILE__,'my_plugin_A_activate'); 
function my_plugin_A_activate(){
    $dependent = 'B/B.php';
    if( is_plugin_inactive($dependent) ){
         add_action('update_option_active_plugins', 'my_activate_dependent_B');
    }
}

function my_activate_dependent_B(){
    $dependent = 'B/B.php';
    activate_plugin($dependent);
}

আপনার যদি সময় থাকে তবে আমি এখন কী ব্যবহার করছি তা লিখতে আমার প্রশ্নটি সম্পাদনা করি। আপনি অ্যাক্টিভেট_প্লাগিন ($ নির্ভর) দেখতে পারেন; প্লাগইন সক্রিয় করার সময় কাজ করছে না। কোন ধারণা কিভাবে যে ঠিক কিভাবে?
alnsal Korkmas

আপনার কোডটিকে একটি পরীক্ষামূলক প্লাগ-ইনে অনুলিপি করা (এবং অন্য একটি পরীক্ষা hello.phpটেস্ট প্লাগ-ইন তৈরি করা - এটি আমার পক্ষে ভাল কাজ করে)। মনে রাখবেন যে যদি কোনও উপ-ডিরেক্টরিতে প্লাগইন উপস্থিত থাকে তবে আপনাকে ফোল্ডারটি দিতে হবে: উদাঃ hello/hello.php
স্টিফেন হ্যারিস

আমার কোডটি স্বাভাবিকভাবে কাজ করবে .. আপনি যখন activate_plugin('hello.php');লাইন পরিবর্তন করবেন তখন সমস্যা শুরু হচ্ছেactivate_plugin($dependent);
alnsal Korkmaz

কারণ আপনার কলব্যাককে প্রদত্ত পরিবর্তনশীলটি hello.phpবর্তমানে সক্রিয় প্লাগইনগুলির অ্যারে নয় । আপনি নিজের ভেরিয়েবলগুলিকে কলব্যাকগুলিতে পাস করতে পারবেন না। আপনি ক্লাস / গ্লোবাল ভেরিয়েবলগুলি ব্যবহার না করে আপনার ব্যবহারের প্রয়োজন activate_plugin('hello.php');। তবে সমস্যা হওয়া উচিত নয় ...?
স্টিফেন হ্যারিস

বেশিরভাগ জায়গায় টিবিএইচতে আমি একই ভেরিয়েবলগুলি লিখতে চাই না। তবে এটি কোনও বড় বিষয় নয়। অনেক অনেক ধন্যবাদ
alnsal Korkmas

2

এখানে কেউ ব্যাখ্যা করছে যে এটি তার পক্ষে কেন কাজ করে না, এবং কীভাবে তাকে অ্যাক্টিভেট_প্লাগিন পদ্ধতিটি অনুলিপি করতে হয়েছিল এবং সমস্যা ছাড়াই তার নিজস্ব কাস্টম তৈরি করতে হয়েছিল: /programming/1415958/how-to- সক্রিয়-ওয়ার্ডপ্রেস-প্লাগইন-অভ্যন্তরীণভাবে

এখানে অ্যাক্টিভেট_প্লাগিন কোডের মূল উত্স, যা আপনি নিজের ফাংশন তৈরি করতে এবং কোথায় এটি আপনার জন্য কাজ করছে না তা দেখতে ব্যবহার করতে পারেন: http://hitchhackerguide.com/2011/02/11/activate_plugin/

এখানে একটি সম্ভাব্য সমাধান রয়েছে, একটি বিকল্প প্লাগইন অ্যাক্টিভেশন পদ্ধতি সম্বলিত অন্য কেউ সম্ভবত সেই উত্স কোড থেকে ঝাঁকিয়ে পড়েছেন: কোডের মাধ্যমে প্লাগইন কীভাবে সক্রিয় করবেন?


সমাধানটি এখনও নিবন্ধকরণ_অ্যাক্টিভেশন_
হুক-এ

ভাগ্যক্রমে, এখন আপনি যখন একটি প্লাগইন সক্রিয় করার জন্য নিজস্ব পদ্ধতি আছে, আপনি এটি ডিবাগ করতে এবং এটি ঠিক কোথায় ব্যর্থ হচ্ছে তা নির্ধারণ করতে সক্ষম হওয়া উচিত? :) আপনি কি ডিফল্টর পরিবর্তে আপনার কাস্টম অ্যাক্টিভেট_প্লাগিন পদ্ধতিটি ব্যবহার করতে আপনার রেজিস্টার_অ্যাক্টিভেশন_হুক পরিবর্তন করেছেন? যদি তা হয় তবে কয়েকটি ট্রিগার_অরারের বিবৃতি ফেলুন এবং এটি কোথায় ব্যর্থ হচ্ছে তা সন্ধান করুন। উদাহরণস্বরূপ, শুরু করার জন্য একটি ভাল জায়গা হ'ল এটি ব্যর্থ হলে আপনার পদ্ধতি কী ফিরে আসবে তা সন্ধান করা।
mltsy

আমি ডিবাগিংয়ের জন্য যথাসাধ্য চেষ্টা করেছি কিন্তু কারণ খুঁজে পাইনি। রেকর্ড_অ্যাক্টিভেশন_হুকের মৃত্যুদন্ড কার্যকর হওয়ার পরে অ্যাক্টিভ_প্লাগইন বিকল্প আপডেট হতে পারে।
alnsal কর্কমাজ

আমি দুঃখিত, আমি সবেমাত্র দুটি লিঙ্কের ক্রমটি স্থির করেছি (শেষ দুটি) আপনি কীভাবে "কোডের মাধ্যমে প্লাগইন সক্রিয় করবেন?" শীর্ষক লিঙ্কটি থেকে কোডটি ব্যবহার করছেন? প্রদানের জন্য আরেকটি সহায়ক ইঙ্গিতটি হ'ল ডিফল্ট activate_pluginপদ্ধতির রিটার্ন মান । আপনি trigger_errorরিটার্ন মানটি খুঁজে পেতে এবং এটি এখানে পোস্ট করতে পারেন ।
mltsy
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.