黃聰:Wordpress如何不顯示(只顯示)置頂文章


置頂文章是wp2.7引進的一個功能,具體作用如名稱“置頂”。由於設置方便,樣式多樣並且合乎很多人的偏好,所以用處比較大。昨天折騰的時候想添加一個功能:首頁的頂部框框里滾動顯示置頂文章,首頁內容區隱藏置頂文章。解決辦法可以用 is_sticky() 判斷或者 query(...) 來輸出。

但是在具體實施過程中遇到了三個問題:

  • 不顯示置頂文章則每頁文章有多有少,看着不爽。
  • 前一頁、后一頁功能失效。
  • archive等歸檔頁面失效。

一、首先可以肯定,直接判定 !is_sticky() 就輸出的辦法是可行的。但是分頁依舊按照原來的,比如第一頁的9篇文章中有4篇置頂的,除去置頂文章,第一頁就只顯示4篇文章,對於邊欄內容比較豐富的同學們,主要內容部分必然會空出一大片。

二、其次,用 query_posts() 可以嗎?當然,這也是官方給出的解決方案。只需按需要在while(…)前加入

$paged = get_query_var( 'page' ) ? get_query_var( 'page' ) : 1;
$sticky = get_option( 'sticky_posts' );
$args = array(
	'ignore_sticky_posts' => 1,//忽略sticky_posts,不置頂,但是輸出置頂文章
	'post__not_in' => $sticky,//排除置頂文章,不輸出
	'paged' => $paged
);
query_posts( $args );

這里遇到了一個問題,由於這個主題脫胎於twenty ten,所以文章列表顯示用的是loop.php文件,稍微看看可以知道,所有需要列表文章的地方全是在這一個文件中實現的,所以在這里面改明顯是不行 的,直接影響的是所有頁面。所以最后的解決辦法還是在index.php里面的 get_template_part( 'loop', 'index' ); 的前面加入上述的語句,后面記得 wp_reset_query(); 以防不測。

三、附上只輸出置頂文章的解決辦法:

/* 獲取所有置頂文章 */
$sticky = get_option( 'sticky_posts' );
/* 對這些文章排序, 日期最新的在最上 */
rsort( $sticky ); /* 獲取5篇文章 */
$sticky = array_slice( $sticky, 0, 5 );
/* 輸出這些文章 */
query_posts( array( 'post__in' => $sticky, 'ignore_sticky_posts' => 1 ) );
while ( have_posts() ) : the_post();  
/* 輸出內容 */
endwhile;
wp_reset_query();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM