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?
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é.
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();
}
(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:
exit();
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:
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