wordpress博客系統中如果我們文章置頂那么文章置頂的文章排序會發生變化,那么我希望實現的功能是文章置頂不改變文章排序了,下面我找到一站長寫的方法現在分享給各位.
文章置頂不排序,query_posts方法的代碼如下:
- <?php
- $display_categories = get_option(‘swt_cat_exclude’);
- $limit = get_option(‘posts_per_page’);
- $paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;
- $sticky = get_option(‘sticky_posts’);
- $args = array(
- ‘cat’ =–> $display_categories,
- ‘showposts’ => $limit=11,
- //忽略sticky_posts,即不置頂(不將置頂文章提至最前),但是輸出置頂文章
- ‘ignore_sticky_posts’ => 1,
- //排除置頂文章,不輸出置頂文章。這一句和上一句只留一句即可,根據自己需要處理
- ‘post__not_in’ => $sticky,
- ‘paged’ => $paged
- );
- query_posts($args);
- if (have_posts()) :
- while (have_posts()) : the_post();
- /* 此處自行添加輸出內容,如標題、日期、作者、摘要等 */
- endwhile;
- endif;
- ?>
這段代碼是在網上找到的一段處理與過濾置頂文章的辦法,但是會導致之前說的搜索、標簽、分類頁面只顯示首頁內容的問題,為了解決這個問題,向數組內加入了s、tag等查詢條件,雖然能夠正常的查詢到標簽頁與搜索頁的內容,但是又會導致分類頁出現問題,因此只能另尋他法,
仔細的查閱wordpress的方法說明,發現query_posts方法可以通過全局變量$query_string來設置查詢過濾,并且不影響其他的查詢結果,代碼如下:
- global $query_string;
- query_posts( $query_string . ‘&ignore_sticky_posts=1′ );
設置顯示/不顯示置頂文章
在默認主題下,如果將某篇文章設置成置頂后,會將該文章提至首頁文章列表最前顯示,此時,可以添加一個置頂圖標或者一個字眼“[置頂]”作為區別,很簡單,只需在文章標題的代碼附近加上一句代碼即可,用函數is_sticky()判斷是否為置頂文章,如果是的話就加入相應的圖標或者文字,代碼如下:
- <?php if(is_sticky()) {echo '<img src="'.get_bloginfo('template_directory').'/images/top.gif" alt="置頂文章" title="置頂文章" />';} ?>
如果要求不高的話,這樣也就可以了,已經達到了目的,但是如果你的要求較高,想將置頂文章和普通文章分離開來,想讓置頂文章和普通文章有明顯區別,如置頂文章只顯示標題,而普通文章還要顯示更多的內容,可以用下面的辦法來實現.
首先,將原來的顯示所有文章的代碼稍作調整,讓其不將置頂文章提至最前,但仍然出現在文章列表中,將以下代碼替換到原輸出所有文章代碼的位置,一般在<?php if (have_posts()):while (have_posts()):the_post(); ?>前,注意,以下代碼和原代碼有部分重疊,請將不同的關鍵代碼加入相應的位置即可,主要是有注釋的那兩行,代碼如下:
- <?php
- $display_categories = get_option('swt_cat_exclude');
- $limit = get_option('posts_per_page');
- $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
- $sticky = get_option('sticky_posts');
- $args = array(
- 'cat' =--> $display_categories,
- 'showposts' => $limit=11,
- //忽略sticky_posts,即不置頂(不將置頂文章提至最前),但是輸出置頂文章
- 'ignore_sticky_posts' => 1,
- //排除置頂文章,不輸出置頂文章。這一句和上一句只留一句即可,根據自己需要處理
- 'post__not_in' => $sticky,
- 'paged' => $paged
- );
- query_posts($args);
- if (have_posts()) :
- while (have_posts()) : the_post();
- /* 此處自行添加輸出內容,如標題、日期、作者、摘要等 */
- endwhile;
- endif;
- ?>
然后,在適當位置添加只顯示置頂文章的代碼,一般的話,放在靠前的位置,這樣才能體現出置頂的效果嘛,也就是放在顯示所有文章列表代碼之前,代碼如下:
- <?php
- //獲取所有置頂文章
- $sticky = get_option('sticky_posts');
- //對這些文章排序, 日期最新的在最上
- rsort($sticky);
- //獲取5篇文章
- $sticky = array_slice($sticky, 0, 5);
- //輸出這些文章
- query_posts(array('post__in' =--> $sticky, 'ignore_sticky_posts' => 1));
- if (have_posts()) :
- while (have_posts()) : the_post();
- /* 此處自行添加輸出內容,如標題等 */
- endwhile;
- endif;
- //此句十分重要,如果不加,可能會造成一些錯誤,如失去分頁翻頁效果等
- wp_reset_query();
- ?>
這樣的話,基本上已經實現了顯示和不顯示置頂文章的功能.
新聞熱點
疑難解答
圖片精選