掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
至于WordPress是什么?大家不知道的可以百度、谷歌去補(bǔ)腦。而關(guān)于我對(duì)WordPress的描述,大家可以參考《完善的解決方案實(shí)現(xiàn)WordPress讓聚合模塊優(yōu)先顯示置頂文章》這篇文章,而其實(shí)現(xiàn)在的這篇文章跟篇文章是類似的,都是關(guān)于置頂?shù)?,只是那篇是關(guān)于聚合模塊的,而這里是列表頁(yè)面的。如下圖:
因此,關(guān)于文章中需要的一些廢話大家也可以參考我上面的那篇文章,我們就不需要重復(fù)了。我們的需求是:在WordPress的分類列表中先把置頂?shù)奈恼嘛@示出來(lái),然后再顯示普通的文章(不包含置頂?shù)模?dāng)然一般來(lái)講我們不希望除第一位外的其他頁(yè)面還顯示置頂?shù)奈恼?,此外還有就是我們要考慮子分類進(jìn)來(lái)。下面就直接貼出代碼來(lái),在代碼中詳細(xì)說(shuō)明吧,下面是實(shí)現(xiàn)該需求的核心代碼:
/* 預(yù)處理工作:獲得當(dāng)前分類的ID,如果它有子分類就同時(shí)獲得她所有的子分類ID 如果這步不做,那么就會(huì)出現(xiàn)問(wèn)題,比如ID=1下面有ID為2、3、5,那么當(dāng)我們打開父分類ID=1時(shí)將沒(méi)有數(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是為了讓只有第一頁(yè)顯示置頂?shù)?,?dāng)然這個(gè)if可以放在其他的位置,放在最開始都可以,也就是到了第二頁(yè)以后我們這篇文章都不需要了,因?yàn)椴恢庙斄?,哈? if($paged==0) :while(have_posts()) : the_post(); //輸出html等內(nèi)容.... endwhile;wp_reset_query();endif; /* 普通文章開始--- */ //循環(huán)走起來(lái),注意這里加了一個(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)營(yíng)了好幾年了,那么這一個(gè)分類及其子分類可能就已經(jīng)有了很多的置頂文章。如果我們想在列表中只顯示有限的幾條(比如5條),這樣就可以避免太多置頂?shù)淖層脩舾杏X(jué)網(wǎng)站沒(méi)更新一樣。過(guò)去WordPress默認(rèn)的置頂,大家的做法可能是一個(gè)置頂一段時(shí)間后取消。
為了運(yùn)營(yíng)更加方便,現(xiàn)在加一個(gè)需求,就是只把最新的幾條數(shù)據(jù)置頂顯示,其他的置頂文章在列表中顯示跟普通文章一樣的。這個(gè)時(shí)候我們只需要稍微修改上面的核心代碼即可。
//把$args改成,實(shí)際上就為了加個(gè)約束最新的5條才顯示出來(lái) $args=array('cat' => $catarr,'post__in' => get_option('sticky_posts'),'showposts' => 5); //然后在$args2前加上,依次獲得將被顯示出來(lái)的這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來(lái)跳開置頂?shù)?,可以說(shuō)基本上解決了我們所需要的,但其實(shí)不是極其完美的。而如果使用query_posts()、WP_Query()來(lái)就需要考慮分頁(yè)等問(wèn)題,就相對(duì)來(lái)復(fù)雜了;我個(gè)人在本次項(xiàng)目中采用的是continue語(yǔ)句,可以說(shuō)我要的需求實(shí)現(xiàn)了,但在一些極端需求下是需要進(jìn)一步處理的,比如每頁(yè)顯示20條,第二頁(yè)有10條被置頂了,那么第二頁(yè)就只顯示剩下的10條了(當(dāng)然這是非常極端的,誰(shuí)沒(méi)事置頂那么多,就算置頂這么多一般說(shuō)明有了很多數(shù)據(jù),也很難集中在某一頁(yè))。
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流