WordPress 置頂文章怎麼設定——讓重點文留在最上方

WordPress 預設依照發佈時間倒序排列文章,最新的永遠擠在最上面。但有些內容你會希望它長期停在第一個位置:站務公告、熱賣商品說明、或是花了大把心力寫的主力長文。這類文章如果跟著時間被往下沖,等於白費。WordPress 內建的「置頂文章」(Sticky Posts)就是為了這件事而設計,勾一個選項,那篇文章就會釘在文章列表最前面,不受發佈日期影響。

很多人卡在兩個地方:一是找不到那個選項藏在哪,二是明明勾了置頂,首頁卻完全沒反應。這篇會先帶你用最快的方式設定好,再說明為什麼有時候置頂「沒效」,最後談談怎麼控制置頂數量、調整外觀,以及什麼情況下其實不該用置頂。

WordPress 置頂文章到底是什麼

置頂文章是 WordPress 的內建功能,把指定文章固定在文章索引頁(blog index)的最上方,排在所有一般文章之前,而且不會因為又發了新文章就被推下去。它在資料庫裡的運作方式很單純:被置頂的文章 ID 會存進一個叫 sticky_posts 的選項裡,主查詢(main query)撈文章時會先把這些 ID 拉到結果最前面。

要先講清楚一個限制:置頂功能只支援內建的「文章」(post)這個類型,自訂文章類型(Custom Post Type)預設不吃這套。如果你想讓商品、作品集這類自訂類型也有置頂效果,得另外用程式或外掛處理,後面會提到。

另外,置頂跟「精選文章」(Featured)是兩回事。精選通常是佈景主題自己定義的欄位或分類,用來餵首頁的輪播或精選區塊;置頂則是 WordPress 核心層級的排序行為。兩者可以並存,但設定的地方不同,別搞混了。

怎麼用區塊編輯器設定置頂

最常見的做法是在編輯文章時直接勾選。WordPress 目前預設的區塊編輯器(Gutenberg)操作如下:

第 1 步、打開你要置頂的文章,進入編輯畫面。

第 2 步、看右側欄的「文章」設定面板(如果沒看到,點右上角的齒輪圖示打開)。

第 3 步、在「摘要」或「狀態與顯示度」區塊裡,找到「置頂於頁面頂端」(Stick to the top of the blog)的勾選框,把它打勾。

第 4 步、按「更新」或「發佈」。

完成後這篇文章就會被加進 sticky_posts 名單。你可以同時置頂多篇,它們會一起排在文章列表最前面,彼此之間仍依發佈時間排序。


置頂文章
2
較新一般文
3
較舊一般文

怎麼用傳統編輯器或快速編輯設定置頂

如果你還在用傳統編輯器(Classic Editor),選項的位置不太一樣。在右側「發佈」面板裡,找到「公開度」(Visibility)那一行,點旁邊的「編輯」連結,就會展開三個選項,勾選「將這篇文章置頂於首頁」(Stick this post to the front page),再按確定、更新即可。

還有一個更快的方式,適合一次調整多篇或事後補設定的情況,就是用「快速編輯」。到後台「文章」的列表頁,把滑鼠移到某篇文章標題上,下方會浮出操作連結,點「快速編輯」。展開的面板右側會有「置頂此文章」(Make this post sticky)的勾選框,勾完按「更新」就好,連進文章內頁都不用。要取消置頂也是同一個地方,把勾拿掉即可。

快速編輯的好處是看著整份文章清單操作,哪幾篇要置頂、哪幾篇要解除,一目了然,比逐篇開進去快很多。

為什麼置頂了首頁卻沒反應

這是最多人踩到的坑,而且九成出在同一個原因:你的首頁不是文章索引頁,而是一個靜態頁面。

WordPress 的置頂行為,預設只作用在「顯示文章列表的那一頁」。如果你在「設定」的「閱讀」裡,把首頁設成「最新文章」,那麼置頂就會直接在網站首頁生效。但如果你選的是「靜態頁面」,把某個頁面當首頁、另指定一個頁面當文章頁,那麼置頂只會出現在你指定的那個「文章頁」上,不會出現在靜態首頁。

