Eliminare utenti dal front-end con wp_delete_user()
Vorrei che gli amministratori potessero eliminare utenti dal frontend con un semplice clic. Come potrei utilizzare la funzione wp_delete_users() per creare un pulsante nel frontend quando l'ID utente è disponibile?

La risposta precedente contiene un errore e un'omissione (non è chiaro perché abbia 4 controlli)
int_val
non è una funzione di WordPress,intval
è la funzione corretta- È necessario includere
include("./wp-admin/includes/user.php" )
per poter chiamarewp_delete_user
Volevo eliminare gli utenti senza passare dalla dashboard di amministrazione - Ecco la soluzione funzionante:
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" );
//verifica i permessi di amministrazione
if (current_user_can('edit_users')) {
$user_id = intval($_REQUEST['user_id']);
wp_delete_user($user_id);
exit();
}
}
}
L'azione viene eseguita quando viene inviato questo URL:
http://website.com/?action=prefix_delete_user&user_id=<ID>
Aggiungi questo codice al tuo file functions.php

Puoi utilizzare AJAX per richiedere un'azione personalizzata e inviare l'ID dell'utente. In alternativa, puoi inviare tramite 'post' l'azione e l'ID utente alla stessa pagina. Sono essenzialmente la stessa cosa, ma il primo metodo non richiede il ricaricamento della pagina.
Ci sono molti argomenti su questo sito che trattano AJAX, quindi ometterò i dettagli (consultare il tag ajax per maggiori informazioni).
In entrambi i casi, dovrai impostare l'azione su 'myprefix_delete_user' e 'user_id' sull'ID dell'utente appropriato.
Metodo Ajax
Inviando una richiesta ajax con l'azione 'myprefix_delete_user' verranno attivati i seguenti hook:
wp_ajax_myprefix_delete_user
- se sei loggatowp_ajax_nopriv_myprefix_delete_user
- se non sei loggato
Vogliamo eseguire qualcosa solo se siamo loggati, quindi colleghiamo una callback solo al primo hook:
add_action('wp_ajax_myprefix_delete_user','myprefix_delete_user_cb');
function myprefix_delete_user_cb(){
// A questo punto dovresti verificare i nonce e i permessi dell'utente.
$user_id = int_val($_REQUEST['user_id']);
wp_delete_user($user_id);
exit();
}
Metodo 'POST/GET'
(non ero sicuro di come chiamare questo metodo...). Funziona in modo molto simile. Anche in questo caso invii tramite 'post' le variabili action e user_id. Puoi farlo costruendo un link:
$user_id=9 //ID dell'utente da eliminare.
$url = add_query_arg(array('action'=>'myprefix_delete_user', 'user_id'=>$user_id));
echo "<a href='".$url. "'>Elimina Utente</a>";
Questo 'invia' (non proprio) i dati alla pagina corrente. Poi colleghi l'azione a 'init
' se l'azione è impostata:
if(isset($_REQUEST['action']) && $_REQUEST['action']=='myprefix_delete_user')
add_action('init','myprefix_delete_user_cb');
La stessa funzione di callback può essere utilizzata, con le seguenti modifiche:
- Rimuovi
exit();
- Potresti voler usare
wp_redirect
per reindirizzare alla stessa pagina. Reindirizzando, se un utente clicca aggiorna non tenterà di rieseguire l'eliminazione.
Nota, non ho eseguito alcun controllo sui nonce o sui permessi. Dovresti farlo. Il secondo è un semplice controllo current_user_can
. Come fare il primo dipenderà dal metodo, ma ti incoraggio a leggere questo.
Questa domanda è ampiamente simile e potrebbe aiutare:
