Wordpress

Query Loop 怎麼用?排序、篩選、分頁與自訂樣板一次學會

你想在網站首頁放一個作品集,或是把部落格文章依主題整理成好幾種清單:先秀熱門案例、再依分類分區塊、每張卡片還要露出完整摘要跟作者頭像。打開編輯器一插入精選文章區塊,才發現它只給你「顯示最新幾篇」這一個選項,排序方式、要不要分頁、每篇卡片長什麼樣子全都不能碰。

Query Loop 區塊要解決的正是這個問題。它是 WordPress 內建的進階區塊,能依你指定的條件顯示文章,效果類似寫一段 PHP 迴圈,卻完全不用碰程式碼。跟精選文章區塊比,它能再往下決定排序邏輯、置頂文章要不要特殊處理、篩選哪個分類或作者、每篇卡片要顯示標題還是全文,甚至能不能點擊。這些差異合起來,才是它被官方稱為「更完整版本」的真正原因。

搞懂 Query Loop,一頁作品集、一份食譜清單、一組相關文章區塊都能自己組出來,不必額外裝外掛,也不用碰佈景主題的樣板檔案。這篇文章先從它跟精選文章的差異講起,再一路拆進它的巢狀結構、查詢設定、排序篩選、分頁,直到卡片內部的版面自訂與幾個容易踩的陷阱。

Query Loop 是什麼?比精選文章多的排序、篩選與版面自由

WordPress 官方文件把 Query Loop 定義成「進階區塊,能依指定條件顯示文章,像一段不用寫程式碼的 PHP 迴圈」,並直接說它是「更複雜、更強大版本的精選文章區塊」。這句定義聽起來抽象,換個角度想比較容易懂,精選文章區塊像一個固定尺寸的模具,你只能決定要不要用它、倒進去幾份;Query Loop 則像一張可以自己調整的工作台,模具的形狀、擺放順序、裡面要放什麼配料,全部由你決定。

這個「更完整」不是空泛的行銷說法,而是具體展開在三個能力上,精選文章區塊只能選「顯示幾篇最新文章」,Query Loop 能再決定排序方式(新到舊、舊到新、字母順序)、要不要分頁、每篇文章卡片裡放哪些元素、長什麼版面。換句話說,精選文章給你一份成品,Query Loop 給你食材跟做法。

WordPress.com 官方支援文件補了一段語源解釋,說明 Query Loop 這個名字就是字面上的意思,WordPress 先「查詢」(query)出符合條件的內容,再用「迴圈」(loop)把這些內容逐一顯示出來。名字本身就是它在做的兩件事。

官方文件也舉了幾個實際案例:用 Query Loop 可以做出一頁作品集、一份食譜清單頁,或是一個新聞區塊列表。這些效果的共通點是「同一種版面、套用在一批動態內容上」,而且內容會隨你之後發布的新文章自動更新,不必每次手動加卡片。

免外掛也能做出動態文章列表的原生區塊優勢

裝任何文章列表外掛之前,其實原生區塊就值得學,理由很直接,Query Loop 從 WordPress 5.8 版本起就內建在核心裡,是全站編輯(Full Site Editing)重要的一環,任何有支援區塊編輯器的網站都能直接用,不必額外安裝任何外掛。

它能用在區塊主題的常見區域,像部落格頁、新聞區、作品集頁面,也可以直接加進一般文章或頁面的內容區。不限於區塊主題,傳統佈景主題只要用區塊編輯器寫內容,就一樣加得進去。這代表就算你的網站沒有全站編輯功能,只要在文章或頁面裡插入這個區塊,照樣能做出動態列表。

跟固定寫死的內容比起來,Query Loop 的彈性在於它會「持續更新」。WordPress.com 官方文件的說法是,它會根據你選擇的條件持續更新內容,設定好之後,之後發的新文章會自動跟著出現在清單裡,不需要回頭手動調整。這一點跟寫死的區塊有明顯落差,如果你是手動貼連結、手動排版做出一份「精選案例」清單,每次有新案例都得回來改;Query Loop 設定一次篩選條件,新內容符合條件就自動排進去。

