Étant donné qu'une installation wordpress (3.4.x) ne compte qu'un administrateur, comment puis-je récupérer, depuis un plugin, l'adresse IP de l'administrateur actuellement connecté, si un administrateur est connecté?
En d'autres termes: je dois obtenir l'adresse IP de l'administrateur, SI l'administrateur est connecté, et utiliser cette adresse IP à d'autres fins. La demande ne viendra pas nécessairement de la personne connectée en tant qu'administrateur. Si aucun administrateur n'est connecté, la fonction doit retourner vide, car je n'ai besoin que de l'adresse IP de l'administrateur pendant qu'il est connecté.
Cette fonctionnalité n'est pas directement disponible, vous devrez suivre les connexions dans la base de données (probablement en tant que transitoire) et vérifier si ce transitoire est disponible.
function check_for_admin() {
$user = wp_get_current_user();
if(in_array('administrator', $user->roles))
set_transient('admin_ip', get_ip(), 60*10);
}
add_action('init', 'check_for_admin');
Après cela, vous pouvez utiliser get_transient('admin_ip')
& vérifier s’il est disponible
Pour récupérer l'adresse IP, vous pouvez utiliser le code de toscho.
MODIFIER:
Le 60*10
dans le code signifie que si aucun administrateur n'a été actif depuis 10 minutes, considérez-les tous comme étant hors ligne et nettoyez la base de données.
Il est également possible de supprimer le transitoire lorsque l'utilisateur se déconnecte manuellement. Vous devez vous connecter à l'action 'clear_auth_cookie'
pour nettoyer la base de données.
function clear_the_transient() {
$user = wp_get_current_user();
if(in_array('administrator', $user->roles))
delete_transient('admin_ip')
}
add_action('clear_auth_cookie', 'clear_the_transient');
Ce code fonctionnera dans votre cas lorsqu'il n'y a qu'un seul administrateur. Mais ce code a un problème majeur, il supprime l'adresse IP de la base de données même s'il y a 2 administrateurs en ligne et qu'un seul d'entre eux est déconnecté. Pour surmonter cette situation, vous devez stocker l'ID utilisateur ainsi que la dernière heure d'activité correspondante dans la base de données.
Comme toute autre propriété intellectuelle, ils ne sont pas différents pour les administrateurs…
function get_ip()
{
$ip = '';
$sources = array (
'REMOTE_ADDR',
'HTTP_X_FORWARDED_FOR',
'HTTP_CLIENT_IP',
);
foreach ( $sources as $source ) {
if ( isset ( $_SERVER[ $source ] ) ) {
$ip = $_SERVER[ $source ];
} elseif ( getenv( $source ) ) {
$ip = getenv( $source );
}
}
return $ip;
}
Assurez-vous de valider la valeur .