WP_COMMENT_QUERY分页,深入未知

时间:2015-04-16 作者:Christine Cooper

我的目标是分页WP_Comment_Query(). 看来这要么是禁忌,要么是没有可行的信息online, 什么都没有。

为什么?有可能吗?如果是这样,how?

2 个回复
最合适的回答,由SO网友:Christine Cooper 整理而成

是的,这是可能的,但有点痛。

查看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\\U查询中,通常可以执行以下操作:

$the_query->max_num_pages
但它在这里不起作用。如果不知道页面的最大数量,我们就无法正确创建分页链接。请注意count($comments) 只会给我们每页的评论总数($number).

就我个人而言,我通过计算所针对的自定义查询的最大页面数来解决这个问题。我想按用户ID获取评论总数。因此,我使用了如下数字:

$maximum_pages = $user_total_comments / $number;
这对我来说很有效,但我们确实需要一种方法max_num_pages. 希望有了这个答案will inspire someone to solve the final bit. 至少我们有更多关于分页的信息wp_comment_query() 这里比其他任何地方都好。

更新,剩下的问题是缺少max_num_pages. 解决这个问题的一个方法是count() 返回的post数组,并检查它是否与$number (您在number 数组键),请参见以下内容:

$tot_returned_comments = count($comments);

if ($number == $tot_returned_comments) {
    echo \'<a href="/comments/page/\' . $nextpage . \'">Next</a>\';
}
这在所有情况下都有效,除非最后一页的帖子数量与您在$number 变量所以,如果你$number 到15,则最终分页页面有15个结果,然后它将显示“下一步”按钮。

现在,如果您不关心性能,您可以轻松地运行两个查询。一个不限制结果的count() 结果并使用该计数max_num_pages 价值

但这并不能解决max_num_pages, 它应该足以让您对wp_comments_query().

SO网友:CK MacLeod

处理此问题的另一种方法是使用paginate\\u links()和get\\u comments()(或任何类似的查询)。具体来说,为了获得与max\\u num\\u页面等效的页面,可以使用内置函数wp\\u count\\u comments()。

因此,要获得最大的页数,首先要对所有需要的注释进行计数。假设您不想要未经批准的评论:

$all_comments = wp_count_comments();
$all_comments_approved = $all_comments->approved;
将$all\\u comments\\u 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\\u的值应预先设置为>0,并且也用于主评论查询-请参见下文)。

根据其他细节,完整分页函数的外观如下所示。(例如:“base”选项有时会因为URL中存在查询变量而变得更加棘手。我不得不在一个应用程序中使用preg\\u 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\\u都是至关重要的。还请注意,检索到的对象的总大小受到数量(以及“状态”)的限制。

$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
));

结束

相关推荐

Query post Pagination Problem

我正在使用以下代码进行查询帖子,但我没有得到分页链接。以下代码的问题在哪里。<div id=\"primary\" class=\"content-area\"> <main id=\"main\" class=\"site-main\" role=\"main\"> <?php $arr = array( \'post_type\' => \'post