web-dev-qa-db-ja.com

Wordpressでカスタムクッキーを設定する

私は自分のWordpressサイト内の特定のページに戻ってきたユーザーを再ルーティングするようにcookieを設定しようとしています。

これら2つのことについてアドバイスをお願いします。

  1. Wordpressのphpファイルのどこでリダイレクトを処理するためのコンテンツをロードする前にクッキーをチェックすべきですか?このファイルが他のファイルよりも優れているはずです。
  2. Wordpress内でクッキーを正しく設定するにはどうすればよいですか? setcookie('cookie_name', 'cookie_value', time()+4000);は私のシステムにクッキーを保存していないようです。
11
Atticus

ああ、これをinit()にフックする必要があることに気づきました。

解決策:私はfunctions.phpにクッキーを設定しチェックする関数を作成しました。これを正しく機能させるには、関数を定義した後、関数の外側で次のように呼び出します。

add_action('init', 'function-name'); 
6
Atticus

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はで利用できないでしょう

  • www.example.com
  • www.example.com/store
  • example.com
  • www2.example.com
  • ...

更新

andre R Kohlの答えで気づいたように、自分で考え出すよりもCOOKIE_PATHとCOOKIEDOMAIN定数を使うこともできるはずです。

15
Nabil Kadimi

おそらくWP 3.0以降に存在する、定数COOIKEPATHCOOKIE_DOMAINを使うべきです。

setcookie("your_cookie", $your_value, time()+3600, COOKIEPATH, COOKIE_DOMAIN);
10
André R. Kohl

この方法はうまくいきました:

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

    }
1