web-dev-qa-db-fra.com

Meilleure pratique pour supprimer les métadonnées de l'utilisateur lors de la désinstallation du plug-in?

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?

4
Matthew Hui

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.

8
J.D.

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_%`
        "
        )
);
3
bgallagh3r

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

3
figureone
  • Vous ne devriez pas accéder directement à DB.
  • Vous devez utiliser les fonctions WP wrapper pour apporter des modifications à la base de données.
  • Ne supprimez jamais les données liées au plug-in de la base de données au moment de l'installation du plug-in. Parce que dans WP, il y a tellement de cas où vous devez désinstaller vos plugins à des fins de test.
  • Supprimez toujours les données relatives au plug-in de la base de données au moment de leur suppression. Vérifier http://codex.wordpress.org/Function_Reference/register_deactivation_hook

Exemple de code:

register_uninstall_hook( __FILE__, 'plugin_uninstall' );

function plugin_uninstall () {
    //usermeta data delete code
}
1
Manish