Wordpress独立评论页面 - 分页

时间:2012-09-03 02:26:27

标签: php pagination comments wordpress

我想构建一个显示所有评论的页面,无论他们附加哪个帖子。我还希望将该页面分页,因为它可能有10,000多条评论。


我不知道该怎么做,但这里有一些我到目前为止研究过的功能:

  1. get_comments - 如果未传入post_id,则会返回所有评论。但是,我没有看到对这些进行分页的方法(有offsetnumber选项可以摆弄,但是非常手动操作非常繁琐。“

  2. wp_list_comments - 关于此问题的文档非常糟糕,但the source code建议我们可以通过传入{get_comments来与get_comments结合使用,从而循环遍历所有注释{1}}数组作为第二个参数。然而,这仍然会使用get_comments来实际......好吧,得到评论,似乎没有办法对其进行分页。

  3. previous_comments_link& next_comments_link - 这些似乎只与wp_list_comments一起使用(没有第二个参数)。

  4. paginate_comments_links - 看起来它只适用于wp_list_comments(没有第二个参数)。


  5. 我尝试了什么:

    1. 只需使用number中的get_comments参数:

      $comments = get_comments(array(
          'status'    => 'approve',
          'number'    => '2'
      ));
      
      wp_list_comments(array(
          'callback' => 'my_rendering_function'
      ), $comments);
      
      paginate_comments_links();
      

      这不会显示任何分页链接。

    2. 此处建议的方法:Display latest comments on page with pagination

      $comments = get_comments(array(
          'status' => 'approve'
      ));
      
      wp_list_comments('per_page=2', $comments);
      
      paginate_comments_links();
      

      这不起作用(它显示前两个评论,但没有分页)。另外,我畏缩get_comments所有条评论加载到内存中。


    3. 问题:

      如何分页所有评论?


      P.S。我正在使用WordPress 3.4.1& PHP 5.3.2。

2 个答案:

答案 0 :(得分:4)

如果您计划构建自己的分页,则需要知道将要使用的评论总数,因此您必须加载所有评论。

我已经建立了以下我会使用的内容,让我知道它是否有帮助。

#Config here.
define('DEFAULT_COMMENTS_PER_PAGE',100);

$page = (int) (!isset($_REQUEST["page"]) ? 1 : $_REQUEST["page"]);
$limit = DEFAULT_COMMENTS_PER_PAGE;
$offset = ($page * $limit) - $limit;
$param = array(
    'status'=>'approve',
    'offset'=>$offset,
    'number'=>$limit,
);
$total_comments = get_comments(array('status'=>'approve'));
$pages = ceil(count($total_comments)/DEFAULT_COMMENTS_PER_PAGE);
$comments = get_comments($args);
foreach($comments as $comment) {
    // ECHO THE AUTHOR AND COMMENT
    echo("<strong>{$comment->comment_author}</strong> - {$comment->comment_content}");
}
$args = array(
'base'         => '%_%',
'format'       => '?page=%#%',
'total'        => $pages,
'current'      => $page,
'show_all'     => False,
'end_size'     => 1,
'mid_size'     => 2,
'prev_next'    => True,
'prev_text'    => __('&laquo; Previous'),
'next_text'    => __('Next &raquo;'),
'type'         => 'plain');
// ECHO THE PAGENATION 
echo paginate_links( $args );

答案 1 :(得分:0)

我们应该使用get_comments()来获取性能,以获得总评论。必须使用参数offset作为false,并计为true,如下所示:

$comments_per_page = 2;
$page = 2;

//MYSQL: LIMIT offset, number
$params = array(
    'post_id' => $post_id,
    'offset' => (--$page) * $comments_per_page,
    'number' => $comments_per_page,
);

$comments = get_comments( $params );
$total_comments = get_comments(
    array_merge($params, 
            array(
                'count' => true,
                'offset' => 0,
                'number' => 0
            )
    )
);


$args = array(
    'total'     => ceil( $total_comments / $comments_per_page ),
    'current'   => max( 1, $page ),
);

$pagination = paginate_links( $args );

添加您需要的任何参数。您可以使用wp_list_comments()作为weel,但如果您想自定义输出HTML,请使用foreach for $ comments:

foreach ( $comments as $comment ) :

    echo $comment->comment_date;
    echo '<br>';
    echo $comment->comment_author;
    echo '<br>';
    echo $comment->comment_content;

endforeach;