问题描述

我的目标是分页 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。