【问题标题】:Wordpress standalone comments page - with paginationWordpress 独立评论页面 - 带分页
【发布时间】:2012-08-27 19:20:37
【问题描述】:

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


我不知道该怎么做,但这里有一些我目前研究过的函数:

  1. get_comments - 如果没有传入 post_id,它将返回所有 cmets。但是,我看不到对这些页面进行分页的方法(有 offsetnumber 选项可供选择,但手动操作非常非常乏味)。

  2. wp_list_comments - 关于这方面的文档非常糟糕,但the source code 建议如果与get_comments 一起使用,我们可以循环遍历所有 cmets,方法是将get_comments 数组作为第二个传入争论。但是,这仍然会使用get_comments 来实际...好吧,获取 cmets,并且似乎没有办法对其进行分页。

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

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


我尝试过的:

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

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

    这也不起作用(它显示前 2 个 cmets,但没有分页)。此外,我对 get_comments所有 cmets 加载到内存中感到畏缩。


问题:

如何对所有个cmets进行分页?


P.S.我使用的是 WordPress 3.4.1 和 PHP 5.3.2。

【问题讨论】:

  • 我没有看到直接的方法来做到这一点,你最终需要使用 offsetnumber 来获得所需的 cmets 来显示。看看 SEO 寻呼机插件并且您可以使用分页功能或者使用自定义 WordPress 循环来实现您的功能。
  • @UmeshAwasthi - 你读过the linked-to post吗?似乎应该有办法做到这一点。我是不是误会了什么?

标签: php pagination comments wordpress


【解决方案1】:

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

我已经建立了我会使用的东西,如果有帮助,请告诉我。

#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($param);
foreach($comments as $comment) {
    // ECHO THE AUTHOR AND COMMENT
    echo("<strong>{$comment->comment_author}</strong> - {$comment->comment_content}");
}
$args = array(
'base'         => 'https://example.com/all-comments/%_%',
'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 );

【讨论】:

  • 只是为了改进我之前的答案,您不需要物理获取所有 cmets,但您至少应该知道您所在位置前面的 x。 EG 25 一个页面,您可能想要显示类似 1、2、3、4 的内容...,因此您需要知道您是否有足够的 cmets 来填充这些页面,或者您是否必须提前停止。简单地获得 4x25 将帮助您找出这些信息。如果您想知道总页数,您仍然需要知道 cmets 的总数。
  • 此代码有效,但在第 14 行 @PsyKzz 可能打算:$comments = get_comments($param);
  • 在第 20 行,您可能还需要填写分页功能的基本 URL,例如'base' =&gt; 'https://example.com/all-comments/%_%'。有关更多信息,请参阅 paginate_links() 的 function reference。除非我这样做,否则分页对我不起作用。
【解决方案2】:

我们应该担心使用 get_cmets() 获取总 cmets 的性能。必须使用参数offset为false,count为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_cmets() 作为 Weel,但如果您想自定义输出 HTML,请使用 foreach for $cmets:

foreach ( $comments as $comment ) :

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

endforeach;

【讨论】:

    猜你喜欢
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 2016-07-25
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多