顯示自定義帖子類型 - 模板和查詢
已發表: 2016-09-26這是我們關於自定義帖子類型 (CPT) 的系列文章的第 3 篇也是最後一篇文章。 我們在前兩個中討論的主題是:
- 自定義帖子類型(如何創建它們)
- 自定義分類法
在第一篇和第二篇文章中,我們註冊了testimonials自定義帖子類型和testimonial_service自定義分類。 我們現在必須在我們的網站上顯示推薦。 因此,我們將看看如何為我們的推薦創建模板,如何查詢它們,以及如何在我們網站的任何位置顯示它們。
默認自定義帖子類型模板
我們創建了我們的 CPT,參數has_archive
設置為 true,它將在存檔頁面中顯示所有推薦。
WordPress 使用模板層次結構來顯示不同類型的內容。 對於自定義帖子類型,它將查找:
存檔-{post_type}.php
單{post_type}.php
如果主題中沒有定義這些模板,那麼它將尋找通用模板:
存檔.php
單.php
如果連這些模板都沒有定義,那麼它將默認為index.php模板。
在我們的例子中,Shaka 主題有single.php ,但沒有archive.php模板。 這意味著默認情況下,它將使用single.php模板作為單個推薦頁面。 它還將使用index.php模板在推薦檔案頁面中顯示所有推薦。
推薦將顯示在推薦存檔頁面中,該頁面將位於此頁面上:
http://your-domain-goes-here.com/ ?post_type=testimonials
如果您啟用了漂亮的永久鏈接,那麼您還可以使用以下 URL 訪問該頁面:
http://your-domain-goes-here.com/推薦
(注意:如果漂亮的永久鏈接不適合您,請轉到 wp-admin -> Settings -> Permalinks 並按照您想要的方式進行設置並保存設置)
首先,我們應該在新註冊的 CPT Testimonials中寫一些推薦,所以我們有一些數據要顯示。 我添加了 3 個推薦,這是推薦存檔頁面的默認佈局在我們的 Shaka 主題上的外觀:
如您所見,佈局還可以,但不需要顯示的某些數據,例如“作者”和日期。 也不顯示 testimonial_service 自定義分類,因此我們將在自定義模板中添加它。
為我們的 CPT 創建自定義模板
如上一節所述,我們必須創建兩個模板。 archive-testimonials.php和single-testimonials.php 。 我們將只為本示例創建archive-testimonials.php模板。
我們應該在子主題中創建這些文件,但為了簡單起見,我將直接在 Shaka 主題中添加archive-testimonials.php文件。 我將復制 index.php 文件作為起點,並將其重命名為archive-testimonials.php 。
我刪除了“作者”、日期代碼和側邊欄。 我添加了特色圖片和推薦服務自定義分類。 我使用了the_terms
WP 函數,它顯示了特定 WP 術語的列表,在我們的例子中是自定義分類法。

我知道從美學角度來看,它看起來並不出色,但這不是重點。 我們想用不同的數據創建推薦檔案頁面的不同結構/佈局,這在幾分鐘內就實現了。
我們也可以對單個推薦頁面執行相同的操作。 我們將復制single.php文件並將其重命名為single-testimonials.php並從那裡更改代碼。
我沒有在這裡展示任何代碼,因為每個主題的代碼示例會有所不同,並且需要一些 HTML 和 PHP 的基本知識來編寫模板。 但是修改現有模板總是更容易,這就是我們使用 index.php 作為起點的原因。
查詢自定義帖子類型
在您的網站上顯示自定義帖子類型的另一種方法是使用 WP_Query 類來獲取自定義帖子類型(循環並顯示它們)。
假設您要構建一個在輪播中顯示所有推薦的小部件。 或者,您希望在單個推薦頁面上顯示相關推薦(相同的推薦服務分類)。 您將使用WP_Query
類來檢索相關推薦。
在我們的示例中,我們將獲取“潛水”推薦服務自定義分類中的所有推薦,並將它們輸出到一個列表中:
<?php $args = array( 'post_type' => 'testimonials', 'post_status' => 'publish', 'tax_query' => array( array( 'taxonomy' => 'testimonial_service', 'field' => 'slug', 'terms' => 'diving' ) ) ); $testimonials = new WP_Query( $args ); if( $testimonials->have_posts() ) : ?> <ul> <?php while( $testimonials->have_posts() ) : $testimonials->the_post(); ?> <li><?php printf( '%1$s - %2$s', get_the_title(), get_the_content() ); ?></li> <?php endwhile; wp_reset_postdata(); ?> </ul> <?php else : esc_html_e( 'No testimonials in the diving taxonomy!', 'text-domain' ); endif; ?>
正如您在上面的代碼中看到的,我們首先準備參數設置數組,稍後在WP_Query
初始化中使用。 在這個數組中,我們定義檢索:
- `推薦` CPT,
- 僅獲取已發布的推薦,
- 僅獲取潛水自定義分類法“testimonial_service”中的推薦信。
當調用new WP_Query
時,會檢索相關的推薦,我們可以遍歷它們。 在循環中,我們只是在一個簡單的列表中輸出標題(我用它作為作者姓名)和推薦的內容。 此外,當我們使用 WP_Query 循環時,我們應該始終使用wp_reset_postdata
函數來重置回原始循環。 這將確保在我們完成自定義查詢後一切正常。
這些是自定義帖子類型的基礎知識,我希望您現在了解它們的工作原理。 與任何主題一樣,總會有更多細節需要探討。 我建議您閱讀我們在這些示例中使用的所有函數和類的官方 WP 文檔。 如果您有任何問題,請在下面的評論部分告訴我。