Измените пользователя с роли, которая позволяет создавать сообщения

Я являюсь администратором блога с несколькими авторами. Я внедряю систему мониторинга, которая потребует от меня понизить пользователя от «автора» (эта роль позволяет им создавать персонализированный пост) обратно к роли «читателя», если я думаю, что это учетная запись спама, или если они нарушая правила сайта.

После изменения их роли с помощью экрана администратора, как я могу сделать все сообщения, которые они сделали, удалить автоматически, без необходимости прокручивать и находить их самостоятельно?

Большое спасибо

EDIT, используя советы ниже :

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

Я использовал wp_trash_post, чтобы мусор события, потому что добавление «false» в wp_delete_post не сработало для меня.

Вы можете добавить действия в 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 ); } } } 

Справка

set_user_role hook – Codex

set_user_role hook в WP Trac

wp_delete_post() – Codex

Роли пользователей изменяются объектом WP_User, запускающим функцию set_role (). В конце этой функции в строке 815 из wp-includes / capability.php есть действие, с помощью которого можно выполнить: do_action( 'set_user_role', $this->ID, $role );

Таким образом, в вашем файле functions.php или в плагине вы можете захватить эти данные по мере того, как он запускается после обновления возможностей пользователя и удаляет все сообщения пользователя с помощью wp_delete_post .

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

Теперь, будьте осторожны, потому что, как есть, этот фрагмент будет удаленно удалять сообщение. Если вы хотите просто переместить его в корзину, измените второй параметр или wp_delete_post на false.