web-dev-qa-db-fra.com

fichier uninstall.php dans le plug-in pour nettoyer la base de données

Je suis conscient que WordPress fournit aux plugins un moyen agréable de nettoyer la base de données si le plugin est supprimé en fournissant le hook uninstall.php. Il vous suffit de placer le code de nettoyage et cela fonctionne.

Mais ma question est, j'ai vu quelques plugins qui utilisent des fonctions définies dans leur fichier de plugin dans le fichier uninstall.php. Si j'ai bien compris, si le plug-in est déjà désactivé et que l'utilisateur le supprime par la suite, il est possible que ces fonctions ne soient pas accessibles.

Mon hypothèse est-elle correcte ou existe-t-il une magie WordPress dont je ne suis pas au courant?

1
Sudar

J'ai vu quelques plugins qui utilisent des fonctions définies dans leur fichier plugin dans le fichier uninstall.php.

Cela ne fonctionne pas, si le uninstall.php appelle l'une des fonctions du plugin, il produira un Fatal error: Call to undefined function. À moins que ... (expliqué ci-dessous).

Ceci, en revanche, fonctionne:

<?php
/* Plugin Name: Test Uninstall */
register_activation_hook( __FILE__, 'test_activate' );
register_uninstall_hook( __FILE__, 'test_uninstall' );

function test_activate()  { update_option( 'testing_uninstall', true ); }
function test_uninstall() { test_delete_me(); }
function test_delete_me() { delete_option( 'testing_uninstall' ); }

Nous pouvons voir pourquoi dans la fonction uninstall_plugin() . Si unistall.php existe, il est inclus, exécuté et fin du récit.
Si aucun fichier uninstall.php n'existe et si nous avons enregistré le raccord de désinstallation, le fichier du plug-in principal sera inclus: include WP_PLUGIN_DIR . '/' . $file;, de manière à rendre le rappel disponible - et à rendre ainsi l'autre fonction disponible.

Nous pourrions créer des includes dans notre fichier uninstall.php, mais la procédure de désinstallation est-elle si complexe qu'elle en a besoin?

Une citation d'un fil lié à wp-hackers (en soulignant):

[L] a crochet de désinstallation est stocké dans la base de données, il n'est pas déterminé au moment de l'exécution. Votre plugin ne recevra pas init/plugins_loaded/admin_init, etc. Déclenchement de hooks lorsque le hook de désinstallation est appelé, c'est un pur "Voici du code SELF CONTAINED à exécuter pour nettoyer"

1
brasofilo