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