私は自分のWordpressサイト内の特定のページに戻ってきたユーザーを再ルーティングするようにcookieを設定しようとしています。
これら2つのことについてアドバイスをお願いします。
setcookie('cookie_name', 'cookie_value', time()+4000);
は私のシステムにクッキーを保存していないようです。ああ、これをinit()
にフックする必要があることに気づきました。
解決策:私はfunctions.phpにクッキーを設定しチェックする関数を作成しました。これを正しく機能させるには、関数を定義した後、関数の外側で次のように呼び出します。
add_action('init', 'function-name');
1 - あなたはクッキーをチェックし、 'init'フックのような出力の前に呼ばれるフックを使ってあなたのリダイレクトをすることができます:
<?php
// Hook the function "redirect()" on to the "init" action
add_action('init', 'redirect');
// redirect() may redirect the user depending on the cookies he has
function redirect(){
/* CODE */
}
?>
2 - クッキーを設定する最善の方法は、次のように 'init'フックを使用することです。
<?php
add_action('init', 'my_setcookie');
// my_setcookie() set the cookie on the domain and directory WP is installed on
function my_setcookie(){
$path = parse_url(get_option('siteurl'), PHP_URL_PATH);
$Host = parse_url(get_option('siteurl'), PHP_URL_Host);
$expiry = strtotime('+1 month');
setcookie('my_cookie_name_1', 'my_cookie_value_1', $expiry, $path, $Host);
/* more cookies */
setcookie('my_cookie_name_2', 'my_cookie_value_2', $expiry, $path, $Host);
}
?>
あなたが www.example.com/blog にブログを持っているならば、これはより一貫しています、coockieはで利用できないでしょう
andre R Kohlの答えで気づいたように、自分で考え出すよりもCOOKIE_PATHとCOOKIEDOMAIN定数を使うこともできるはずです。
おそらくWP 3.0以降に存在する、定数COOIKEPATH
とCOOKIE_DOMAIN
を使うべきです。
setcookie("your_cookie", $your_value, time()+3600, COOKIEPATH, COOKIE_DOMAIN);
この方法はうまくいきました:
add_action( 'init', 'function-to-setcookie' );
function function-to-setcookie(){
//use condition here , in which page you eant to set cookie
//choose a page where you want the cookie to be set
$pageurl = get_option('siteurl').'/set-cookie-page';
// use a function to get current page url and use condition
//to match it with the desired page where you want to set cookie
if ( $pageurl === current_page_url() ) {
setcookie( 'cookie_name', 'cookie_value', $expiryTime, $cookiepath, $siteurl );
}
}