Benennen Sie den Benutzer von der Rolle herab, die die Erstellung nach dem Erstellen ermöglicht

Ich bin Administrator eines Blogs mit mehreren Autoren. Ich implementiere ein Überwachungssystem, das erfordert, dass ich einen Benutzer von einem “Autor” herabstufen muss (diese Rolle erlaubt es, einen benutzerdefinierten Beitrag zu erstellen), zurück in die “Leser” -Rolle, wenn ich denke, dass es ein Spam-Konto ist die Regeln der Webseite brechen.

Wie kann ich nach dem Ändern ihrer Rolle über den Admin-Bildschirm alle von ihnen erstellten Posts automatisch löschen lassen, ohne selbst scrollen zu müssen?

Danke vielmals

EDIT mit Hilfe von Antworten aus den folgenden :

add_action( 'set_user_role', 'wpse98904_remove_demoted_user_posts', 10, 2 ); function wpse98904_remove_demoted_user_posts( $demoted_author_id, $role ) { // In here you'd search for all the posts by the user $args = array( 'numberposts' => -1, 'author' => $demoted_author_id, 'post_type' => 'custom_post', // So if your custom post type is named 'xyz_book', then use: // 'post_type' => 'xyz_book', ); $demoted_author_posts = get_posts( $args ); foreach( $demoted_author_posts as $p ) { // delete the post (actually Trash it) if($role == 'subscriber') { wp_trash_post( $p->ID); // To force the deletion (ie, bypass the Trash): // wp_delete_post( $p->ID, true ); } } } 

Ich habe wp_trash_post verwendet, um die Ereignisse zu löschen, weil das Hinzufügen von ‘false’ zu wp_delete_post bei mir nicht funktioniert hat.

Solutions Collecting From Web of "Benennen Sie den Benutzer von der Rolle herab, die die Erstellung nach dem Erstellen ermöglicht"

Sie können dem set_user_role Hook Aktionen set_user_role :

 add_action( 'set_user_role', 'wpse98904_remove_demoted_user_posts', 10, 2 ); function wpse98904_remove_demoted_user_posts( $demoted_author_id, $role ) { if( 'subscriber' == $role ) { // In here you'd search for all the posts by the user $args = array( 'numberposts' => -1, 'author' => $demoted_author_id, 'post_type' => '{your custom post type name}', // So if your custom post type is named 'xyz_book', then use: // 'post_type' => 'xyz_book', ); $demoted_author_posts = get_posts( $args ); foreach( $demoted_author_posts as $p ) { // delete the post (actually Trash it) wp_delete_post( $p->ID ); // To force the deletion (ie, bypass the Trash): // wp_delete_post( $p->ID, true ); } } } 

Referenz

set_user_role hook – Codex

set_user_role Haken in WP Trac

wp_delete_post() – Codex

Benutzerrollen werden vom WP_User-Objekt geändert, das die function set_role () austriggers. Am Ende dieser function in Zeile 815 von wp-includes / capabilities.php gibt es eine Aktion zum do_action( 'set_user_role', $this->ID, $role ); an: do_action( 'set_user_role', $this->ID, $role );

In Ihrer functions.php oder in einem Plugin können Sie diese Daten nach dem Update der Benutzerfunktion abholen und alle Posts eines Benutzers mit wp_delete_post löschen .

 add_action('set_user_role','myfunc',10,2); function myfunc($user_id,$role) { if($role == 'subscriber') { // or whatever you want $posts = get_posts('numberposts=-1&author='.$user_id); foreach($posts as $post) { wp_delete_post($post->ID,true); } } } 

Seien Sie vorsichtig, denn das Snippet löscht den Beitrag durch und durch. Wenn Sie es nur in den Papierkorb verschieben möchten, ändern Sie den zweiten Parameter oder wp_delete_post in false.