為什麼顯示擁有特定自訂欄位的 WordPress 文章?
當你在 WordPress 網站上創建文章時,你可以使用自訂欄位在文章中添加額外的元數據。元數據是關於文章的資訊,如標題、作者和發布日期等。
自訂欄位是 WordPress 的進階概念,有多種方法可以在 WordPress 中添加自訂欄位,包括使用 Advanced Custom Fields (ACF) 插件。我們的 WordPress 自訂欄位 101 文章提供了許多如何使用和顯示自訂欄位的有用提示。
其中一名用戶問我們如何僅顯示具有特定自訂欄位的 WordPress 文章。如果你想創建一個自訂頁面,列出擁有特定自訂欄位和/或值的所有文章,這個方法會非常有用。回答完這個問題後,我們決定將答案分享給更多的 WordPress.org 社區成員。
編輯你的 WordPress 主題文件:需要注意的事項
要正確地跟隨這篇教程,有些事項需要注意:
這篇教程涉及到編輯 WordPress 主題文件的代碼,所以並不適合完全的初學者。如果你是新手,請閱讀我們的指南,了解如何在 WordPress 中複製和貼上代碼。
我們建議在操作前備份你的網站和/或使用測試環境,這樣在出錯時不會影響到線上網站。這是因為你將要向主題文件添加代碼,這存在風險。
我們建議了解 WordPress 模板階層的工作原理,這樣你才知道應該將代碼添加到哪裡。你還需要了解 WordPress 循環的工作原理,因為我們會在 WordPress 查詢中調用這些參數。
另外,請注意這篇教程僅適用於經典的 WordPress 主題,因為塊主題有一套不同的主題文件。
顯示擁有特定自訂欄位的 WordPress 文章
在展示代碼之前,首先你需要知道應該將它添加到那個主題文件中。大多數情況下,這將是頁面模板,例如 index.php、archive.php 或 page.php。
假設你想將其添加到二零二一年主題的 index.php 文件中。以下是該文件中 WordPress 迴圈部分現在的樣子:
<?php
if ( have_posts() ) {
// 加載文章迴圈。
while ( have_posts() ) {
the_post();
get_template_part( 'template-parts/content/content', get_theme_mod( 'display_excerpt_or_full_post', 'excerpt' ) );
}
// 上一頁/下一頁導航。
twenty_twenty_one_the_posts_navigation();
} else {
// 如果沒有內容,包含“沒有找到文章”模板。
get_template_part( 'template-parts/content/content-none' );
}
get_footer();
這段代碼使用了默認的 WordPress 迴圈 (have_posts() 和 the_post()) 來顯示文章。此方法適用於大多數標準的 WordPress 主題,通常用於顯示沒有任何自訂篩選或排序的文章。
接下來,假設我們使用自訂欄位 “color”,你需要將整段代碼替換為以下代碼片段:
<?php
// 用於顯示特定自訂欄位的查詢
$the_query = new WP_Query('meta_key=color');
// 加載文章迴圈。
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
get_template_part( 'template-parts/content/content', get_theme_mod( 'display_excerpt_or_full_post', 'excerpt' ) );
}
// 上一頁/下一頁導航。
twenty_twenty_one_the_posts_navigation();
} else {
// 如果沒有內容,包含“沒有找到文章”模板。
get_template_part( 'template-parts/content/content-none' );
}
// 重置文章數據
wp_reset_postdata();
get_footer();
在這段新代碼中,我們引入了一個自訂查詢 ($the_query = new WP_Query(‘meta_key=color’);) 來根據特定自訂欄位的值 (在本例中為擁有自訂欄位 ‘color’ 的文章) 獲取文章。
然後,它使用自訂迴圈 (if ($the_query->have_posts())) 來迭代由這個查詢獲取的文章,依照前一段代碼的方式顯示每篇文章的內容。
我們還添加了 wp_reset_postdata() 函數,以確保在完成自訂查詢後,WordPress 能夠正確顯示所有文章。這確保了網站的運行平穩,並且向用戶顯示正確的內容。
現在,如果你想顯示具有某個特定值的自訂欄位文章,只需更改第 3 行的查詢如下:
$the_query = new WP_Query('meta_value=blue');
這將顯示所有自訂欄位中擁有 ‘blue’ 值的文章。
如果你想確保 ‘color’ 欄位具有 ‘blue’ 值,那麼查詢代碼將如下所示:
$the_query = new WP_Query( array( 'meta_key' => 'color', 'meta_value' => 'blue' ) );
你可以在 WordPress WP_Query 代碼參考頁面學習更多可以在查詢中使用的參數。
一旦你將代碼保存到頁面模板 PHP 文件中,可以在前端檢查你的 WordPress 網站來查看代碼的效果。
我們希望這篇教程能幫助你學習如何僅顯示擁有特定自訂欄位的 WordPress 文章。你可能還想看看我們完整的 WordPress SEO 指南,或查看我們推薦的提升網站的最佳 WordPress 插件列表。
如果你喜歡這篇文章,請訂閱我們的 YouTube 頻道,獲取 WordPress 視頻教程。你也可以在 Twitter 和 Facebook 上找到我們。