WordPress内にて、プラグインを使わずに、カスタム投稿の閲覧履歴を表示するプログラム方法忘備録。
PHPによる実装方法
header.phpの一番上に、cookieに登録のプログラムをおく
header.php
<?php
//閲覧履歴設定
global $rireki;
//記事ページのみcookieに登録
if (is_singular(‘【カスタム投稿スラッグ】’)) {
//閲覧履歴用の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) >= 4) {
$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’]);
}
}
<!– ここから通常のheader –>
<!doctype html>
<!– 以下略 –>
閲覧履歴一覧を表示部分
もし投稿詳細ページに閲覧履歴を表示したい場合、single.php
<?php
//閲覧履歴 表示
global $rireki;
//履歴が現在の記事を除いて、一つでもある場合
if (!empty($rireki)) :
?>
<ul>
<?php
$args = array(
'post_type' => '【カスタム投稿タイプスラッグ】',
'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(); ?>
<!-- loop start -->
<li>
<a href="<?php echo get_permalink(); ?>">
<figure>
<?php echo get_the_post_thumbnail(); ?>
</figure>
<div>
<h3>
<?php echo get_the_title(); ?>
</h3>
</div>
</a>
</li>
<!-- loop end -->
<?php
endwhile;
endif;
wp_reset_postdata(); ?>
</ul>
<?php
else: //cookieが無い場合の処理?>
<?php endif; ?>
閲覧ありがとうございました!