web-dev-qa-db-ja.com

Is_pageとwp_redirectの問題

私は自分のウェブサイトでどのメニューを使うべきかを決めるためにクッキーを使います。これはうまく機能していますが、クエリ文字列(リダイレクトされる)を使用してURLを経由するのではなく、直接URLを表示する人がいる場合は、正しいURLを強制します。

言い換えれば、URL www.yourdomain.com/?region=UAEはwww.yourdomain.com/uae/にリダイレクトされ、新しい訪問者(Cookieのない人)が直接リンク:www.yourdomain.com/uae/

私はis_page()関数を使っているのでinitのフックを使うことはできません。

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/' ); 
        }
}

私はFirefoxで次のようなエラーが出ます。

ページが正しくリダイレ​​クトされないFirefoxは、サーバーがこのアドレスへの要求をリダイレクトしないことを検出しました。この問題は、Cookieの受け入れを無効にするか拒否することによって引き起こされることがあります。

私はリダイレクトが何かが出力される前に起こる必要があることを知っています、しかし私はwp関数が初期化されるまでis_pageにアクセスすることができません。

誰かが回避策を提案できますか? TIA

1
TomC

あなたはリダイレクト機能をsetcookie機能から分離する必要があります

Setcookie関数ではadd_action('wp', 'your_cookies_function_name',10,1)を使用してください。is_pagewpでは動作しないため、initではなくinitを使用することをお勧めします。

そしてリダイレクト機能のために:

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 );

詳細については、このページに移動してください is_page( 'page')の場合のcookieの設定方法add_action( 'init')を使うべきですか、それとも別の行動がありますか?

私は同じ問題を抱えていたし、私はそれを私の自己を直します

1
usama sulaiman