換版面的成本也低很多。固定寫死的區塊要換排版通常得改樣板檔案,牽一髮動全身;Query Loop 只要在編輯器裡調整區塊設定,就能換掉排序、篩選或版面,不用碰任何程式檔案,對不熟技術的人也友善。

加入區塊之後,四個巢狀部分各自的分工

加進頁面之前,先弄懂一件事,Query Loop 不是單一整塊的區塊,而是四層各司其職的巢狀積木疊起來的。這個心智模型很重要,因為後面所有排序、篩選、自訂單篇樣板的設定,都是分別調整這四層裡的某一層。選錯層,設定選項就會消失或不生效,是很多人第一次用最容易踩的雷。

要加入這個區塊,可以點區塊插入器的「+」圖示搜尋「Query Loop」,或是更快的方式,直接輸入「/query loop」再按 Enter。加入之後,編輯器會先給你兩個起始選項:「Choose」與「Start blank」。

從樣板起步或從空白區塊自己組

第一個選項是「Choose」,能從佈景主題內建、已經用了 Query Loop 的樣板中挑一款來套用。這個選項適合還不熟悉 Query Loop 長什麼樣子的人,先選一個現成樣板看看成品長相,之後再回頭一項一項微調,會比從零開始有安全感。

第二個選項是「Start blank」,從幾種空白變化款開始,之後仍然可以自由增減內部區塊。這個選項適合已經很清楚自己要什麼版面的人。不用先看別人的成品,直接從乾淨的起點組裝,掌控度比套現成樣板高,但相對要自己多做幾步設定。兩種起手式沒有絕對的對錯,差別只在你現在對這個區塊熟不熟。

用清單檢視揪出每一層巢狀區塊

不管選哪種起手式,打開清單檢視(List View)都是第一步該做的事。展開之後會看到 Query Loop 底下巢狀著 Post Template,Post Template 底下又巢狀著標題、精選圖片這些子區塊。這正是前面說的四層結構,包括:Query Loop 這個最外層容器管理哪些文章出現;Post Template 是容器,裝著每篇文章重複套用的版面;Pagination 讓訪客翻頁,是選用的;No Results 在查無結果時顯示訊息,官方建議保留,避免頁面對訪客顯示一片空白。

WordPress 區塊編輯器的清單檢視,展開 Query Loop 底下巢狀的文章範本、分頁與沒有結果三層區塊
在清單檢視展開 Query Loop,就看得清它是文章範本、分頁、沒有結果層層巢狀的積木,選對層級設定才不會失效。

選對層級,是後面「排序」、「篩選」、「自訂單篇樣板」三件事能不能順利做到的關鍵前提。官方文件特別提醒一個常見的困惑點,如果在 Query Loop 設定裡看不到貼文類型、篩選、其他查詢設定的選項,代表你要先選取 Query Loop 區塊本身,再把查詢類型從 Default 改成 Custom。很多人以為設定選項消失了,其實只是選錯了層,或還沒切換查詢類型。

查詢類型切到自訂,篩選選項才會現身

這一節要處理的,是全篇最容易讓人搞混的一步。Query Loop 預設的查詢類型是 Default,意思是它會跟著目前使用的樣板決定顯示哪些文章,例如放進部落格封存頁樣板,不用特別設定就會顯示對應的文章清單。只要維持 Default,你就完全看不到貼文類型、排序、篩選這些設定,不是它們壞掉,是還沒切換。

只有把查詢類型改成 Custom(自訂),才會出現一整組設定:貼文類型、排序方式、置頂文章、顯示選項、篩選條件。排序、分頁、自訂單篇樣板要用到的設定,幾乎都建立在切成 Custom 之後才看得到。換句話說,Default 適合「跟著樣板走就好」的情境,Custom 才是自己動手指定要顯示什麼內容的起點。

