力技で手っ取り早いのがページを見る際に(single.phpの頭にでも)クッキーでpage_idを保存する処理をしておいて、一覧を表示する際にクッキーをチェックする形でしょう。
ただしこれは最初はいいですが記事数が増えていくとクッキーが肥大化してしまいます。
すでに3日たった記事はクッキーから削除するような処理も必要になると思います。
もう一つ考えられるのがCSSで a:visitedフィルターを使い既読時にスタイルを変更する方法です。
これの場合はクッキーを使うことなくCSSだけで処理することができます。
コチラの処理については下記サイトが参考になるかもしれません。
http://www.lucky-bag.com/archives/2005/09/visited_link.html
gogowebさん
ありがとうございます!遅くなってすみません。
a:visitedの存在をすっかり忘れていたため試しました。
結論から言うと display: noneなどのスタイルは効きませんでした。
知らなかったのですが、どうやら:visitedセレクタはブラウザ側でかなりのスタイルが制限されているみたいです。
CSS の :visited に行われるプライバシー対策
これが使えれば楽だったのですが…。
次にクッキーで処理する方法なのですが、
もしよろしければ具体的な方法を教えていただけないでしょうか?
現在下記のようにsingle.phpに書きましたが、
変数には直前のpage_idしか入らず、直前以外のpage_idが取得出来ませんでした。
single.phpの頭
if (isset($_COOKIE["count"])) {
$count = get_the_ID(); // 2度目以降
} else {
$count = get_the_ID(); // 初回
}
setcookie("count", $count, time()+60*60*24*30, "/news/");
?>
3日以内の記事にはアイコンを表示する部分
<?php
$days = 3;
$today = date_i18n('U');
$entry = get_the_time('U');
$kiji = date('U',($today - $entry)) / 86400 ;
if ($days > $kiji) {
echo '<span class="icon">icon</span>';
} ?>
のようにしています。
一覧側でクッキーをチェックする処理もわかっておらず、
お手数おかけいたしますが、良ければ教えていただけると助かります。
よろしくお願いいたします。
現在下記のようにsingle.phpに書きましたが、
変数には直前のpage_idしか入らず、直前以外のpage_idが取得出来ませんでした。
これ、変ですね。何か特別なことをやっていますか? single.php で get_the_ID() したら、該当記事の ID 番号が取れるはずです(post_count が 1 だから、unique のはず)。それはともかく、if … else … は必要ないみたいですね。sou4473 さんの目的は、訪問したかどうかだけなので、カウントする必要もないですしね。それに、expire が 30 日というのも長すぎるように思います。gogoweb さんの言うのは、
$id = get_the_ID();
if (!isset($_COOKIE[$id])) {
setcookie($id, 'visited', (time()+60*60*24*3), '/');
}
のように、記事毎のクッキーを送るということでしょう。だから、記事が多くなると、クッキーが増えてしまうのです。クッキーが存在するかどうかが問題なので、’visited’ はなんでもかまいません。
category.php の方は、個別の投稿 ID がループの中でとれるはずなので、それを使って分岐条件に追加すればよいと思います。
$cookies = array();
if (isset($_COOKIE)) {
$cookies = $_COOKIE;
}
略...
if ($days > $kiji && !array_key_exists($post_id, $cookies)) {
echo '<span class="icon">icon</span>';
}
$post_id にはそれぞれの投稿 ID が入るようにしてください。