Je suis un administrateur d'un blog multi-auteurs. J'implémente un système de surveillance qui exige que je rétrograde un utilisateur d'un "auteur" (ce rôle lui permet de créer une publication personnalisée) et le ramène au "lecteur" si je pense que c'est un compte spam ou s'ils le sont. enfreindre les règles du site.
Après avoir modifié leur rôle à l'aide de l'écran d'administrateur, comment puis-je supprimer automatiquement tous les messages qu'ils ont publiés, sans avoir à les faire défiler et à les trouver moi-même?
Merci beaucoup
EDIT en utilisant les conseils des réponses ci-dessous :
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 );
}
}
}
J'ai utilisé wp_trash_post pour supprimer les événements, car l'ajout de 'false' à wp_delete_post n'a pas fonctionné pour moi.
Vous pouvez ajouter des actions au hook 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
accrocher dans WP Trac
wp_delete_post()
- Codex
Les rôles des utilisateurs sont modifiés par l'objet WP_User qui déclenche la fonction set_role (). À la fin de cette fonction, à la ligne 815 de wp-includes/capacités.php, il y a une action à connecter à: do_action( 'set_user_role', $this->ID, $role );
Ainsi, dans votre functions.php ou dans un plug-in, vous pouvez récupérer ces données lorsque le hook se déclenche après la mise à jour des capacités de l'utilisateur et supprimer toutes les publications d'un utilisateur avec 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);
}
}
}
Maintenant, soyez prudent, car tel quel, cet extrait supprimera définitivement le message. Si vous souhaitez simplement le déplacer dans la corbeille, définissez le deuxième paramètre ou wp_delete_post sur false.