it-swarm.com.de

Warum activate_plugin in register_activation_hook nicht funktioniert?

Ich versuche, das zweite Plugin automatisch zu aktivieren, während ich das erste Plugin aktiviere.

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

Es funktioniert nicht in register_activation_hook .. Es funktioniert, wenn ich es direkt benutze wie:

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

Wie kann ich es reparieren? Danke für die Hilfe

Lösung:

Ich benutze das jetzt für mich selbst:

// 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');
        });
    }
}); 
10
Ünsal Korkmaz

Eine vollständige Beschreibung der Vorgänge finden Sie in diesem Beitrag (zum Deaktivieren von Plug-Ins, aber das Problem ist dasselbe).

Eine kurze Erklärung: Plug-Ins werden im Wesentlichen aktiviert, indem sie dem Array der aktiven Pug-Ins hinzugefügt werden, die in der Datenbank gespeichert sind. Wenn Sie das erste Plug-In aktivieren, ruft WordPress das Array aller derzeit aktiven Plug-Ins ab, fügt das Plug-In hinzu (aktualisiert jedoch die Datenbank noch nicht) und führt dann Ihren Installationsrückruf aus.

Dieser Installationsrückruf führt Ihren Code aus.

Danach aktualisiert WordPress die Datenbank mit dem obigen Array, das das erste aber nichtdas zweite Plug-In enthält. Daher scheint Ihr zweites Plug-In nicht aktiviert zu sein.

Lösung: hat im obigen Link erwähnt, dass die Lösung ungefähr so ​​ist (ungetestet):

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

Hier ist jemand, der erklärt, warum es bei ihm nicht funktioniert hat und wie er die activate_plugin-Methode kopieren und eine eigene benutzerdefinierte Methode erstellen musste, ohne das Problem zu haben: https://stackoverflow.com/questions/1415958/how- WordPress-Plugins-intern-aktivieren

Hier ist die Originalquelle des activate_plugin-Codes, mit der Sie Ihre eigene Funktion erstellen und feststellen können, wo dies bei Ihnen nicht funktioniert: http://hitchhackerguide.com/2011/02/11/activate_plugin/

Hier ist eine mögliche Lösung, die eine alternative Plugin-Aktivierungsmethode enthält, die wahrscheinlich jemand anderes aus diesem Quellcode herausgeschnitten hat: Wie aktiviere ich Plugins über Code?

2
mltsy