web-dev-qa-db-fra.com

Définir un cookie puis actualiser immédiatement la page

J'ai écrit un petit plugin WordPress ( mobileesp-for-wordpress ) qui redirigera les utilisateurs mobiles vers le site mobile. Il est basé sur mobileesp .

Le plugin lui-même fonctionne bien le problème est que j'ai ajouté une option pour afficher le site complet. Cette fonction fonctionne en recherchant un cookie et si le cookie est présent, ne redirige pas l'utilisateur vers le site mobile.

Cela fonctionne également, mais l'utilisateur doit cliquer deux fois sur le lien. Une fois pour définir le cookie et la deuxième fois pour les ramener dans le site WordPress. Le code complet peut être trouvé ici mais je pense que ceci est la partie pertinente.

$get_cookie_check = $_GET['view_full_site'];
if(isset($get_cookie_check)){
    if($get_cookie_check =='true'){
        //set the cookie
        setcookie("mobileesp_wp_full_site", 'true', time()+86400, "/", $domain);
    }
}
//cookie variable
$full_site_cookie= $_COOKIE['mobileesp_wp_full_site']; 

//make sure the target url is set and full site cookie isn't set
if((get_option('mobileesp_wp_target_url') != '') && ($full_site_cookie !="true")){
    //check for a mobile browser and redirect the user 
}

}

La solution temporaire serait de rechercher le cookie sur le site mobile, puis de le rediriger, mais existe-t-il un meilleur moyen de le faire.

2
Brooke.

La fonction setcookie prépare l'en-tête du cookie HTTP à envoyer lors du prochain chargement de la page. C'est pourquoi le $_COOKIE superglobal n'est pas mis à jour automatiquement.

Vous pouvez mettre à jour manuellement $_COOKIE pour l'utiliser sur la demande en cours. Il suffit de mettre ceci en dessous de votre ligne setcookie():

$_COOKIE['mobileesp_wp_full_site'] = 'true';

En passant, je préférerais ne pas travailler avec des chaînes comme 'true', mais simplement avec des entiers (0 et 1). Vous pouvez alors simplement les vérifier comme ceci: ! empty($_GET['view_full_site']).

2
Geert