WordpressでカスタムCookieを設定する


13

Wordpressサイト内の特定のページに戻るユーザーを再ルーティングするためにCookieを設定しようとしています。

次の2つの点についてアドバイスをお願いします。

  1. リダイレクトを処理するコンテンツをロードする前に、Wordpressのphpファイルのどこでcookieをチェックする必要がありますか?これは他のものの上に存在するはずの良いファイルがありますか?
  2. Wordpress内でCookieを適切に設定するにはどうすればよいですか?setcookie('cookie_name', 'cookie_value', time()+4000);Cookieがシステムに保存されていないようです。

ああ、これをinit()にフックする必要があることに気付きました。解決策:Cookieを設定およびチェックする関数をfunctions.phpに作成しました。これが適切に機能するためには、関数を定義した後、関数の外側で次のように呼び出します:add_action( 'init'、 'function-name');

4
あなたはあなた自身の質問に答えることができます
...-40XUserNotFound

2
実際、明示的に推奨されています。自分で答えてください。私はこれをWordPress.SEにも送信します。

おかげでみんな-私はWordpressエリアがあることに気づかなかった。そして、自分自身に答えるヒントをありがとう:) APpreciated、+ 1。
アッティカス

回答:


17

1-「init」フックなどの出力の前に呼び出されるフックを使用して、Cookieを確認し、リダイレクトを実行できます。

<?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-Cookieを設定する最良の方法は、次のように '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(s)が利用可能ではありません

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

更新

また、Andre R Kohlの答え-drzausで気づいたように、COOKIE_PATH定数とCOOKIEDOMAIN定数を自分で理解するのではなく使用できるはずです。


「my_cookie_1」変数だけでなく、Firstname、LastName、Random1、Random2など、複数の変数をどのように配置しますか?
-Damainman

1
追加するだけsetcookie()
ナビルカディミ

ああ、クッキーごとに1つの変数しか保持できないことは知りませんでした。上記の時間とURLコードを必要とせずに複数のCookieを設定して、コードが少なくなる方法はありますか?それらは変数に入れられますか?
-Damainman

あなたはまた、使用することができるはずCOOKIEPATHCOOKIEDOMAIN定数を、私はちょうどに気づいた、自分自身からそれらを考え出すのではなく、アンドレRコールズ答え
drzaus

訂正: COOKIE_DOMAIN
drzaus

11

おそらく、WP 3.0以降に存在する定数COOIKEPATHとを使用する必要があります。COOKIE_DOMAIN

setcookie("your_cookie", $your_value, time()+3600, COOKIEPATH, COOKIE_DOMAIN);

7

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

解決策:Cookieを設定およびチェックする関数をfunctions.phpに作成しました。これが適切に機能するためには、関数を定義した後、関数の外でこれを呼び出します:

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

1

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

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

    }

コードのフォーマットを修正してください。
ジェヴスカ

また、ソースに関する小さなコンテンツは非常に役立ちます。
-bueltge
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.