web-dev-qa-db-fra.com

Comment déterminer si un administrateur est connecté en dehors de la boucle

Je dois être capable de dire si un administrateur est connecté en dehors de la boucle.

Ceci est nécessaire pour certains fichiers php faisant partie d'un site WP mais n'utilisant pas require( '../wp-load.php );

Ce que je dois faire, c'est empêcher le traqueur de Google Analytics JS de se déclencher pour les administrateurs connectés, mais de suivre tout le monde.

Comment savoir si un administrateur est connecté en dehors de la boucle? Vérification du WP cookie connecté? Ou dois-je utiliser wp-load.php?

1
markratledge

Vous pouvez utiliser current_user_can () pour déterminer si un utilisateur admin est connecté et charger votre code de suivi Google à l'aide de wp_enqueue_script avec une instruction if dans functions.php.

if ( ! current_user_can( 'edit_posts' ) ) {
        wp_enqueue_script( 'google-tracking');
    } 
3
Chris_O

Utilisez wp-load.php (imposition de performances) ou procédez comme suit:

// Capture 'init' event in a plugin placed in /wp-content/mu-plugins/
// This will keep the shared cookie fresh for each load.
add_action('init', function(){
    $cookie_server = $_SERVER['SERVER_NAME'];
    // To work an all subdomains uncomment:
    // $cookie_server = strchr($_SERVER['SERVER_NAME'], '.');
    // Now check if current user is an Admin and do this: Signal Admin presence by
    // setting up a special value cookie that you can detect in your other script.
    // Prepare a salt and a hash here caculated from $salt, User-Agent and Remote IP
    $special_salt = 'setup a string here others will not know';
    $special_hash = md5($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$special_salt);
    if(!current_user_can('activate_plugins')){
        // If the user is not an admin remove the special cookie (if exists)
        setcookie('crosscript_auth', null, time() - 24 * 3600, '/', $cookie_server, is_ssl(), true);
    }else{
        // If the user is an admin add the special cookie with the $special_hash value
        setcookie('crosscript_auth', $special_hash, strtotime('+1 week'), '/', $cookie_server, is_ssl(), true);
    }
    // Now, in your other script, use the $special_salt and $special_hash from here
    // to compare to the $_COOKIE['crosscript_auth'], if available.
    // That will tell you if an Admin is logged in
}); // PHP 5.3 Closure, just change to named function for 5.2

Il suffit de lire les commentaires dans le code. J'ai essayé de décrire toute la logique derrière tout cela. C'est assez sûr et le cookie spécial est lié à l'IP/User-Agent. Avec un sel approprié, vous ne devriez pas avoir de problèmes sauf si un 1337 pirate informatique vous cible :) En outre, c’est un début pour vous d’améliorer.

Cordialement.

PS: Pour toute autre précision, n'hésitez pas à demander.

0
EarnestoDev