本篇文章更新時間:2019/02/16
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
不論是自己透過官方說明方式建立一個新的文章類型(Post Type)還是透過外掛 Custom Post Type UI 這類型圖形化模式設定新的文章類型都好。
重點都來自你有新型態的內容要操作!
這時候就要來看一張圖。
這是使用CPT UI 製作的自訂文章類型,表中最右邊的「Template Hierarchy(樣板架構)」是提供給前端建立的參考,包含集合頁、單一內文頁的設計沒問題,但~ 似乎沒看到「分類頁」對吧?
等於說參考這樣架構下去製作的前端會只有單純針對該自訂類型產生單純集合內容頁與下一層的單篇內容頁兩種。其實一般來說也算是夠用了,不過如果場景回歸到那張圖上的設定,是一個「產品」類型內容,此時怎能沒有「產品分類」呢?(當然如果你也正在有這疑問,我會推薦你使用 WooCommerce XD)
建立分類頁的樣板檔案
根據上圖的設定分類根據(Taxonomies),在主題目錄下建立檔案「taxonomy-product_categories.php」後,完成!
設定樣板檔案
一般來說可能會找到比較多的文章教學都是直接使用 $query = new WP_Query( $args );
的方式來操作抽取自訂類型的內容,這邊我其實沒這麼建議。原因很簡單,就是這樣很醜,不算在樣板檔案中融入 WordPress「The loop」架構!
這時候的樣板架構會把該自訂類型中分類的資料導引到這檔案來,所以剩下來的就只剩抓到當前是哪個 terms
請求,並把對應該 terms
的內容集合給撈出來,交給預設的 The loop
去顯示,前端也還是可以單純開發,不會碰到一堆變數昏頭。
global $wp_query;
$terms = $wp_query->tax_query->queries[0]['terms'][0];
$args = array(
'posts_per_page' => -1,
'post_type' => 'products',
'tax_query' => array(
array(
'taxonomy' => 'product_categories',
'field' => 'slug',
'terms' => $terms,
),
),
);
query_posts($args);
關鍵程式碼如上,對應請求的 terms
抓到後,帶入 query_posts
這個方法,就可以讓預設的迴圈系統撈到對應資料,雖不用再補上 wp_reset_postdata()
方法,一切就跟開發基本的樣板一樣!(但要記得在檔案結束前補上 wp_reset_query();
方法哦!參考資料)
註: 如果使用 new WP_Query
產生的物件來處理上面的請求,會需要在請求完後檔案尾巴中呼叫 wp_reset_postdata
方法,回復在全域變數中 $post
對該類型的操作。參考:官方文件
註2: query_posts();
的使用是很直接針對主請求做操作,如果不清楚自己想做什麼,就盡量不要使用該方法操作,以免發生各種神奇事情又找不到原因。關於這個使用也不少人討論過。參考資料
與本篇相關的文獻參考:Customizing WordPress Archives For Categories, Tags And Other Taxonomies
發表在 Facebook 討論區的討論串:Link