判斷方法很簡單:到「設定」的「閱讀」看一下「首頁顯示」設定。是「最新文章」的話,置頂在首頁就會動;是「靜態頁面」的話,請去看你設定的那個文章頁。

除了首頁類型,還有幾個常見原因會讓置頂失效,逐一排查:

  • 佈景主題的查詢忽略了置頂:有些主題(尤其是設計感強的佈景或頁面建構器)在首頁用了自訂查詢,並加了 ignore_sticky_posts 參數,這會讓置頂被無視。這種情況下置頂功能本身沒壞,是主題沒讀它。
  • 文章狀態不是公開已發佈:排程中、私密、或設了密碼的文章,置頂不會顯示。確認文章已正常發佈、且為公開狀態。
  • 快取沒清:用了快取外掛、CDN 或主機層快取的話,畫面可能還停在舊版本。清一次快取再看。
  • 改用了區塊主題的查詢迴圈:較新的區塊佈景主題(Block Theme)首頁是用「查詢迴圈」(Query Loop)區塊組起來的,它對置頂的處理跟傳統主題不同,有時需要在區塊設定裡確認有沒有把置頂納入。

把這幾項對過一輪,大多數「置頂沒反應」的狀況都能找到根源。

怎麼在靜態首頁顯示置頂文章

如果你的首頁是靜態頁面,又希望置頂文章能在首頁露出,內建勾選是不夠的,得靠程式把置頂文章撈出來。核心提供了一個 get_option( 'sticky_posts' ),會回傳所有置頂文章的 ID 陣列,搭配 WP_Query 就能自己組一個只顯示置頂文章的區塊。

以下程式碼可以放進子佈景主題的範本檔,撈出最新的前 5 篇置頂文章:

$sticky = get_option( 'sticky_posts' );
rsort( $sticky ); // 由新到舊排序
$sticky = array_slice( $sticky, 0, 5 ); // 只取前 5 篇

$query = new WP_Query( array(
    'post__in'            => $sticky,
    'ignore_sticky_posts' => 1,
) );

這裡的 ignore_sticky_posts => 1 看起來矛盾,其實是必要的。它的作用是告訴查詢「不要再套用預設那套把置頂往前提的邏輯」,因為我們已經自己用 post__in 精準指定要哪些文章了,避免重複處理造成排序混亂。

如果完全沒有任何置頂文章,get_option( 'sticky_posts' ) 會回傳空陣列,這時最好加個判斷,沒有置頂就跳過這個區塊,或改撈最新文章當備案,免得版面開了天窗。

怎麼控制置頂的數量與在內文判斷

置頂文章沒有數量上限,你想置頂幾篇都可以,但全部擠在最上面通常不是好事,列表頁前面被一整排置頂佔滿,反而把真正的最新內容壓下去。實務上建議同時保持 1 到 3 篇置頂就好,需要更多就改用前一節的程式控制顯示數量。

如果想在迴圈裡針對置頂文章做不同處理,WordPress 提供 is_sticky() 這個判斷函式。它會回傳這篇文章是不是置頂,讓你決定要不要加標記、換版型或顯示一個「置頂」徽章:

if ( is_sticky() ) {
    echo '<span class="sticky-badge">置頂</span>';
}

反過來,如果你某個區塊不想讓置頂插隊,可以在該查詢加上 ignore_sticky_posts => 1,置頂文章仍會依正常時間順序出現、不再被提到最前;或是用 post__not_in => get_option( 'sticky_posts' ) 把置頂文章整個排除在這個迴圈之外。前者是「不特別對待」,後者是「完全不顯示」,依需求選一個。

怎麼讓置頂文章在外觀上更顯眼

置頂如果只是排序往前,讀者其實看不出哪篇是被特別標記的。要讓它在視覺上突出,可以靠主題的 post_class() 函式。多數正規佈景主題在輸出每篇文章的外層容器時都會呼叫它,像這樣:

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

