web-dev-qa-db-fra.com

Suppression d'utilisateurs du serveur frontal avec wp_delete_user ()

Je voudrais que les administrateurs puissent supprimer des utilisateurs de l’interface en un clic. Comment utiliser la fonction wp_delete_users () pour créer un tel bouton sur le front-end si l'ID utilisateur est fourni?

3
jetlej

Vous pouvez utiliser AJAX pour demander une "action" personnalisée et envoyer l'ID de l'utilisateur. Vous pouvez également "poster" l'action et l'ID utilisateur sur la même page. Les deux sont essentiellement la même chose, mais le premier n’exige pas que la page soit rechargée.

Il y a beaucoup de sujets sur ce site qui traitent d'AJAX, alors je vais omettre les détails (consultez le tag ajax pour plus d'informations).

Dans les deux cas, vous souhaitez définir l'action sur "myprefix_delete_user" et sur "ID_utilisateur" sur l'ID de l'utilisateur approprié.

Méthode Ajax

L'envoi d'une requête ajax avec l'action 'myprefix_delete_user' déclenchera les points d'ancrage:

  • wp_ajax_myprefix_delete_user - si vous êtes connecté
  • wp_ajax_nopriv_myprefix_delete_user - si vous êtes déconnecté

Nous voulons seulement faire quelque chose si nous sommes connectés, alors nous attachons un callback au premier hook:

add_action('wp_ajax_myprefix_delete_user','myprefix_delete_user_cb');
function myprefix_delete_user_cb(){
    //You should check nonces and user permissions at this point.
    $user_id = int_val($_REQUEST['user_id']);
    wp_delete_user($user_id);
    exit();
}

Méthode 'POST/GET'

(Je ne savais pas comment appeler cette méthode ...). Fonctionne à peu près de la même manière. Vous pouvez à nouveau "poster" les variables action et user_id. Vous pouvez le faire en construisant un lien:

$user_id=9 //ID of the user to be deleted.
$url = add_query_arg(array('action'=>'myprefix_delete_user', 'user_id'=>$user_id));
echo  "<a href='".$url. "'>Delete User</a>"; 

Ceci "poste" (pas tout à fait) les données sur la page en cours. Ensuite, vous accrochez 'init' si l'action est définie:

if(isset($_REQUEST['action']) && $_REQUEST['action']=='myprefix_delete_user')
    add_action('init','myprefix_delete_user_cb');

La même fonction de rappel peut être utilisée avec les modifications suivantes:

  • Supprimer exit();
  • Vous voudrez peut-être utiliser wp_redirect pour rediriger vers la même page. En redirigeant, si un utilisateur clique sur l'actualisation, il n'essaie pas de ré-exécuter la suppression.

Remarque, Je n’ai effectué aucune vérification de nonce ou d’autorisation . Tu devrais vraiment faire ça. Ce dernier est un simple current_user_can check. La façon dont vous faites le premier dépend de quelle méthode, mais je vous encourage à lisez ceci .

Cette question est globalement similaire et peut aider:

4
Stephen Harris

La réponse ci-dessus comporte une erreur et une omission (vous ne savez pas pourquoi il y a 4 vérifications)

1) int_val pas une WP fonction intval est une WP fonction

2) Vous devez include("./wp-admin/includes/user.php" ) pour appeler wp_delete_user

Je voulais supprimer des utilisateurs sans passer par le tableau de bord de l'administrateur - Voici la solution de code qui fonctionne:

add_action('init','prefix_delete_user');
function prefix_delete_user() {
if(isset($_REQUEST['action']) && $_REQUEST['action']=='prefix_delete_user') {
   include("./wp-admin/includes/user.php" );
   //check admin permissions.
   if (current_user_can('edit_users')) {
       $user_id = intval($_REQUEST['user_id']);
       wp_delete_user($user_id);
       exit();
   }
}
}

Une action se produit lorsque vous postez ceci

http://website.com/?action=prefix_delete_user&user_id=<ID>

Ajouter à votre functions.php

3
Katie Serano