不論是自己透過官方說明方式建立一個新的文章類型(Post Type)還是透過外掛 Custom Post Type UI 這類型圖形化模式設定新的文章類型都好。

重點都來自你有新型態的內容要操作!

這時候就要來看一張圖。

CPT 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

Facebook 外掛功能


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *