不知道出于什么原因,1.30后的WP-PostViews插件取消了原先存在的get_timespan_most_viewed函數(shù),這也是最近在網(wǎng)上得知的,因?yàn)樽罱行那樾薷闹黝}、插件,博客上面這個(gè)插件提供的小工具在邊欄的顯示內(nèi)容幾個(gè)月都不怎么變,原因很簡單,設(shè)置的是瀏覽最多的文章,自然多的越來越多了,于是想修改下顯示設(shè)置,很遺憾后臺(tái)沒有相關(guān)設(shè)置,雖然有最近的,但是好像還不是我要的結(jié)果。
百度一陣子才知道原先這個(gè)插件有這個(gè)功能的,現(xiàn)在沒有了,但是有人在網(wǎng)上共享了之前的函數(shù),這樣就簡單多了。把以下函數(shù)復(fù)制到wp-postviews.php文件的任意地方(當(dāng)然是要合適點(diǎn)的任意地方,不要放其他函數(shù)中間就ok了)。
functionget_timespan_most_viewed($mode='',$limit=20,$days=1,$display=true){
global$wpdb,$post;
$limit_date=current_time('timestamp')-($days*86400);
$limit_date=date("Y-m-dH:i:s",$limit_date);
$where='';
$temp='';
if(!empty($mode)&&$mode!='both'){
$where="post_type='$mode'";
}else{
$where='1=1';
}
$most_viewed=$wpdb->get_results("SELECTDISTINCT$wpdb->posts.*,(meta_value+0)ASviewsFROM$wpdb->postsLEFTJOIN$wpdb->postmetaON$wpdb->postmeta.post_id=$wpdb->posts.IDWHEREpost_date<'".current_time('mysql')."'ANDpost_date>'".$limit_date."'AND$whereANDpost_status='publish'ANDmeta_key='views'ANDpost_password=''ORDERBYviewsDESCLIMIT$limit");
if($most_viewed){
foreach($most_viewedas$post){
$post_title=get_the_title();
$post_views=intval($post->views);
$post_views=number_format($post_views);
$temp.="<li><ahref=/"".get_permalink()."/">$post_title</a>-$post_views".__('views','wp-postviews')."</li>";
}
}else{
$temp='<li>'.__('N/A','wp-postviews').'</li>'."/n";
}
if($display){
echo$temp;
}else{
return$temp;
}
}
單單的放上以上語句其實(shí)還是不行的,雖然很多博客說可以,可能都是認(rèn)為寫博客的都懂語言吧?雖然我也能改,但小子覺得這個(gè)對(duì)于那些不懂php為何物的新手來說,真的是難上加難啊。
這里小子為了大家方便就整理了下,為大家分享。
case'least_viewed':
get_least_viewed($mode,$limit,$chars);
break;
很簡單,打開wp-postviews.php文件在###Function:DisplayLeastViewedPage/Post或者其他的函數(shù)上面貼上以上函數(shù),再次說明,函數(shù)添加位置隨意,但是盡量與其他業(yè)務(wù)函數(shù)放到一起,便于分析嘛!之后的操作就是再小工具的選項(xiàng)StatisticsType中添加get_timespan_most_viewed選項(xiàng),這個(gè)直接在wp-postviews.php文件中搜索StatisticsType,你可以看到
<optionvalue="least_viewed"<?phpselected('least_viewed',$type);?>><?php_e('LeastViewed','wp-postviews');?></option>
或者其他選項(xiàng)的內(nèi)容,復(fù)制一行,粘貼到上面或者下面(當(dāng)然也可以是中間),然后將以上語句中l(wèi)east_viewed或者其他的你復(fù)制的語句中的值,修改為get_timespan_most_viewed,這樣就完成了后臺(tái)操作,不過目前選擇這個(gè)選項(xiàng)后邊欄是無顯示的,因?yàn)檩敵龅牡胤竭€要改進(jìn),下一步同樣是在wp-postviews.php文件中操作,搜索classWP_Widget_PostViews,在functionwidget函數(shù)中找到switch語句,其中應(yīng)該有四個(gè)轉(zhuǎn)向,形如
case'least_viewed':
get_least_viewed($mode,$limit,$chars);
break;
不用想,重新復(fù)制一份,粘貼到并列的位置,將least_viewed修改為get_timespan_most_viewed,這樣,回到首頁刷新下,顯示效果應(yīng)該是一天熱門的,因?yàn)槭呛瘮?shù)默認(rèn)的(原函數(shù)是默認(rèn)30天,小子設(shè)置為1天了),這里沒有在后臺(tái)添加選項(xiàng),有需要可以自己需求修改函數(shù)體內(nèi)數(shù)據(jù)即可。
另外,還有一點(diǎn)就是,上面提供的get_timespan_most_viewed函數(shù)是舊版本中的函數(shù),不支持目前新版的輸出格式化等,這里小子又根據(jù)新的變量定義整理了如下函數(shù),需要的可以直接復(fù)制替換上面提供的get_timespan_most_viewed函數(shù)來使用,函數(shù)體如下
$where="post_type='$mode'";
}else{
$where='1=1';
}
$most_viewed=$wpdb->get_results("SELECTDISTINCT$wpdb->posts.*,(meta_value+0)ASviewsFROM$wpdb->postsLEFTJOIN$wpdb->postmetaON$wpdb->postmeta.post_id=$wpdb->posts.IDWHEREpost_date<'".current_time('mysql')."'ANDpost_date>'".$limit_date."'AND$whereANDpost_status='publish'ANDmeta_key='views'ANDpost_password=''ORDERBYviewsDESCLIMIT$limit");
if($most_viewed){
foreach($most_viewedas$post){
$post_views=intval($post->views);
$post_title=get_the_title($post);
if($chars>0){
$post_title=snippet_text($post_title,$chars);
}
$post_excerpt=views_post_excerpt($post->post_excerpt,$post->post_content,$post->post_password,$chars);
$temp=stripslashes($views_options['most_viewed_template']);
$temp=str_replace("%VIEW_COUNT%",number_format_i18n($post_views),$temp);
$temp=str_replace("%POST_TITLE%",$post_title,$temp);
$temp=str_replace("%POST_EXCERPT%",$post_excerpt,$temp);
$temp=str_replace("%POST_CONTENT%",$post->post_content,$temp);
$temp=str_replace("%POST_URL%",get_permalink($post),$temp);
$output.=$temp;
}
}else{
$output='<li>'.__('N/A','wp-postviews').'</li>'."/n";
}
if($display){
echo$output;
}else{
return$output;
}
}
}
如函數(shù)參數(shù)所示,設(shè)置天數(shù)的地方已經(jīng)用注釋標(biāo)注了,這里仍然不再提供面板設(shè)置的選項(xiàng)了,需要的朋友可以自己折騰,在調(diào)試的時(shí)候可能因?yàn)楫?dāng)日訪問量過低,設(shè)置1天不能實(shí)現(xiàn)預(yù)期的顯示效果,就設(shè)置回30天了,大家可以根據(jù)需要設(shè)置。
新聞熱點(diǎn)
疑難解答
圖片精選