WordPress 閲覧履歴をプラグイン無しで行う
※cookieを利用
header.phpのheadタグ内に以下を記述
解説ではheadタグ直下に記述しないとエラーになると書いてあったが、タグ内下部に記述しても動作した。
<?php
global $rireki;
//記事ページのみcookieに登録
if(is_single()){
//閲覧履歴用のcookieが存在する場合
if( isset($_COOKIE['rireki']) ){
//配列にする
$rireki = explode(",", $_COOKIE['rireki']);
//cookieに現在の記事IDがあるかどうか調べる
$aruno = in_array($post->ID, $rireki);
//ある場合の処理
if($aruno == true){
//cookieにある現在の記事IDを削除(順番整理&表示除外用)
$rireki = array_diff($rireki,array($post->ID));
$rireki = array_values($rireki);
}
//cookieが5個以上ある場合、4個に減らす
if(count($rireki) >= 5 ){
$set_rireki = array_slice($rireki , 0, 4);
}else{
$set_rireki = $rireki;
}
//cookieに登録
$touroku = $post->ID.','.implode(",", $set_rireki);
setcookie( 'rireki', $touroku, time() + 7776000,'/');
//cookieに現在の記事IDが無い場合の処理
}else{
$touroku = $post->ID;
setcookie( 'rireki', $touroku, time() + 7776000,'/');
}
//記事ページ以外ならcookieの読み込みのみ
}else{
if( isset($_COOKIE['rireki']) ){
$rireki = explode(",", $_COOKIE['rireki']);
}
}
?>
閲覧履歴を出力したい場所に以下記述
<?php
global $rireki;
//履歴が現在の記事を除いて、一つでもある場合
if (!empty($rireki)){
$args = array(
'posts_per_page' => -1,
'post__in' => $rireki,
'orderby' => 'post__in',
);
$the_query = new WP_Query($args);
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
?>
<!--ここに記事を表示させる処理-->
<?php the_title(); ?>
<?php
endwhile;
endif;
wp_reset_postdata();
}else{ ?>
//cookieが無い場合の処理
<?php } ?>
welcartで商品閲覧履歴を表示させる場合は、「is_single()」の次に「in_category(‘item’)」を入れる。
<?php
global $rireki;
//記事ページのみcookieに登録
if(is_single()) {
if(in_category('item')){
//閲覧履歴用のcookieが存在する場合
if( isset($_COOKIE['rireki']) ){
//配列にする
$rireki = explode(",", $_COOKIE['rireki']);
//cookieに現在の記事IDがあるかどうか調べる
$aruno = in_array($post->ID, $rireki);
//ある場合の処理
if($aruno == true){
//cookieにある現在の記事IDを削除(順番整理&表示除外用)
$rireki = array_diff($rireki,array($post->ID));
$rireki = array_values($rireki);
}
//cookieが5個以上ある場合、4個に減らす
if(count($rireki) >= 5 ){
$set_rireki = array_slice($rireki , 0, 4);
}else{
$set_rireki = $rireki;
}
//cookieに登録
$touroku = $post->ID.','.implode(",", $set_rireki);
setcookie( 'rireki', $touroku, time() + 7776000,'/');
//cookieに現在の記事IDが無い場合の処理
}else{
$touroku = $post->ID;
setcookie( 'rireki', $touroku, time() + 7776000,'/');
}
//記事ページ以外ならcookieの読み込みのみ
}else{
if( isset($_COOKIE['rireki']) ){
$rireki = explode(",", $_COOKIE['rireki']);
}
}
}
?>
出力したい場所に
<?php
global $rireki;
//履歴が現在の記事を除いて、一つでもある場合
if (!empty($rireki)){
$args = array(
'category_name' => 'item',
'posts_per_page' => 4,
'post__in' => $rireki,
'orderby' => 'post__in',
);
$the_query = new WP_Query($args);
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
?>
<!--ここに記事を表示させる処理-->
<p><?php the_title(); ?></p>
<?php
endwhile;
endif;
wp_reset_postdata();
}else{ ?>
//cookieが無い場合の処理
<?php } ?>