2024国产成人精品免费视频|日本免费一区二区三区毛片|久久97超碰色中文字幕|亚洲天堂a中文字幕

詳解讓W(xué)ordPress實(shí)現(xiàn)列表頁先顯示置頂文章的解決方案

2015-09-11 13:56 欄目:技術(shù)開發(fā) 查看(13853)

至于WordPress是什么?大家不知道的可以百度、谷歌去補(bǔ)腦。而關(guān)于我對(duì)WordPress的描述,大家可以參考《完善的解決方案實(shí)現(xiàn)WordPress讓聚合模塊優(yōu)先顯示置頂文章》這篇文章,而其實(shí)現(xiàn)在的這篇文章跟篇文章是類似的,都是關(guān)于置頂?shù)模皇悄瞧顷P(guān)于聚合模塊的,而這里是列表頁面的。如下圖:

xxx

因此,關(guān)于文章中需要的一些廢話大家也可以參考我上面的那篇文章,我們就不需要重復(fù)了。我們的需求是:在WordPress的分類列表中先把置頂?shù)奈恼嘛@示出來,然后再顯示普通的文章(不包含置頂?shù)模?,?dāng)然一般來講我們不希望除第一位外的其他頁面還顯示置頂?shù)奈恼?,此外還有就是我們要考慮子分類進(jìn)來。下面就直接貼出代碼來,在代碼中詳細(xì)說明吧,下面是實(shí)現(xiàn)該需求的核心代碼:

/*
預(yù)處理工作:獲得當(dāng)前分類的ID,如果它有子分類就同時(shí)獲得她所有的子分類ID
如果這步不做,那么就會(huì)出現(xiàn)問題,比如ID=1下面有ID為2、3、5,那么當(dāng)我們打開父分類ID=1時(shí)將沒有數(shù)據(jù)顯示。
*/
//創(chuàng)建一個(gè)數(shù)組catarr,它就是包含所有的ID號(hào)的
$catarr=array();
//首先,把自己放進(jìn)去
$catarr[]=$cat;
//獲取當(dāng)前分類子分類信息
$categories = get_categories('child_of='.$cat);
//循環(huán)上述資源,依次把子分類ID放入數(shù)組(如果有)
foreach($categories as $value){
$catarr[]=$value->term_id;
/*
顯示置頂信息開始---
*/
//條件依次為所屬指定的分類(當(dāng)前及其子類)、置頂?shù)?
$args=array('cat' => $catarr,'post__in' => get_option('sticky_posts'));
query_posts($args);
//if是為了讓只有第一頁顯示置頂?shù)?,?dāng)然這個(gè)if可以放在其他的位置,放在最開始都可以,也就是到了第二頁以后我們這篇文章都不需要了,因?yàn)椴恢庙斄?,哈?
if($paged==0) :while(have_posts()) : the_post();
//輸出html等內(nèi)容....
endwhile;wp_reset_query();endif;
/*
普通文章開始---
*/
//循環(huán)走起來,注意這里加了一個(gè)continue,就是忽略掉置頂?shù)?
if ( have_posts() ) : while(have_posts()) : the_post();
if(is_sticky()) : continue; endif;
//輸出html等內(nèi)容....
endwhile;wp_reset_query();endif;

上面的需求是一開始顯示所有的置頂文章,如果一個(gè)網(wǎng)站運(yùn)營了好幾年了,那么這一個(gè)分類及其子分類可能就已經(jīng)有了很多的置頂文章。如果我們想在列表中只顯示有限的幾條(比如5條),這樣就可以避免太多置頂?shù)淖層脩舾杏X網(wǎng)站沒更新一樣。過去WordPress默認(rèn)的置頂,大家的做法可能是一個(gè)置頂一段時(shí)間后取消。

為了運(yùn)營更加方便,現(xiàn)在加一個(gè)需求,就是只把最新的幾條數(shù)據(jù)置頂顯示,其他的置頂文章在列表中顯示跟普通文章一樣的。這個(gè)時(shí)候我們只需要稍微修改上面的核心代碼即可。

//把$args改成,實(shí)際上就為了加個(gè)約束最新的5條才顯示出來
$args=array('cat' => $catarr,'post__in' => get_option('sticky_posts'),'showposts' => 5);
//然后在$args2前加上,依次獲得將被顯示出來的這5條置頂文章的ID,并一次送入數(shù)組$dingarr。
$dingarr=array();
$ding=query_posts($args);
foreach($ding as $value){
   $dingarr[]=$value->ID;
}
//把continue的條件換一下
if(in_array($post->ID,$dingarr)) : continue; endif;

實(shí)際上上面用continue來跳開置頂?shù)?,可以說基本上解決了我們所需要的,但其實(shí)不是極其完美的。而如果使用query_posts()、WP_Query()來就需要考慮分頁等問題,就相對(duì)來復(fù)雜了;我個(gè)人在本次項(xiàng)目中采用的是continue語句,可以說我要的需求實(shí)現(xiàn)了,但在一些極端需求下是需要進(jìn)一步處理的,比如每頁顯示20條,第二頁有10條被置頂了,那么第二頁就只顯示剩下的10條了(當(dāng)然這是非常極端的,誰沒事置頂那么多,就算置頂這么多一般說明有了很多數(shù)據(jù),也很難集中在某一頁)。

與我們的項(xiàng)目經(jīng)理聯(lián)系
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流

轉(zhuǎn)載請(qǐng)注明出處:詳解讓W(xué)ordPress實(shí)現(xiàn)列表頁先顯示置頂文章的解決方案 - 微構(gòu)網(wǎng)絡(luò)
分享:
標(biāo)簽:
崇阳县| 中宁县| 合江县| 兰溪市| 平和县| 蕲春县| 南陵县| 武乡县| 洛扎县| 台北县| 延津县| 南乐县| 江阴市| 平南县| 施甸县| 北京市| 白城市| 冕宁县| 凌海市| 长治县| 桂平市| 琼中| 柯坪县| 普格县| 瓮安县| 醴陵市| 龙岩市| 紫云| 南乐县| 胶州市| 遂宁市| 石门县| 牙克石市| 安多县| 常山县| 永德县| 迁安市| 永昌县| 翁牛特旗| 德兴市| 嫩江县|