web-dev-qa-db-fra.com

Désactiver la suppression d'utilisateur

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.

3
Denissio Inkognito

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");
    }
}
1
Sören Wrede

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!

3