Ștergerea utilizatorilor din interfața frontală cu wp_delete_user()

12 mar. 2012, 00:29:34
Vizualizări: 13.5K
Voturi: 3

Doresc ca administratorii să poată șterge utilizatori din interfața frontală prin simpla apăsare a unui buton. Cum aș putea utiliza funcția wp_delete_users() pentru a crea un astfel de buton în interfața frontală dacă ID-ul utilizatorului este furnizat?

0
Toate răspunsurile la întrebare 2
1

Răspunsul de mai sus conține o eroare și o omisiune (nu sunt sigur de ce are 4 verificări)

1) int_val nu este o funcție WordPress, intval este funcția corectă

2) Este necesar să include("./wp-admin/includes/user.php" ) pentru a putea apela wp_delete_user

Am vrut să șterg utilizatori fără a accesa panoul de administrare - Iată soluția funcțională:

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" );
   //verifică permisiunile de administrator
   if (current_user_can('edit_users')) {
       $user_id = intval($_REQUEST['user_id']);
       wp_delete_user($user_id);
       exit();
   }
}
}

Acțiunea se declanșează când accesezi acest URL:

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

Adaugă în fișierul functions.php

25 iul. 2015 01:33:25
Comentarii

Nu este nevoie să incluzi fișiere suplimentare pentru ca funcția wp_delete_user să funcționeze.

jetlej jetlej
1 aug. 2015 03:11:22
1

Puteți utiliza AJAX pentru a solicita o acțiune personalizată și a trimite ID-ul utilizatorului. Alternativ, puteți trimite prin 'POST' acțiunea și ID-ul utilizatorului către aceeași pagină. Ambele metode sunt în esență la fel, dar prima nu necesită reîncărcarea paginii.

Există numeroase subiecte pe acest site care tratează AJAX, așa că voi omite detaliile (verificați eticheta ajax pentru mai multe informații).

În orice caz, doriți să setați acțiunea la 'myprefix_delete_user', și 'user_id' la ID-ul utilizatorului corespunzător.

Metoda Ajax

Trimiterea unei cereri AJAX cu acțiunea 'myprefix_delete_user' va declanșa următoarele hook-uri:

  • wp_ajax_myprefix_delete_user - dacă sunteți autentificat
  • wp_ajax_nopriv_myprefix_delete_user - dacă nu sunteți autentificat

Vrem să acționăm doar dacă suntem autentificați, așa că atașăm un callback doar primului hook:

add_action('wp_ajax_myprefix_delete_user','myprefix_delete_user_cb');
function myprefix_delete_user_cb(){
    //Aici ar trebui să verificați nonce-urile și permisiunile utilizatorului.
    $user_id = int_val($_REQUEST['user_id']);
    wp_delete_user($user_id);
    exit();
}

Metoda 'POST/GET'

(nu eram sigur cum să numesc această metodă...). Funcționează în mare parte la fel. Din nou, trimiteți prin 'POST' variabilele de acțiune și user_id. Puteți face asta construind un link:

$user_id=9 //ID-ul utilizatorului care va fi șters.
$url = add_query_arg(array('action'=>'myprefix_delete_user', 'user_id'=>$user_id));
echo  "<a href='".$url. "'>Șterge Utilizator</a>"; 

Aceasta 'trimite' (nu chiar) datele către pagina curentă. Apoi, dacă acțiunea este setată, atașați un hook la 'init':

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

Aceeași funcție callback poate fi utilizată, cu următoarele modificări:

  • Eliminați exit();
  • S-ar putea să doriți să folosiți wp_redirect pentru a redirecționa înapoi către aceeași pagină. Prin redirecționare, dacă un utilizator apasă refresh, nu se va încerca ștergerea din nou.

Notă, nu am efectuat nicio verificare de nonce sau permisiuni. Chiar ar trebui să faceți asta. Ultima este o simplă verificare cu current_user_can. Cum faceți prima va depinde de metoda aleasă, dar vă încurajez să citiți aceasta.

Această întrebare este similară și vă poate ajuta:

12 mar. 2012 13:47:46
Comentarii

Cum ar arăta codul php/html în template-ul real al paginii pentru metoda ajax?

jetlej jetlej
12 mar. 2012 19:27:37