Löschen von Benutzern aus dem Front-End mit wp_delete_user ()

Ich möchte Admins in der Lage sein, Benutzer aus dem Frontend mit einem Klick auf eine Schaltfläche zu löschen. Wie kann ich die function wp_delete_users () verwenden, um eine solche Schaltfläche im Frontend zu erstellen, wenn die Benutzer-ID angegeben wird?

Solutions Collecting From Web of "Löschen von Benutzern aus dem Front-End mit wp_delete_user ()"

Sie können AJAX verwenden, um eine benutzerdefinierte “Aktion” anzufordern und die Benutzer-ID zu senden. Alternativ können Sie die Aktion und die Benutzer-ID auf derselben Seite “posten”. Sie sind beide im Wesentlichen das Gleiche, aber erstere erfordert nicht, dass die Seite neu geladen wird.

Es gibt viele Themen auf dieser Seite, die sich mit AJAX beschäftigen, daher werde ich die Details weglassen (siehe das Ajax- Tag für weitere Informationen).

In beiden Fällen möchten Sie die Aktion auf ‘myprefix_delete_user’ und ‘user_id’ auf die ID des entsprechenden Benutzers setzen.

Ajax-Methode

Durch das Senden einer Ajax-Anfrage mit der Aktion ‘myprefix_delete_user’ werden die Hooks ausgetriggers:

  • wp_ajax_myprefix_delete_user – wenn Sie eingeloggt sind
  • wp_ajax_nopriv_myprefix_delete_user – wenn Sie wp_ajax_nopriv_myprefix_delete_user sind

Wir wollen nur etwas tun, wenn wir eingeloggt sind, also fügen wir einen Callback nur an den ersten Hook an:

 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(); } 

‘POST / GET’ Methode

(war nicht sicher, wie man diese Methode nennt …). functioniert auf die gleiche Weise. Sie posten die Variablen action und user_id erneut. Sie können dies tun, indem Sie einen Link erstellen:

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

Dies “postet” ( nicht ganz ) die Daten auf der aktuellen Seite. Dann haken Sie auf ‘ init ‘, wenn die Aktion eingestellt ist:

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

Dieselbe Callback-function kann mit folgenden Änderungen verwendet werden:

  • Entfernen Sie den exit();
  • Sie können wp_redirect , um auf die gleiche Seite umzuleiten. Durch das Umleiten versucht ein Benutzer, auf die Aktualisierung zu klicken, die Löschung nicht erneut durchzuführen.

Hinweis: Ich habe keine Nonce- oder Berechtigungsprüfungen durchgeführt . Du solltest das wirklich tun. current_user_can ist ein einfacher current_user_can Check. Wie Sie das erste machen, hängt davon ab, welche Methode, aber ich ermutige Sie, dies zu lesen .

Diese Frage ist weitgehend ähnlich und kann helfen:

  • Ändern Sie die Frontend-Schaltfläche zum Löschen, um ausstehende Posts zu veröffentlichen

Die obige Antwort hat einen Fehler und eine Auslassung (nicht sicher, warum es 4 Überprüfungen hat)

1) int_val keine WP-function intval ist eine WP-function

2) Sie müssen include("./wp-admin/includes/user.php" ) wp_delete_user , um wp_delete_user

Ich wollte Benutzer löschen, ohne ins Admin-Dashboard zu gehen – Hier ist die funktionierende Code-Lösung:

 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(); } } } 

Aktion tritt auf, wenn Sie dies posten

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

Fügen Sie Ihrer functions.php hinzu