web-dev-qa-db-fra.com

Comment fonctionne la désinstallation des plugins WordPress?

J'essaie de supprimer une table de base de données lorsque l'utilisateur désinstalle le plug-in. Mais que signifie vraiment la désinstallation d'un plugin WordPress?

Il y a le crochet de désactivation et le crochet de désinstallation. Et puis il y a le fichier uninstall.php.

Sur le constructeur de la classe de plugin, j'ai le hook de désinstallation:

register_uninstall_hook(__FILE__, array($this, 'uninstall_Housekeeping'));

Ensuite, la méthode uninstall_Housekeeping a le code suivant:

public function uninstall_Housekeeping(){

global $wpdb;
$tweets_table = $wpdb->prefix . 'zam_tweets';

require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta("DROP TABLE $tweets_table");
}

Selon le codex wordpress, vous devez avoir un fichier uninstall.php qui contient le code qui sera exécuté lors de la désinstallation du plug-in. J'ai donc également mis ce code:

if (!defined('WP_UNINSTALL_PLUGIN'))
exit();
global $wpdb;
$tweets_table = $wpdb->prefix . 'zam_tweets';

require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta("DROP TABLE $tweets_table");

Mais tout ce que je peux voir sur la page du plugin WordPress, ce sont les liens activate et delete lorsque le plugin est actuellement désactivé. Et puis le lien deactivate et edit s'il est actuellement actif. Où est la uninstall? J'ai déjà essayé le lien de suppression, mais il ne semble pas qu'il fasse quoi que ce soit, sauf pour supprimer le dossier du plugin complet, la table de base de données est toujours intact.

1
Wern Ancheta

Comme expliqué dans mon commentaire dans la question, l'erreur réside certainement dans la façon dont le DROP TABLE est exécuté. Mais répondant à Comment fonctionne la désinstallation de plugins WordPress? :

Si nous faisons un register_uninstall_hook dans notre plugin, le rappel est stocké dans l'option uninstall_plugins dans /wp-includes/plugin.php .

$uninstallable_plugins[plugin_basename($file)] = $callback;
update_option('uninstall_plugins', $uninstallable_plugins);

Dans la PHPDoc de la fonction register_uninstall_hook, nous avons ceci:

Ce fichier (uninstall.php) sera appelé, s'il existe, pendant le processus de désinstallation en ignorant le hook de désinstallation.

Et le contournement se produit dans /wp-admin/includes/plugin.php :

define('WP_UNINSTALL_PLUGIN', $file);
include WP_PLUGIN_DIR . '/' . dirname($file) . '/uninstall.php';
return true;

Ainsi, quel que soit le fichier ou le crochet de désinstallation, il devrait fonctionner de manière autonome. Si c'est le cas, , il fonctionnera lors de la désinstallation.

1
brasofilo