WordPress 核心開發部落格 Make WordPress Core 說明,WordPress 6.7 版起,這個切換方式已經被簡化過。過去要手動開啟一個叫「從樣板繼承查詢」的開關,現在不再需要。Query Loop 預設就會自動繼承查詢脈絡,包含加進單篇文章樣板時也會自動配置好對應的內容類型。設定介面也跟著簡化,變成「使用預設選項」或「建立自訂查詢」的單一切換,選了建立自訂查詢後,才會出現貼文類型與篩選這些選項。顯示筆數、略過筆數、分頁上限這幾個原本分散的設定,也一併搬進同一個面板統一管理,不必在幾個不同角落各找一次。

排序邏輯與置頂文章的四種對待方式

切到自訂查詢之後,排序方式跟置頂文章通常會一起出現在同一個設定區塊裡;排序決定文章出現的先後順序,置頂文章決定「釘選文章」在這個 Query Loop 裡要不要被特別對待。

排序方式(Order by)提供四個選項:由新到舊(預設)、由舊到新、字母 A 到 Z、字母 Z 到 A。近期改版已經拿掉舊版的遞增、遞減排序選項,目前介面就是固定的這四種。這裡有個容易忽略的限制,字母排序對中文標題效果不佳,因為中文沒有字母順序可言,排出來的先後很可能不是你預期的樣子;真的需要精準排序,由新到舊或由舊到新反而更可靠。

置頂文章(Sticky posts)提供四個選項。包含(Include,預設)讓置頂文章照樣排在最前面;排除(Exclude)完全不顯示置頂文章;忽略(Ignore)讓置頂文章出現在清單裡,但不特別排到最前面,跟其他文章一起依排序規則排列;僅顯示(Only)只列出置頂文章,其他文章一概不出現。

把查詢類型切到自訂後,Query Loop 的區塊設定側欄出現排序方式與置頂文章兩個下拉選單
查詢類型切到自訂,側欄才會冒出排序方式與置頂文章兩組選項,一個決定文章先後、一個決定釘選文章怎麼對待。

這四個選項不是為了填滿設定面板而存在,選對排序跟置頂文章的組合,直接關係到你能不能做出比預設列表更進階的效果。舉例來說,想做一個「熱門文章」或「精選案例」清單,用僅顯示搭配你事先在文章列表釘選好的那幾篇,就能只秀出你想主打的內容;反過來,如果只想看一般文章、不想被置頂文章洗版,排除就是對的選擇。

篩選條件把清單縮小到需要的分類、作者

篩選(Filters)是把 Query Loop 從「顯示全部文章」縮小到「只顯示某分類、某作者、某關鍵字」的一組設定,是做分類頁、作者專區這類進階列表最常用到的功能。要注意的是,篩選選項預設是隱藏的,得先按篩選區塊旁邊的「+」按鈕把它叫出來才會出現可選清單。

分類與標籤篩選(Taxonomies)可以指定要顯示哪些分類或標籤,也能反過來指定要排除哪些分類或標籤。作者篩選(Authors)可以指定一位或多位作者,只顯示他們發布的內容。格式篩選(Format)依文章指定的「文章格式」篩選,例如相簿、圖片、影片、語錄,不過這項需要佈景主題支援才看得到效果,並非每個主題都有實作。

關鍵字篩選(Keyword)可以輸入一個或多個關鍵字,這裡有個很多人會誤用的地方,輸入多個關鍵字時,文章必須同時符合每一個關鍵字才會出現在結果裡,不能拿來做「符合其中一個關鍵字就顯示」的效果。想做「符合任一關鍵字」的清單,這個篩選器目前做不到,得換別的邏輯。

在 Query Loop 的篩選條件按下加號後展開的清單,可選作者、關鍵字、分類法、文章格式等篩選條件
篩選選項預設藏著,按篩選條件旁的加號叫出清單,才看得到分類法、作者、文章格式與關鍵字這幾種篩選。

