本章延續佈景主題實例,加入 WP_Query、分類頁、單篇文章頁、自訂頁面模板與分頁等功能。這些能力會讓主題從「可以顯示文章」進一步變成「可以依需求組織內容」。

本章學習目標

能使用 WP_Query 建立自訂文章列表,製作常見模板,並處理分頁、查無資料與重置查詢。

9.1 WP_Query 類別探討

WP_Query 是 WordPress 查詢文章的核心類別。主查詢由 WordPress 根據網址自動建立,自訂查詢則可用於首頁精選文章、課程列表或側欄推薦文章。

建立自訂查詢

$course_query = new WP_Query([
    'post_type' => 'post',
    'posts_per_page' => 6,
    'category_name' => 'wordpress',
]);

if ($course_query->have_posts()) {
    while ($course_query->have_posts()) {
        $course_query->the_post();
        the_title('<h2>', '</h2>');
    }
    wp_reset_postdata();
}

使用自訂查詢後一定要呼叫 wp_reset_postdata(),避免影響後續模板標籤。

常用查詢參數

  • post_type:文章類型。
  • posts_per_page:每頁筆數。
  • category_namecat:分類條件。
  • orderbyorder:排序方式。
  • meta_query:依自訂欄位查詢。

9.2 其他頁面模板的設計

WordPress 會依照 Template Hierarchy 自動選擇模板,例如分類頁優先找 category.php,單篇文章找 single.php,頁面找 page.php

建立頁面模板

<?php
/*
Template Name: 課程首頁
*/
get_header();
?>
<main>自訂課程首頁內容</main>
<?php get_footer(); ?>

有了自訂頁面模板後,可在後台頁面編輯畫面選擇該模板。

9.3 其他進階主題

分頁與查無資料

完整主題不能只處理有資料的情況,也要處理查無文章與分頁。

the_posts_pagination([
    'mid_size' => 2,
    'prev_text' => '上一頁',
    'next_text' => '下一頁',
]);

本章練習

  1. WP_Query 建立一個精選文章區塊。
  2. 建立 single.phppage.php
  3. 為文章列表加入分頁與查無資料訊息。