如何在 WordPress 中顯示與自定義文章類型相關的文章

在 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 標題的相關一般文章。

這種方法適用於許多情境,例如:

  • 在產品詳細頁面顯示與該產品名稱相關的部落格文章

  • 在課程頁面顯示與課程名稱相關的學習資源

 

發佈留言