クッキーで新規かリピーターを判定してコンテンツを変える

ヘッダ画像

クッキーで新規かリピーターを判定してコンテンツを変える

ページの閲覧がはじめてか再訪問かでコンテンツを変えたい。
このような場合はクッキーの有無で条件分岐することができます。
まずは初回訪問時にクッキーを発行する必要があります。

<?php
//cookieの発行処理
add_action('get_header', 'my_setcookie');
function my_setcookie() {
  if (isset($_COOKIE['visited'])){
    //cookieがすでにセットされていたら再セットしない
    return;
  }
  if(is_single()){ //ブログページを表示したときにCookieをセット
    $expire_time = time() + 60*60*24*30; //Cookieの有効期限は30日
    $visited_time = time(); //現在の時刻
    setcookie('visited', $visited_time, $expire_time, COOKIEPATH, COOKIE_DOMAIN);
  }
}
?>

WordPressでのクッキーはheader.phpを読み込む直前にセットすればよいでしょう。
get_header()のアクションフックとしてfunctions.phpで定義します。

それでは、クッキーの有無による条件分岐を行ってみます。
こちらはpage.phpなど、実際に出力するテンプレートに記述します。

<?php if (!isset( $_COOKIE['visited'] )) : ?>
//cookieがセットされていなかった場合
初回訪問
<?php else : ?>
//cookieが有効
訪問済
<?php endif; ?>

次は初回訪問~3日以内の条件分岐となります。
ウエルカムクーポンなどに使えそうですね。

<?php if ( !isset( $_COOKIE['visited'] ) || time() <= ($_COOKIE['visited'] + 60*60*24*3)) : ?>

少し実践的に記事中のコンテンツを変更するためにショートコードとして実装してみます。
記述場所はfunctions.phpです。

<?php
//cookieの有効・無効を判定する処理
function is_cookie_valid(){
  if (!isset($_COOKIE['visited'])){
    //cookieがセットされていなかった場合
    return true;
  }
  $visited_time = $_COOKIE['visited'];
  $current_time = time();
  if ($current_time - $visited_time < 60*60*24*15){
    //cookieが15日未満であった場合
    return false;
  }elseif ($current_time - $visited_time < 60*60*24*30){
    //cookieが15日以上~30日未満であった場合
    return true;
  }
  //それ以外(30日以上)
  return false;
}

//cookie関連コンテンツの表示処理
function print_cookie_content(){
  $ret = is_cookie_valid();
  if ($ret){
    //cookieが有効(コンテンツ表示)
    $str = get_template_part('insert');
  }else{
    //cookieが無効(コンテンツ非表示)
    $str = '';
  }
  return $str;
}
add_shortcode('cookiecontent', 'print_cookie_content');
?>

ここでは、有効判定の際はinsert.phpというテンプレートファイルを読み込みます。
投稿中の読み込みたい箇所に[cookiecontent]を記述します。

昨今、欧州GDPRや米国CCPAなど、プライバシー保護の観点でクッキーへの規制が強まっていますが、この対象はサードパーティークッキー(3rd party Cookie)です。
ここで紹介しているサイトの運営者が発行するファーストパーティークッキー(1st party Cookie)は規制の対象ではありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.



関連記事