ページの閲覧がはじめてか再訪問かでコンテンツを変えたい。
このような場合はクッキーの有無で条件分岐することができます。
まずは初回訪問時にクッキーを発行する必要があります。
<?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)は規制の対象ではありません。
ここで紹介しているサイトの運営者が発行するファーストパーティークッキー(1st party Cookie)は規制の対象ではありません。