Vous vous demandez s'il est possible de désactiver un plugin dans le code de désactivation d'un autre plugin?
C'EST À DIRE. J'ai un widget que j'ajoute via son propre plugin qui ne fonctionnera pas si le plugin 'master' n'est pas activé ...
Oui, enregistrez un hook de désactivation dans votre premier plugin et, à l'intérieur de ce hook, désactivez le 2nd plugin à l'aide de la fonction deactivate_plugins()
Remarque: Après avoir écrit ceci, j'ai soumis un ticket de traçage, mais on m'a dit que celui-ci existait déjà .
@ La réponse de OneTrickPony n'a pas fonctionné, et après avoir inspecté le source (spécifiquement deactivate_plugins()
) J'ai trouvé pourquoi:
Supposons que B dépend de A et que A soit désactivé par l'utilisateur. WordPress appelle deactivate_plugins(A)
.
Cette fonction a les effets suivants:
deactivate_A
(auquel nous raccrochons en utilisant register_deactivation_hook
)Maintenant, à l'étape 4, nous appelons deactivate_plugins(B)
pour le désactiver. Le même processus se répète et est terminé - c'est bien. Mais une fois que nous avons terminé, nous passons à l’étape 5 (dans le deactivate_plugins()
original, appelez A). Le tableau est mis à jour dans la base de données - mais ce tableau était le très original récupéré à l'étape 1 et A n'a été supprimé. En particulier, nous l'avons récupéré au début, alors que B était toujours actif, et il contient donc B.
Remarque: vos rappels de désactivation sont déclenchés, même si WordPress pense toujours être actif au prochain chargement de la page.
La solution consiste à utiliser un hook ultérieur (après la mise à jour de l'option). Pour cela, nous pouvons tirer parti du hook update_option_{$option}
:
//This goes inside Plugin A.
//When A is deactivated. Deactivate B.
register_deactivation_hook(__FILE__,'my_plugin_A_deactivate');
function my_plugin_A_deactivate(){
$dependent = 'B/B.php';
if( is_plugin_active($dependent) ){
add_action('update_option_active_plugins', 'my_deactivate_dependent_B');
}
}
function my_deactivate_dependent_B(){
$dependent = 'B/B.php';
deactivate_plugins($dependent);
}