post_class() 會自動輸出一串 class,其中針對置頂文章會多加一個 sticky 類別。也就是說,你不用額外寫判斷,只要在子主題的 style.css 針對 .sticky 下樣式,就能讓置頂文章長得不一樣,例如加底色、加邊框或放一個小標籤:

.sticky {
    border: 2px solid #c9b8a4;
    background: #faf6ef;
}

要注意的是,能不能吃到 .sticky 取決於你的佈景主題有沒有乖乖呼叫 post_class()。少數精簡主題或自訂版型可能省略了,這時候 .sticky 樣式就不會生效,得自己把 post_class() 補回範本,或改用前面的 is_sticky() 自行輸出標記。

內建置頂不夠用時的外掛選項

內建置頂只作用在文章索引頁、且不支援自訂文章類型,遇到下面這些需求就得靠外掛補強:

  • 想針對不同分類各自置頂:希望「教學」分類頁釘一篇、「公告」分類頁釘另一篇,這種分類層級的置頂,內建做不到,需要分類置頂類型的外掛。
  • 想讓自訂文章類型也能置頂:商品、作品、活動這類自訂類型要置頂,得靠支援 CPT 置頂的外掛,或自己寫程式存取對應的選項。
  • 想要更細的顯示控制:例如分別控制首頁、分類頁、標籤頁要不要顯示置頂,市面上有專門切換置頂顯示位置的外掛能處理。

外掛能省下寫程式的功夫,但每多裝一個就多一份相容性與維護負擔。如果只是基本的文章置頂,內建功能就夠了,不必為了一個勾選框去裝外掛。

怎麼限制誰可以置頂文章

多人協作的網站常有這個顧慮:不希望每個編輯都能隨手把自己的文章置頂。預設情況下,只要使用者擁有 edit_others_posts 這個權限就能置頂文章,也就是說「管理員」(Administrator)和「編輯」(Editor)兩種角色都做得到,作者、投稿者則沒有置頂權限。

問題在於,WordPress 並沒有提供一個獨立的「置頂權限」可以單獨關掉,又不影響編輯修改其他文章的能力。要做到「編輯能改文章但不能置頂」,得靠程式攔截。WordPress 在文章被成功置頂時會觸發 post_stuck 動作、取消置頂時觸發 post_unstuck,可以掛在這兩個鉤子上,判斷操作者若非管理員,就立刻把狀態改回去,等於變相鎖住非管理員的置頂操作。同時也建議用後台樣式把那個勾選框藏起來,避免編輯誤以為自己能置頂、結果按了沒反應而困惑。

這部分屬於進階客製,要動到子主題的 functions.php 或自寫外掛。如果你的網站只有一兩個管理者,通常不需要做到這一步。

什麼時候該用置頂,什麼時候不該

置頂是個簡單但容易被濫用的功能。它最適合的場景很明確:站務公告、限時活動、以及你想長期推廣的支柱文章(pillar article),這類內容值得跳過時間排序、長駐在讀者第一眼會看到的位置。

但有幾種情況用置頂反而幫倒忙。第一,置頂太多篇,把整個列表前段塞滿,最新內容被埋掉,回訪讀者每次看到的都是同幾篇,新鮮感盡失。第二,活動結束了卻忘記取消置頂,過期資訊一直霸佔版面,比沒置頂更傷。第三,如果你要的其實是「依分類分別推薦」或「首頁輪播精選」,那不是置頂該管的事,用主題的精選功能或分類置頂外掛才對。

簡單抓個原則:置頂適合「少數、長期、全站性」的重點文章。設定後記得定期回頭檢查置頂清單,把已經過時的解除,讓置頂維持在精準推薦的狀態,這個功能才真正幫得上忙,而不是變成版面上的雜訊。

相關文章
標籤: 佈景主題, 置頂文章, Sticky Posts, WordPress, 區塊編輯器