Mon site a un type de message personnalisé "Portfolio". Si un utilisateur a au moins un portefeuille, comment puis-je désactiver l'option de suppression de cet utilisateur?
J'ai trouvé l'action/hook delete_user
, mais cela ne semble pas correct pour ce problème.
Lorsque vous cliquez sur "supprimer", l'action "supprimer_utilisateur" sera lancée: https://core.trac.wordpress.org/browser/tags/4.4.1/src/wp-admin/includes/user.php # L313
Après cela, vous pourrez vérifier si l’utilisateur a écrit au moins une publication 'portfolio'.
add_action('delete_user', 'sw_portfolio_check');
function sw_portfolio_check( $user_id ) {
$result = new WP_Query(
array(
'author'=>$user_id,
'post_type'=>'portfolio',
'posts_per_page'=>1,
)
);
if ( count($result->posts) !== 0 ){
wp_die("User has a portfolio and can't be deleted");
}
}
Vous voulez désactiver l'option de suppression , si vous voulez parler du bouton de suppression de la liste des utilisateurs en /wp-admin/users.php
, vous pouvez utiliser user_row_actions class pour masquer le lien 'supprimer' avec l'extrait ci-dessous:
add_filter(
'user_row_actions',
function($actions, $user_object) {
$result = new WP_Query(
array(
'author'=> $user_object->ID,
'post_type'=>'portfolio',
'posts_per_page'=>1,
)
);
if ( count($result->posts) !== 0 ){
unset($actions['delete']);
}
return $actions;
},
1,2
);
L'extrait ci-dessus cache simplement le lien. Cela n'empêche pas l'accès à l'écran de suppression. Pour ce faire, nous aurons besoin de plus de code:
add_action(
'load-users.php',
function() {
if (isset($_GET['user'])) {
$user_object = get_userdata($_GET['user']);
$result = new WP_Query(
array(
'author'=> $user_object->ID,
'post_type'=>'portfolio',
'posts_per_page'=>1,
)
);
if( count($result->posts) !== 0 ){
wp_die('This user cannot be deleted');
}
}
}
);
J'espère que cela vous aidera bien!