如果貼文類型改成頁面(Page),篩選選項就會換成一組不同的組合:作者、關鍵字、上層頁面(Parents),上層頁面可以用來顯示某個特定頁面底下的所有子頁面。若你的網站另外裝了像 WooCommerce 這類會新增自訂分類法的外掛,篩選清單也可能多出對應的選項,例如產品分類。這些自訂分類法的用法跟一般分類、標籤篩選一致。

每頁顯示、略過與分頁上限三個數字的搭配邏輯

排序跟篩選決定「顯示哪些文章」,顯示選項(Display options)則決定「顯示幾篇、從哪裡開始」。這組設定預設同樣是隱藏的,要打開顯示選項選單(三個點)才會出現,裡面有三個數字,各自控制不同的事,設完發現筆數跟預期不一樣,多半是這三個數字沒搭配好。

每頁顯示筆數(Items per Page)決定這個 Query Loop 一次要顯示幾篇文章。WordPress.com 官方支援文件對這個欄位另外註明了一個平台上限,每頁最多可以設定 100 篇。自架站沒有這個特定數字的限制,但筆數設太高會增加資料庫查詢負擔,實際能設多高要看主機效能拿捏,不是設越大越好。

略過筆數(Offset)讓 Query Loop 從第幾篇文章之後才開始輸出,WordPress.com 官方支援文件的說法是「從第一篇(0)開始,或跳過前面幾篇」。這個設定最適合的情境是避免內容重複,如果首頁已經用另一個區塊秀出最新三篇文章,這裡的 Query Loop 清單就可以把略過筆數設成 3,跳過那三篇已經出現過的內容,只顯示接下來的文章。

分頁上限(Max page to show)限制這個查詢總共最多顯示幾頁內容,如果有使用分頁,這個數字就是總頁數的天花板。預設值是 0,代表沒有頁數上限,清單會一直往後翻到所有符合條件的文章都顯示完為止。

加入分頁區塊時,位置放錯就不會生效

分頁(Pagination)讓訪客能在多頁結果間切換,可以選擇要包含哪些導覽元素,像上一頁、下一頁連結,或是頁碼。這個區塊本身不難用,真正容易出錯的是放置的位置。很多人以為它可以隨便放在頁面任何角落,實際上它必須是 Query Loop 底下、緊接在 Post Template 之後的同層級區塊,放到 Query Loop 外面,或巢狀塞進 Post Template 裡面,都不會運作。

正確的加入方式是:打開清單檢視,展開 Query Loop,選取 Post Template,點旁邊的刪節號(三個點)選擇「Add after」,再用區塊插入器搜尋「Pagination」把它加進去。這樣一來,Pagination 就會排在 Post Template 後面,同時仍然待在 Query Loop 這層容器裡面,才會實際生效。

加進去之後,側邊欄可以調整不少顯示細節:要不要顯示上一頁、下一頁連結,要不要顯示頁碼,方向要水平還是垂直,箭頭要用一般箭頭還是雪佛龍符號,還能調整顏色。最常見的兩個錯誤是分頁區塊被放到 Query Loop 外面導致完全不生效,或者根本忘記加上去,結果清單怎麼滑都看不到後面幾頁的文章,只能看見最前面那一批。

文章卡片內部的樣式和可點擊設定

把清單顯示哪些文章、要不要分頁都設定好之後,接下來要決定的是每篇文章卡片要長什麼樣子,這正是 Post Template 負責的事。它是容器區塊,裡面能放入的常見元素相當多:標題(Title)、日期(Date)、修改日期(Modified Date)、內容全文(Content)、摘要(Excerpt,可自訂「閱讀更多」的文字)、精選圖片(Featured Image)、分類(Categories)、標籤(Tags)、作者(Author,含姓名、大頭貼、簡介),還有查詢總數(Query Total),用來顯示這個查詢總共有幾筆結果。

