問題描述

我的目標是分頁 WP_Comment_Query()。看來這是禁忌,還是沒有關於它的可行信息 online,沒有什麼。

為什麼?可能嗎?如果是這樣,怎麼樣?

最佳解決方法

是的,這是可能的,但這是一個痛苦。

看看 codex page,只有註釋的參數是 numberoffset

我們需要這兩個來創建我們的分頁。

首先,我們設置 $paged 參數,它是當前頁面:

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

然後顯示數量的註釋:

$number = 3;

之後,計算偏移量 (查詢開始拉取註釋的位置):

$offset = ( $paged - 1 ) * $number;

我們把它們全部放在 arguments 變量中:

// arguments to filter comments
$args = array(
    'number' => $number,
    'offset' => $offset,
    'paged' => $paged
);

現在讓我們點擊查詢並循環遍歷:

// the query
$the_query = new WP_Comment_Query;
$comments = $the_query->query( $args );

// Comment Loop
if ( $comments ) {

    foreach ( $comments as $comment ) {
        echo '<p>' . $comment->comment_content . '</p><br><br>';
    }

} else {

    echo 'No comments found.';

}

優秀。現在我們可以測試將/page/2 添加到 URL 欄中,檢查它是否可行。

唯一缺少的是添加分頁鏈接,例如 next_posts_link()功能。

問題是我還沒有找到一種獲得 max_num_pages 的方法。以下將通常在一個簡單的 WP_Query 中工作:

$the_query->max_num_pages

但這不行。不知道最大頁面數量,我們無法正確地創建分頁鏈接。請注意,count($comments)將只給我們每頁的評論總數 ($number) 。

就個人而言,我通過根據我定位的查詢計算最大頁面來修復這個問題。我想獲得用户 ID 的評論總量。所以我用這樣的數字:

$maximum_pages = $user_total_comments / $number;

這在我的情況下工作,但我們絕對需要一種方法來獲得 max_num_pages 。希望通過這個答案,它將激發某人解決最後一點。至少我們有更多關於 wp_comment_query()分頁的信息,比其他任何地方。

Update

所以剩下的問題是缺乏 max_num_pages 。一個解決方法是 count()返回的數組,並檢查它是否與 $number(您在 number 數組鍵中設置的內容) 匹配,如下所示:

$tot_returned_comments = count($comments);

if ($number == $tot_returned_comments) {
    echo '<a href="/comments/page/'%20.%20$nextpage%20.%20'">Next</a>';
}

除了最後一頁與您在 $number 變量中設置的帖子數量完全相同,所有這些都適用。因此,如果將 $number 設置為 15,並且最終分頁的頁面有 15 個結果,則會顯示下一個按鈕。

現在,如果你不關心性能,你可以很容易地運行兩個查詢。一個你不限制結果,只是 count()的結果,並將其用於 max_num_pages 值。

雖然這並不能解決 max_num_pages 的缺陷,但是對於 wp_comments_query()來説,應該足夠讓您滿足您的需求。

次佳解決方法

處理此問題的另一種方法是使用 get_comments()(或任何類似的查詢) 來使用 paginate_links() 。具體要獲得相當於 max_num_pages 的功能,您可以使用內置功能 wp_count_comments() 。

因此,要獲得最大頁數,您首先會生成所需的所有評論。假設你不想要未經批准的評論:

$all_comments = wp_count_comments();
$all_comments_approved = $all_comments->approved;

將 $ all_comments_approved 除以每頁的評論數量,這是一件很簡單的事情。所以,每頁都有一個所需的”n” 評論:

//Adding one at the end as simple way of rounding up.

$max_num_pages = intval( $all_comments_approved / $comments_per_page ) + 1;

($ comments_per_page 的值應為 pre-set 為> 0,並且也用於主註釋查詢 – 見下文) 。

根據其他細節,完整的分頁功能將如下所示。 (例如:有時候’base’ 選項會因 URL 中存在查詢變量而變得更加棘手,我必須使用 preg_replace 來解決這個問題。)

$current_page = max(1, get_query_var('paged'));

echo paginate_links(array(
        //check codex for how to work with get_pagenum_link and variations
        'base' => get_pagenum_link(1) . '%_%',
        'current' => $current_page,
        'total' => $max_num_pages,
        'prev_text' => __('&laquo; Previous'),
        'next_text' => __('Next &raquo;'),
        'end_size' => 2,
        'mid-size' => 3
));

… 其餘的是格式化輸出… 和主要註釋查詢。後者將如下所示:注意,$ comments_per_page 對於檢索的註釋數量和計算偏移量至關重要。還要注意,檢索到的對象的總大小受到數量 (以及’status’) 的限制。

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$offset = ($paged - 1) * $comments_per_page;


$comments = get_comments(array(
'status' => 'approve',
'number' => $comments_per_page,
'offset' => $offset
));

參考文獻

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