বন্ধুরা, উত্তরগুলির জন্য ধন্যবাদ। যদিও উভয় উত্তরই আমাকে সঠিক পথে চালিত করেছে, তবুও বাক্সটির বাইরে কোনও কাজ হয়নি। সুতরাং আমি আমার সমাধানগুলি নীচে ভাগ করছি।
পদ্ধতি 1 - রেজিস্টার_অ্যাক্টিভেশন_হুক ব্যবহার করে:
প্লাগইন / প্যারেন্ট-প্লাগইন / প্যারেন্ট-প্লাগইন.এফপিতে প্যারেন্ট প্লাগইন তৈরি করুন:
<?php
/*
Plugin Name: Parent Plugin
Description: Demo plugin with a dependent child plugin.
Version: 1.0.0
*/
প্লাগইন / চাইল্ড-প্লাগইন / চাইল্ড-প্লাগইন.এফপি-এ চাইল্ড প্লাগইন তৈরি করুন:
<?php
/*
Plugin Name: Child Plugin
Description: Parent Plugin should be installed and active to use this plugin.
Version: 1.0.0
*/
register_activation_hook( __FILE__, 'child_plugin_activate' );
function child_plugin_activate(){
// Require parent plugin
if ( ! is_plugin_active( 'parent-plugin/parent-plugin.php' ) and current_user_can( 'activate_plugins' ) ) {
// Stop activation redirect and show error
wp_die('Sorry, but this plugin requires the Parent Plugin to be installed and active. <br><a href="' . admin_url( 'plugins.php' ) . '">« Return to Plugins</a>');
}
}
লক্ষ্য করুন যে আমি deactivate_plugins( $plugin );
কোনও কারণে এটি ব্যবহার করি না এটি কার্যকর হয় না। সক্রিয়করণ পুনঃনির্দেশ বাতিল করতে এবং ব্যবহারকারীকে অবহিত করতে আমি wp_die ব্যবহার করেছি।
সুবিধা:
- সহজ সমাধান এবং পদ্ধতির 2 এর তুলনায় অতিরিক্ত ডিবি হিট খরচ করে না
অসুবিধা:
- wp_die স্ক্রিনটি কুরুচিপূর্ণ
- আপনি প্লাগিন অ্যাডমিন স্ক্রিনে চেকবক্সগুলি একই সাথে প্যারেন্ট প্লাগইন এবং চাইল্ড প্লাগইনটি সক্রিয় করে দিলে wp_die স্ক্রিনটি এখনও প্রদর্শিত হবে।
পদ্ধতি 2 - অ্যাডমিন_নিট এবং অ্যাডমিন_নোটিস ব্যবহার করে
প্লাগইন / প্যারেন্ট-প্লাগইন / প্যারেন্ট-প্লাগইন.এফপিতে প্যারেন্ট প্লাগইন তৈরি করুন:
<?php
/*
Plugin Name: Parent Plugin
Description: Demo plugin with a dependent child plugin.
Version: 1.0.0
*/
প্লাগইন / চাইল্ড-প্লাগইন / চাইল্ড-প্লাগইন.এফপি-এ চাইল্ড প্লাগইন তৈরি করুন:
<?php
/*
Plugin Name: Child Plugin
Description: Parent Plugin should be installed and active to use this plugin.
Version: 1.0.0
*/
add_action( 'admin_init', 'child_plugin_has_parent_plugin' );
function child_plugin_has_parent_plugin() {
if ( is_admin() && current_user_can( 'activate_plugins' ) && !is_plugin_active( 'parent-plugin/parent-plugin.php' ) ) {
add_action( 'admin_notices', 'child_plugin_notice' );
deactivate_plugins( plugin_basename( __FILE__ ) );
if ( isset( $_GET['activate'] ) ) {
unset( $_GET['activate'] );
}
}
}
function child_plugin_notice(){
?><div class="error"><p>Sorry, but Child Plugin requires the Parent plugin to be installed and active.</p></div><?php
}
সুবিধা:
- আপনি যখন একই সময়ে চেকবক্সগুলি ব্যবহার করে পিতামাতা এবং শিশু প্লাগইনকে সক্রিয় করেন তখন কাজ করে
অসুবিধা:
- অ্যাডমিন_ইনিট চালানোর পরে প্লাগইনটি আসলে প্রথমে সক্রিয় এবং নিষ্ক্রিয় হওয়ার কারণে অতিরিক্ত ডিবি হিট হয়।
সক্রিয় লিঙ্কটি অক্ষম করার বিষয়ে আমার প্রশ্নের হিসাবে, আমি ব্যবহার করতে পারি:
add_filter( 'plugin_action_links', 'disable_child_link', 10, 2 );
function disable_child_link( $links, $file ) {
if ( 'child-plugin/child-plugin.php' == $file and isset($links['activate']) )
$links['activate'] = '<span>Activate</span>';
return $links;
}
তবে, এই কোডটি রাখার মতো কোনও জায়গা নেই বলে এটি অত্যন্ত ব্যবহারিক হয়ে উঠেছে। এই কোডটি চালানোর জন্য প্যারেন্ট প্লাগইনটি সক্রিয় হওয়া উচিত বলে আমি এটি প্যারেন্ট প্লাগইনে রাখতে পারি না। অবশ্যই চাইল্ড প্লাগইন বা ফাংশন.এফপি-র অন্তর্ভুক্ত নয়। সুতরাং আমি এই ধারণা স্ক্র্যাপ করছি।
if (is_plugin_active('path/to/plugin.php')) { // Do something }