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