這些元素顯示出來的文字內容,全部來自各篇文章本身。想改標題文字或摘要內容,得去改那篇文章,不能直接在樣板裡改字,樣板只負責決定「顯示什麼元素、排在哪個位置」,不負責文字本身。

版面切換也在這一層處理,選取 Post Template 區塊,用工具列可以切換清單(List View)或格狀(Grid View),格狀模式下另外能設定要顯示幾欄。要留意 Query Loop 本身沒有顏色、間距這類樣式設定,想調整外觀,得分別選取 Post Template 或裡面的子區塊(像標題、摘要)去各自設定,調整每一層都會套用到清單裡的每一篇文章。

選取文章範本區塊後,工具列出現清單與格狀版面切換按鈕,側欄說明卡片可放入標題、精選圖片、摘要等元素
文章範本決定每張卡片放哪些元素,工具列的清單/格狀鈕再一鍵切換整體版面,設定一次就套用到清單裡每一篇。

用群組與欄位排出圖文並列的卡片

除了標題、摘要這些單一元素堆疊排列,Post Template 裡也能放入群組(Group)、欄(Columns)、列(Row)這類版面用區塊,把裡面的元素排成「圖片在左、標題與摘要在右」這種非堆疊式的卡片,不再受限於預設的上下排列。

Learn WordPress 官方教學示範裡有一個實際操作值得參考,在 Post Template 裡插入精選圖片區塊,放在標題上方,統一設定精選圖片的高度,讓每一張圖片等高排列;接著用方向鍵調整日期區塊的位置,把它挪到想要的地方。這些改動有個共通的重點,巢狀在 Post Template 裡的任何調整,都會套用到清單裡的每一篇文章,不必逐篇重複設定一次。

標題與精選圖片的可點擊開關

有一個很多人第一次用會漏掉的細節,標題與精選圖片預設並不會自動連結回文章。做完整份列表之後,如果沒特別設定,訪客點標題或圖片其實點不進文章,只能點進去看純文字才發現整排列表點不動。

要讓它們可以點擊,需要分別選取標題區塊,開啟「讓標題變成連結」(Make title a link),再選取精選圖片區塊,開啟「連結到文章」(Link to Post)。這兩個設定因為位於 Post Template 內,一次套用就會套用到清單裡的每一篇文章,不用逐篇去點。但前提是這兩個開關要記得手動打開,它們不會因為你加了標題或圖片區塊就自動生效。

排除目前文章,才能在單篇頁做相關文章列表

把 Query Loop 放進單篇文章樣板,做出「相關文章」或「更多文章」區塊,是一個相當實用的進階應用。這時候有一個必須處理的問題,如果不特別設定,這個清單裡可能會出現「這篇文章推薦你看這篇文章」的重複窘境,讀者正在看的這篇也一起被列進來,看起來像是繞了一圈又指回原地。

解決方式是篩選選項裡的「排除目前文章」(Exclude current)。這個選項不是隨時都看得到,它只會在兩個條件都成立時出現:Query Loop 要放在顯示單篇文章或頁面的樣板裡,例如單篇文章樣板,或是你正在編輯個別文章、頁面時;而且區塊的貼文類型要跟樣板顯示的內容類型一致。少了任何一個條件,篩選清單裡就不會出現這個選項。

開啟這個篩選之後,這個 Query Loop 在該樣板上就會自動把目前這篇排除在查詢結果之外,不需要每篇文章各自設定一次。這個功能特別適合搭配前面提到的分類、標籤篩選一起用,先用篩選挑出同分類或同標籤的文章,再加上排除目前文章,就能做出一份既相關、又不會把讀者導回自己正在看的這篇的推薦清單。實際操作時,進入外觀的編輯器,選擇顯示單篇文章或頁面的樣板,打開清單檢視選取 Query Loop 區塊,把查詢類型設為自訂,在篩選區塊裡開啟這個開關即可。如果篩選清單裡沒看到它,就先點篩選旁邊的刪節號把它叫出來,跟前面「篩選選項預設隱藏」的邏輯一樣。

