web-dev-qa-db-fra.com

supprimer les données user_meta de la base de données pour tous les utilisateurs

Je voudrais créer un bouton pour que les administrateurs puissent supprimer de la table wp_usermeta -> clé: 'ref_credit' pour tous les utilisateurs.

Existe-t-il un moyen simple et convivial d’utiliser des ressources? wp a-t-il une fonction intégrée pour cela?

J'ai trouvé ceci: http://codex.wordpress.org/Function_Reference/delete_user_meta

Mais ce n'est que pour un seul utilisateur.

3
user8842

Un exemple simple consisterait à obtenir tous les utilisateurs pour un rôle spécifique, à parcourir les résultats renvoyés et à appliquer la fonction delete_user_meta pour le meta_key donné. Mélangez et laissez mijoter une fraction de seconde et toutes les méta-utilisateurs de cette clé disparaîtront.

function say_goodby_to_the_meta(){

    $role = 'subscriber';
    $users = get_users('role='.$role);

    foreach ($users as $user) {

        delete_user_meta($user->ID, 'ref_credit');

    }

}  

Cet exemple est dépourvu de toute vérification d'erreur ou de réponse renvoyée, mais à la base, cela fera ce que vous avez besoin. Associez la fonction au clic d'un bouton ou appelez de manière conditionnelle et exécutez cette fonction dans des fichiers de plug-in ou de thèmes en fonction de votre cas d'utilisation.

En poussant plus loin la fonction ci-dessus et en l'associant au clic d'un bouton dans le tableau de bord, vous pouvez ajouter cette fonction à admin_init hook.

add_action('admin_init', 'say_goodby_to_the_meta');

function say_goodby_to_the_meta(){

    //check if admin, if not, lets get out of here - don't run remainder of function 
    if ( !current_user_can('activate_plugins') ) 
        return;

    //check that $_POST is not empty & that correct wp_nonce is supplied
    //checl that $_POST['delete_credit'] is also set and passed with $_POST variables
    if ( !empty($_POST) 
         && check_admin_referer('delete_key','nonce_name') 
         && isset( $_POST['delete_credit'] ) ) 
     {
         //set your role to apply this action to
         $role = 'subscriber';

         //get all users of this role (i.e. Subcribers)
         $users = get_users('role='.$role);

         //iterate of each user returned applying our delete_user_meta function
         foreach ($users as $user) {
             delete_user_meta($user->ID, 'ref_credit');
         }

     } else {

         //return your error conditions here if you like or do further processing
         echo "I say I don't even know you, I say that you're not authorized,\n
               I don't understand you, so why do I judge your vars?\n
               Armand Van Administrator";

     }
}  

Cela suppose que vous utilisez un wp_nonce_field dans votre formulaire et que votre formulaire contient également $_POST['delete_key'] en tant que l’un des $_POST vars soumis, qu’il s’agisse d’une entrée masquée ou non. L'appel check_admin_referrer est un moyen pratique de vérifier si votre demande provient d'une page administrative du tableau de bord.

5
userabuser

Ceci est un très vieux post, pour tous vos futurs lecteurs, vous pouvez utiliser la fonction delete_metadata() pour y parvenir avec beaucoup moins de temps système:

delete_metadata(
    'user',        // the meta type
    0,             // this doesn't actually matter in this call
    'my_meta_key', // the meta key to be removed everywhere
    '',            // this also doesn't actually matter in this call
    true           // tells the function "yes, please remove them all"
);
1
bartboy011