在 WordPress 網站開發中,有時候我們希望在某個自定義文章類型(Custom Post Type,簡稱 CPT)頁面中,顯示與其相關的一般文章(Post)。例如,假設我們有一個名為 member_info 的 CPT,而我們希望在這些頁面中,顯示內文包含該 member_info 標題的相關文章,該如何實現呢?
本篇文章將示範如何使用 WP_Query 查詢與目前 member_info 文章相關的一般文章,並將結果顯示在頁面上。
1. 程式碼實現
我們可以透過 WP_Query 來搜尋標題與一般文章內容匹配的內容,然後將結果顯示出來。以下是完整的 PHP 程式碼,請將其加入 single-member_info.php 或對應的模板檔案中:
<?php
if (is_singular('member_info')) {
    $current_title = get_the_title(); // 取得當前 member_info 文章的標題
    // 查詢與當前 member_info 相關的 post 文章
    $args = array(
        'post_type'      => 'post', // 只搜尋一般文章
        'posts_per_page' => 5, // 限制顯示數量
        's'             => $current_title, // 內文搜尋關鍵字
    );
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        echo '<h3>相關文章</h3>';
        echo '<ul style="margin-left: 0; list-style: none;">';
        while ($query->have_posts()) {
            $query->the_post();
            echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
        }
        echo '</ul>';
    } else {
        echo '<h3>相關文章</h3>';
        echo '<p>沒有找到相關文章</p>';
    }
    wp_reset_postdata();
}
?>
2. 程式碼解析
(1) 檢查當前文章類型是否為 member_info
if (is_singular('member_info')) {
這行程式碼確保我們只在 member_info 這個自定義文章類型的單篇文章頁面執行程式。
(2) 取得當前 member_info 文章的標題
$current_title = get_the_title();
我們使用 get_the_title() 來取得當前 member_info 文章的標題,這將作為搜尋關鍵字。
(3) 設定 WP_Query 查詢參數
$args = array(
    'post_type'      => 'post', // 只搜尋一般文章
    'posts_per_page' => 5, // 限制顯示數量
    's'             => $current_title, // 內文搜尋關鍵字
);
- 
'post_type' => 'post'限制查詢結果為 WordPress 的一般文章。 - 
'posts_per_page' => 5設定最多顯示 5 篇相關文章。 - 
's' => $current_title透過s參數搜尋內文包含member_info文章標題的內容。 
(4) 迴圈輸出結果
if ($query->have_posts()) {
    echo '<h3>相關文章</h3>';
    echo '<ul style="margin-left: 0; list-style: none;">';
    while ($query->have_posts()) {
        $query->the_post();
        echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    echo '</ul>';
} else {
    echo '<h3>相關文章</h3>';
    echo '<p>沒有找到相關文章</p>';
}
這段程式碼會檢查是否有符合條件的文章,然後透過 while 迴圈輸出結果。
(5) 重置查詢
wp_reset_postdata();
這行程式碼確保 WP_Query 查詢結束後,WordPress 會恢復到原始的 post 查詢,避免影響後續的內容顯示。
3. 小結
這篇文章教學了如何在 member_info 文章類型的單篇頁面中,動態搜尋並顯示內文包含 member_info 標題的相關一般文章。
這種方法適用於許多情境,例如:
- 
在產品詳細頁面顯示與該產品名稱相關的部落格文章
 - 
在課程頁面顯示與課程名稱相關的學習資源