Enable_plugin, register_activation_hook içinde neden çalışmıyor?


10

İlk eklentiyi etkinleştirirken ikinci eklentiyi otomatik olarak etkinleştirmeye çalışıyorum.

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

Onun register_activation_hook içinde çalışmıyor .. Ben doğrudan gibi kullanırsanız onun çalışma:

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

Nasıl düzeltebilirim? Yardım için teşekkürler

Çözüm:

Bunu şimdi kendim için kullanıyorum:

// 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');
        });
    }
}); 

Gönderinizi başlangıçta yanlış okudum. Söylemeliyim ki, doğru biçimlendirilmiş. Bu işlev eklentinizin ana bölümünde var mı?
Chris

Bir saniye. Yayımı düzenlemem gerekiyor.
Chris

Evet, ikinci eklentiyi etkinleştirmeye çalışan ilk eklentide .. ikinci eklenti hello.php örnek olarak
Ünsal Korkmaz

Yanıtlar:


8

Olanların tam açıklaması için bu gönderiye bakın (bu, eklentileri devre dışı bırakmak içindir, ancak sorun aynıdır).

Kısa bir açıklama: Eklentiler, veritabanında depolanan etkin pug-inler dizisine eklenerek etkinleştirilir. İlk eklentiyi etkinleştirdiğinizde, WordPress şu anda etkin olan tüm eklentilerin dizisini alır, eklentiyi ekler (ancak veritabanını henüz güncellemez) ve ardından yükleme geri aramanızı çalıştırır.

Bu yükleme geri araması kodunuzu çalıştırır.

Bu WordPress ilk ama içeren yukarıdaki dizi ile veritabanını güncelleştirir sonra değil ikinci eklentisi. Böylece ikinci eklentiniz etkinleştirilmemiş gibi görünür.

Çözüm: Yukarıdaki bağlantıda çözümün böyle bir şey olduğunu belirtti (denenmemiş):

//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);
}

U zamanınız varsa, şimdi ne kullandığımı yazmak için sorumu düzenlerim. Activ_plugin ($ bağımlı); eklentiyi etkinleştirirken çalışmıyor. Bunu nasıl düzeltebileceğine dair bir fikrin var mı?
Ünsal Korkmaz

Kodunuzu bir test eklentisine kopyalamak (ve başka bir test hello.phptesti eklentisi oluşturmak - benim için iyi çalışıyor). Eklentiler bir alt dizinde mevcutsa, klasörü vermeniz gerektiğini unutmayın: örn hello/hello.php.
Stephen Harris

kodum normal şekilde çalışacak .. Sorun activate_plugin('hello.php');satırını değiştirdiğinizde başlıyoractivate_plugin($dependent);
Ünsal Korkmaz

Bunun nedeni, geri çağrınıza verilen değişkenin hello.phpşu anda etkin eklentilerin dizisi değil . Kendi değişkenlerinizi bu tür geri aramalara geçiremezsiniz. Sınıf / global değişkenleri kullanmadığınız sürece kullanmanız gerekir activate_plugin('hello.php');. Ama bu bir problem olmamalı ...?
Stephen Harris

iyi yer tbh bir sürü aynı değişkenleri yazmak istemiyorum. ama önemli değil. çok teşekkürler
Ünsal Korkmaz

2

İşte onun için neden çalışmadığını ve enable_plugin yöntemini nasıl kopyalaması ve problemsiz kendi özel bir yöntemini nasıl oluşturması gerektiğini açıklayan biri: /programming/1415958/how-to- etkinleştirme-wordpress-plugins-içten

Activ_plugin kodunun, kendi işlevinizi oluşturmak ve sizin için nerede çalışmadığını görmek için kullanabileceğiniz orijinal kaynağı aşağıdadır : http://hitchhackerguide.com/2011/02/11/activate_plugin/

İşte muhtemelen bir başkasının bu kaynak koddan attığı alternatif bir eklenti etkinleştirme yöntemi içeren olası bir çözüm: Eklentiler Kodla Nasıl Etkinleştirilir?


Bu çözüm register_activation_hook'ta hala çalışmıyor
Ünsal Korkmaz

Neyse ki, şimdi bir eklentiyi etkinleştirmek için kendi yönteminiz olduğuna göre, hata ayıklamanız ve nerede başarısız olduğunu anlayabilmeniz gerekir? :) register_activation_hook'unuzu varsayılan yerine özel enable_plugin yönteminizi kullanacak şekilde değiştirdiniz mi? Öyleyse, birkaç trigger_error ifadesi atın ve nerede başarısız olduğunu öğrenin. Örneğin, başlamak için iyi bir yer, yönteminizin başarısız olduğunda ne döndürdüğünü bulmak olacaktır.
mltsy

Hata ayıklama için elimden geleni yaptım ama neden bulamadım. Belki active_plugins seçeneği register_activation_hook yürütüldükten sonra güncelleme alıyor.
Ünsal Korkmaz

Üzgünüm, takas ettiğim iki bağlantının sırasını düzelttim (son iki). "Eklenti Kodla Nasıl Etkinleştirilir?" Başlıklı bağlantıdaki kodu kullanıyor musunuz? Sağlanması gereken bir başka yararlı ipucu, varsayılan activate_pluginyöntemin dönüş değeri olacaktır . trigger_errorDönüş değerini bulmak için kullanın ve buraya gönderin.
mltsy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.