分頁不整頁刷新的進階設定與已知限制

Query Loop 的進階設定(Advanced)裡,還有幾個容易被忽略的選項:HTML 錨點、額外的 CSS 類別、額外 CSS、HTML 元素標籤,以及「強制整頁重新載入」(Reload Full Page)。

這個設定預設是開啟的,訪客在 Query Loop 結果的不同頁面間切換時,會整頁重新載入。WordPress 官方文件的說法是,這通常是可預期導覽與無障礙體驗最安全的選項,對螢幕閱讀器與習慣傳統網頁導覽的使用者來說,整頁重新載入的行為比較不容易造成困惑。

關閉這個設定之後,訪客翻頁時只有 Query Loop 裡的文章清單會更新,不會整頁重新載入,體驗更接近單頁應用程式,滑起來更流暢。這個機制背後是由 WordPress 的 Interactivity API 驅動,是核心較新的一套技術,目前主要只保證對核心區塊生效。這裡有個限制要留意,只要 Query Loop 裡面放了任何外掛提供、還沒支援這套機制的區塊,這個免整頁刷新的功能就會被停用,自動退回整頁重新載入的預設行為。

這個功能目前還有一個已知限制,關閉整頁重新載入之後,分頁頁碼在少數情況下可能顯示不正確。這類前端細節會隨版本更新調整,套用之前建議自己實測一次前後頁翻動、頁碼顯示是否正常,再決定要不要在正式站啟用;如果測試起來有異狀,就先維持預設開啟的整頁重新載入,體驗不會因此變差,只是少了那份流暢感。

把這幾層設定拆開來看,Query Loop 其實就是把「哪些文章出現」、「排成什麼順序」、「每篇卡片長什麼樣」這三件事,從精選文章區塊的一鍵決定,交還給你自己一項一項調整。第一次設定會花比精選文章區塊多一點時間,但設定好之後,新文章自動跟著更新,不必每次手動維護,長期下來反而更省力。從最基本的自訂查詢切起,搭配篩選跟排序做出符合需求的清單,再回頭調整卡片版面,是把這個區塊用到位最順的路徑。

常見問答

本區問答由 AI 依文章內容自動整理,僅供快速參考,正式內容仍以全文為準。

Query Loop 跟精選文章區塊有什麼不同?

精選文章區塊只能選顯示最新幾篇;Query Loop 能再指定排序方式、置頂文章的處理方式、篩選分類或作者,還能自訂每張卡片顯示的元素與能不能點擊,彈性大上許多。

沒裝外掛可以用 Query Loop 做文章列表嗎?

可以,Query Loop 從 WordPress 5.8 起就內建在核心裡,任何支援區塊編輯器的網站都能直接插入使用,不必額外安裝外掛,設定好之後新文章還會自動跟著更新排進清單。

為什麼 Query Loop 看不到篩選選項?

因為查詢類型還停留在預設的 Default,會跟著目前樣板決定顯示內容;要先選取 Query Loop 區塊本身,把查詢類型切換成自訂,貼文類型、排序、篩選這些設定才會出現。

Query Loop 的分頁區塊要放哪裡才生效?

分頁必須放在 Query Loop 底下、緊接在 Post Template 之後的同層級位置,用清單檢視選取 Post Template 再選「Add after」加入;放到外面或塞進 Post Template 裡面都不會運作。

相關文章怎麼排除讀者正在看的這篇?

開啟篩選選項裡的「排除目前文章」,這個選項只在 Query Loop 放進單篇文章樣板、且貼文類型與樣板內容一致時才會出現,開啟後該篇會自動被排除在結果外,不必逐篇手動設定。

資料來源
  1. Query Loop block — WordPress
  2. Query Loop block: Content settings — WordPress.com
  3. Query Loop block: Appearance settings — WordPress.com
  4. Core Editor Improvement: Simplified Query Loop Block with Smarter Defaults & Intuitive Settings — Make WordPress Core
  5. Taking advantage of Query Loops — Learn WordPress