Si un plugin stocke des données dans les tables usermeta, quelle est la méthode recommandée pour supprimer ces entrées pour tous les utilisateurs dans uninstall.php? Je pourrais accéder directement à la base de données, mais existe-t-il un autre moyen?
Vous ne devriez pas accéder directement à la base de données, si possible. Il y a deux raisons principales pour cela:
Si la structure de la base de données change (peu probable), vos requêtes risquent de devenir obsolètes. L'utilisation de fonctions telles que delete_user_meta()
garantira le bon fonctionnement de votre requête pour toutes les versions de WordPress (passées, présentes et futures) prenant en charge cette fonction.
Caching Si vous ne nettoyez pas le cache après la suppression de vos données, des problèmes risquent de se produire. Si vous supprimez vos données manuellement, vous devez également nettoyer le cache manuellement. Utiliser des fonctions intégrées qui font cela automatiquement est certainement une meilleure idée.
Pour supprimer les métadonnées (telles que les champs méta de l'utilisateur), je vous recommande d'utiliser la fonction delete_metadata()
. Cette fonction comporte un cinquième paramètre que vous pouvez définir sur true
pour supprimer les métadonnées avec un meta_key
donné pour tous les objets (dans ce cas, les utilisateurs). Exemple:
$meta_type = 'user';
$user_id = 0; // This will be ignored, since we are deleting for all users.
$meta_key = 'your_meta_key';
$meta_value = ''; // Also ignored. The meta will be deleted regardless of value.
$delete_all = true;
delete_metadata( $meta_type, $user_id, $meta_key, $meta_value, $delete_all );
Vous pouvez répéter cela pour chaque clé méta utilisée par votre plugin.
La meilleure pratique consiste à préfixer les métadonnées dans lesquelles votre plugin entre pour que vous puissiez simplement faire quelque chose comme une recherche de toutes les méta-clés comme ceci.
$wpdb->query(
$wpdb->prepare(
"
DELETE FROM $wpdb->usermeta
WHERE meta_key LIKE `_prefix_%`
"
)
);
Il est préférable de ne pas interagir directement avec la base de données, en particulier lors de l'émission d'instructions DELETE, car une seule faute de frappe peut détruire des données inattendues. Utilisez plutôt les fonctions WordPress pour obtenir la liste de tous les ID utilisateur, puis supprimez le champ de méta utilisateur pour chaque utilisateur individuellement, comme suit:
$all_user_ids = get_users( 'fields=ID' );
foreach ( $all_user_ids as $user_id ) {
delete_user_meta( $user_id, 'your_meta_key_to_delete' );
}
Référence de la fonction:
http://codex.wordpress.org/Function_Reference/get_usershttp://codex.wordpress.org/Function_Reference/delete_user_meta
Exemple de code:
register_uninstall_hook( __FILE__, 'plugin_uninstall' );
function plugin_uninstall () {
//usermeta data delete code
}