問題描述

我想顯示分頁的歸檔頁面,其中列出了我網站上的所有類別,每個連結都轉到該特定的類別歸檔頁面。所以這就像類別檔案的歸檔頁面。

我的網站上的每個類別都有一個手動建立的自定義縮圖,以匹配該類別的永久連結。我已經有一個佈局設定顯示所有的類別,但我正在做一個自定義的頁面模板,所以沒有分頁。這意味著所有類別都顯示在單個頁面上,這是一個煩人的 (我有 100 多個類別) 。

我的當前存檔是使用特定的自定義頁面模板名稱 page-catlist.php 設定的,但我願意將其更改為任何其他型別的模板檔案。

以下是我用於在一個頁面上輸出所有類別的當前程式碼:

$args = array(
  'orderby' => 'name',
  'order' => 'ASC'
);
$cats      = get_categories( $args );
$thm_pre   = 'http://example.com/images/thumbs/';
$thm_end   = '.png';

foreach($cats as $cat) {
    $thumbnail = $thm_pre.$cat->slug.$thm_end;
    // output the loop HTML here
    // basically a list of category names & thumbs
    // all linked to the cat URL by get_category_link()
}

我希望有一個更好的方式來做到這一點,所以我可以新增自然分頁,理想情況下與 WP-PageNavi 。任何幫助將不勝感激!

最佳解決方案

分類術語/類別/標籤列表是非常容易的,為了實現這一點,您需要最少的資訊。

讓我們看看我們的需要

  • 數量

  • 每頁的數量

  • get_terms()(請注意,版本 4.5 中 get_terms()的用法已更改) 。您也可以使用 get_categories(),如果你願意,get_categories()只是 get_terms()的包裝功能

所以首先我們需要計算一些術語數量。為此,我們將在 get_terms()中使用 count 引數

注意:

  • 所有程式碼未經測試,至少需要

    • PHP 5.4

    • WordPress 4.5

您可以輕鬆地將其轉換為使用舊版本的 PHP 和 WordPress

$taxonomy   = 'category';
$term_count = get_terms(
    [
        'taxonomy'  => $taxonomy,
        'fields'    => 'count'
    ]
);

現在我們知道這些數量,我們可以設定每頁需要的數量,讓我們說 10

$terms_per_page = 10;

從上面我們現在可以找出我們將有多少頁面。這裡的值將傳遞給需要的分頁功能,在您的情況下,wp_pagenavi()

$max_num_pages = ceil( $term_count/$terms_per_page );

在這種情況下,您將透過 $max_num_pages 到您的分頁功能

下一部分將是計算我們的偏移量。我們只想檢索每頁的相關數量的數量以保持最佳化。我們不需要每頁 100 多個字。僅查詢所需的 10 快得多。所以,我們需要知道我們在哪個頁面,從那裡我們將計算一個偏移量。這將被傳遞給 get_terms(),並會告訴 get_terms()從起始起點跳過多少條目。

一旦有了,我們也必須告訴 get_terms()只返回 10 個術語。讓我們來看看這段程式碼

$current_page = get_query_var( 'paged', 1 ); // Change to 'page' for static front page
$offset       = ( $terms_per_page * $current_page ) - $terms_per_page;
$terms        = get_terms(
    [
        'taxonomy' => $taxonomy,
        'order'    => 'ASC',
        'orderby'  => 'name',
        'number'   => $terms_per_page,
        'offset'   => $offset
    ]
);

根據分頁,每頁只能有 10 個術語。您現在可以透過您的條款正常迴圈

只需一個註釋,您就可以確保您實際上具有從 get_terms()功能返回的術語。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。