web-dev-qa-db-fra.com

Problème avec is_page & wp_redirect

J'utilise des cookies pour déterminer le menu à utiliser sur mon site Web. Cela fonctionne bien, mais je veux forcer le correct si quelqu'un visualise l'URL directement plutôt que via l'URL avec une chaîne de requête (qui est redirigée).

En d'autres termes, l'URL www.votredomaine.com/?region=UAE est redirigé vers www.votredomaine.com/uae/ et je souhaite pouvoir afficher le même résultat lorsqu'un nouveau visiteur (sans cookie) clique sur un lien direct vers: www.votredomaine.com/uae/

Je ne peux pas utiliser de hook pour init car j'utilise la fonction is_page ().

add_action( 'template_redirect', 'pstv_set_uae_cookie');
function pstv_set_uae_cookie() {
    // Set cookie if on UAE Home Page & redirect back
    if (is_page('uae') && $_COOKIE_['region'] !== "UAE") {
        $expire = time()+60*60*24*30;
        setcookie("region", "UAE", $expire, '/', '.domain.com');
        wp_redirect( 'http://domain.com/uae/' ); 
        }
}

Je reçois l'erreur suivante dans Firefox:

La page ne redirige pas correctement Firefox a détecté que le serveur redirige la requête de cette adresse d’une manière qui ne sera jamais complète. Ce problème peut parfois être causé par la désactivation ou le refus d'accepter les cookies.

Je sais que la redirection doit avoir lieu avant que quoi que ce soit soit généré, mais je ne peux pas accéder à is_page tant que les fonctions wp ne sont pas initialisées.

Quelqu'un peut-il suggérer une solution de contournement? TIA

1
TomC

Vous devez séparer la fonction de redirection de la fonction setcookie

Pour la fonction setcookie, utilisez add_action('wp', 'your_cookies_function_name',10,1) Notez qu'il est recommandé d'utiliser wp et non init car is_page ne fonctionnera pas avec init

Et pour la fonction de redirection:

function your_redirect_function_name()
    {
        if(is_page('uae') && $_COOKIE_['region'] !== "UAE"){
            wp_redirect('http://domain.com/uae/');
            exit();
        }
    }
add_action( 'template_redirect', 'your_redirect_function_name',9 );

Pour plus d'informations, accédez à cette page Comment configurer cookie si is_page ('page')? devrais-je utiliser add_action ('init') ou s'il y a une autre action?

J'ai eu le même problème et je le répare moi-même

1
usama sulaiman