Eliminare utenti dal front-end con wp_delete_user()

12 mar 2012, 00:29:34
Visualizzazioni: 13.5K
Voti: 3

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?

0
Tutte le risposte alla domanda 2
1

La risposta precedente contiene un errore e un'omissione (non è chiaro perché abbia 4 controlli)

  1. int_val non è una funzione di WordPress, intval è la funzione corretta
  2. È necessario includere include("./wp-admin/includes/user.php" ) per poter chiamare wp_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

25 lug 2015 01:33:25
Commenti

Non è necessario includere alcun file per far funzionare wp_delete_user.

jetlej jetlej
1 ago 2015 03:11:22
1

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 loggato
  • wp_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:

12 mar 2012 13:47:46
Commenti

Come sarebbe il codice php/html nel template effettivo della pagina per il metodo ajax?

jetlej jetlej
12 mar 2012 19:27:37