欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

wordpress實(shí)現(xiàn)用戶歷史閱讀記錄功能分享

  發(fā)布時(shí)間:2014-02-26 15:04:12   作者:佚名   我要評(píng)論
歷史記錄是一種較為私密的功能,主要為當(dāng)前用戶提供服務(wù),不同的用戶使用不同的終端看到的結(jié)果是不同的,不同用戶之間不能共享,以保持用戶對(duì)自己瀏覽記錄的獨(dú)享性。一般而言,我們有以下幾種實(shí)現(xiàn)思路

COOKIE記錄
SESSION記錄
數(shù)據(jù)庫記錄
緩存文件記錄
從技術(shù)難度上,第1、2種方法最簡單,因此,下文將實(shí)現(xiàn)以COOKIE為記錄方法的實(shí)現(xiàn)代碼。其中第1、2、4種方法思路基本相同,即通過在用戶訪問某個(gè)頁面時(shí),通過對(duì)某個(gè)特定名稱的COOKIE或SESSION或緩存文件中增加值,把當(dāng)前URL或唯一標(biāo)識(shí)碼記錄其中,而在使用時(shí),只需要調(diào)用該名稱的COOKIE或SESSION或緩存文件中的值,并把對(duì)應(yīng)的項(xiàng)目鏈接列出即可。

而數(shù)據(jù)庫記錄方法一般需要用戶先注冊(cè),注冊(cè)之后記錄過程同上,在訪問頁面時(shí),將這個(gè)URL或頁面對(duì)應(yīng)的唯一標(biāo)識(shí)碼存入用戶ID對(duì)應(yīng)的某個(gè)數(shù)據(jù)庫字段或表中,在使用時(shí),通過數(shù)據(jù)庫查詢把這些值調(diào)用出來即可。這種方法不同于前一種,存入數(shù)據(jù)庫的記錄是永久不會(huì)丟失的,不會(huì)由于COOKIE或緩存過期而丟失,也可以實(shí)現(xiàn)跨終端,即在不同的電腦上也可以調(diào)用。

在wordpress中,我們通過一些鉤子來實(shí)現(xiàn)訪問文章時(shí)把該文章的ID記錄下來。


復(fù)制代碼
代碼如下:

add_action('wp','HistoryReadCookieInit',10);
function HistoryReadCookieInit(){
if(is_single()){
global $post;
if(isset($_COOKIE['history-read-posts']) && !empty($_COOKIE['history-read-posts']))$history_read_posts = trim($_COOKIE['history-read-posts']);
else $history_read_posts = '';
$post_id = $post->ID;
if(strpos($history_read_posts,$post_id.',') === 0){
$history_read_posts = str_replace($post_id.',','',$history_read_posts);
}elseif(strpos($history_read_posts,$post_id.',') > 0){
$history_read_posts = str_replace(','.$post_id.',',',',$history_read_posts);
}
$history_read_posts = $post_id.','.$history_read_posts;
setcookie('history-read-posts',$history_read_posts,time()+315360000,COOKIEPATH,COOKIE_DOMAIN,false);
}
}

在記錄的時(shí)候,我們需要對(duì)已經(jīng)被記錄的文章ID做一個(gè)簡單的運(yùn)算,保證COOKIE中只有一個(gè)ID,不重復(fù)。并按照我們?cè)L問的時(shí)間來對(duì)這些文章ID排序(最后訪問的排在最前)。

在使用的時(shí)候,我們使用下面的代碼,直接調(diào)用這些被記錄的ID即可。


復(fù)制代碼
代碼如下:

if(!isset($_COOKIE['history-read-posts']) || empty($_COOKIE['history-read-posts']))return;
$history_read_posts = trim($_COOKIE['history-read-posts']);
$history_read_posts = array_unique(array_filter(explode(',',$history_read_posts,$count)));
foreach($history_read_posts as $key => $p){
$get_post = get_post($p);
echo '<li><a href="'.get_permalink($p).'" title="'.get_the_title($p).'" target="_blank">'.get_the_title($p).'</a></li>';
}

這種方法最直接有效,而且理解起來非常容易。

相關(guān)文章

最新評(píng)論