Cevaplar için teşekkürler çocuklar. Her iki cevap da beni doğru yola koysa da, hiçbiri kutudan çıktı. Bu yüzden aşağıda çözümlerimi paylaşıyorum.
Yöntem 1 - register_activation_hook kullanma:
Eklentiler / parent-plugin / parent-plugin.php içinde Üst Eklentiyi oluşturun:
<?php
/*
Plugin Name: Parent Plugin
Description: Demo plugin with a dependent child plugin.
Version: 1.0.0
*/
Eklentiler / child-plugin / child-plugin.php içinde Çocuk Eklentisini oluşturun:
<?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>');
}
}
Ben kullanmıyorum o Bildirimi deactivate_plugins( $plugin );
çalışmıyor nedense olarak. Bu yüzden aktivasyon yönlendirmesini iptal etmek ve kullanıcıyı bilgilendirmek için wp_die kullandım.
Avantajı:
- Basit çözüm ve yöntem 2'ye kıyasla ek db isabetleri olmaz
Dezavantajları:
- wp_die ekranı çirkin
- Eklenti yönetici ekranındaki onay kutularını kullanarak Ebeveyn Eklentisi ve Çocuk Eklentisini aynı anda etkinleştirdiyseniz, wp_die ekranı görünecektir.
Yöntem 2 - admin_init ve admin_notices kullanma
Eklentiler / parent-plugin / parent-plugin.php içinde Üst Eklentiyi oluşturun:
<?php
/*
Plugin Name: Parent Plugin
Description: Demo plugin with a dependent child plugin.
Version: 1.0.0
*/
Eklentiler / child-plugin / child-plugin.php içinde Çocuk Eklentisini oluşturun:
<?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
}
Avantajı:
- Ebeveyn ve Çocuk eklentisini aynı anda etkinleştirdiğinizde onay kutularını kullanarak çalışır
dezavantajı:
- Eklenti aslında ilk başta aktive edildiğinde ve admin_init çalıştırıldıktan sonra devre dışı bırakıldığı için ilave db isabetleri de ekleyin.
Etkinleştir bağlantısını devre dışı bırakmayla ilgili soruma gelince, şunları kullanabilirim:
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;
}
Bununla birlikte, bu kodu koyacak bir yer olmadığı için pratik olmadığı ortaya çıktı. Ebeveyn eklentisinin bu kodun çalışması için aktif olması gerektiğinden ebeveyn eklentisine ekleyemedim. Kesinlikle çocuk eklentisine ya da functions.php'ye ait değil. Bu yüzden bu fikri siliyorum.
if (is_plugin_active('path/to/plugin.php')) { // Do something }