聚合评论,带分页

时间:2012-08-31 作者:MegaHit

我想建立一个页面,显示所有评论,无论它们附加到哪个帖子。我还希望该页面分页,因为它可能会有10000多条评论。

我不知道该怎么做,但以下是我迄今为止研究过的一些函数:

  1. get_comments - 如果否post_id 传入,它将返回所有注释。然而,我看不到一种分页的方法(有offsetnumber 可以随意选择,但手动操作非常繁琐)。

  2. wp_list_comments - 这方面的文档很糟糕,但是the source code 建议如果与一起使用,我们可以循环查看所有注释get_comments, 通过在get_comments 数组作为第二个参数。然而,这仍将使用get_comments 实际上。。。好吧,获取评论,似乎没有办法分页。

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

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


    1. 我所尝试的:

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

        $comments = get_comments(array(
            \'status\'    => \'approve\',
            \'number\'    => \'2\'
        ));
        
        wp_list_comments(array(
            \'callback\' => \'my_rendering_function\'
        ), $comments);
        
        paginate_comments_links();
        
        这不会显示任何分页链接。

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

        $comments = get_comments(array(
            \'status\' => \'approve\'
        ));
        
        wp_list_comments(\'per_page=2\', $comments);
        
        paginate_comments_links();
        
        这两者都不起作用(它显示前2条注释,但没有分页)。还有,我对get_comments 正在将所有注释加载到内存中。

        问题:我如何才能为所有评论分页?

        <小时>P.S. 我正在使用WordPress 3.4.1;PHP 5.3.2。

1 个回复
SO网友:Matthew Boynes

最有可能的是,您遗漏的主要内容是您必须在Settings Discussion Subpanel. 分页函数要求设置这一点,URL重写也是如此。

下面是一个工作完整的页面模板,可以满足您的要求:

<?php
/*
Template Name: All Comments
See http://wordpress.stackexchange.com/questions/63770/aggregate-comments-with-pagination
*/
get_header(); ?>

<div id="content" role="main">

    <?php
    # The comment functions use the query var \'cpage\', so we\'ll ensure that\'s set
    $page = intval( get_query_var( \'cpage\' ) );
    if ( 0 == $page ) {
        $page = 1;
        set_query_var( \'cpage\', $page );
    }

    # We\'ll do 10 comments per page...
    # Note that the \'page_comments\' option in /wp-admin/options-discussion.php must be checked
    $comments_per_page = 10;
    $comments = get_comments( array( \'status\' => \'approve\' ) );
    ?>
    <ol start="<?php echo $comments_per_page * $page - $comments_per_page + 1 ?>">
        <?php wp_list_comments( array (
            \'style\' => \'ol\',
            \'per_page\' => $comments_per_page,
            \'page\' => $page,
            \'reverse_top_level\' => false
        ), $comments ); ?>
    </ol>

    <?php # Now you can either use paginate_comments_links ... ?>
    <?php paginate_comments_links() ?>

    <?php # Or you can next/prev yourself... ?>
    <?php if ( get_comment_pages_count( $comments, $comments_per_page ) > 1 ) : // are there comments to navigate through ?>
    <nav id="comment-nav">
        <div class="nav-previous"><?php previous_comments_link( __( \'&larr; Newer Comments\' ) ); ?></div>
        <div class="nav-next"><?php next_comments_link( __( \'Older Comments &rarr;\' ) ); ?></div>
    </nav>
    <?php endif; ?>

</div><!-- #content -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>
如果您不想全局启用注释分页,这仍然是可能的,但这是一个小问题,因为您必须手动添加重写规则。一旦你这么做了,你就可以骗WordPress认为注释分页是通过一个简单的过滤器启用的,

add_filter( \'pre_option_page_comments\', \'__return_true\' );

结束
聚合评论,带分页 - 小码农CODE - 行之有效找到问题解决它

聚合评论,带分页

时间:2012-08-31 作者:MegaHit

我想建立一个页面,显示所有评论,无论它们附加到哪个帖子。我还希望该页面分页,因为它可能会有10000多条评论。

我不知道该怎么做,但以下是我迄今为止研究过的一些函数:

  1. get_comments - 如果否post_id 传入,它将返回所有注释。然而,我看不到一种分页的方法(有offsetnumber 可以随意选择,但手动操作非常繁琐)。

  2. wp_list_comments - 这方面的文档很糟糕,但是the source code 建议如果与一起使用,我们可以循环查看所有注释get_comments, 通过在get_comments 数组作为第二个参数。然而,这仍将使用get_comments 实际上。。。好吧,获取评论,似乎没有办法分页。

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

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


    1. 我所尝试的:

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

        $comments = get_comments(array(
            \'status\'    => \'approve\',
            \'number\'    => \'2\'
        ));
        
        wp_list_comments(array(
            \'callback\' => \'my_rendering_function\'
        ), $comments);
        
        paginate_comments_links();
        
        这不会显示任何分页链接。

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

        $comments = get_comments(array(
            \'status\' => \'approve\'
        ));
        
        wp_list_comments(\'per_page=2\', $comments);
        
        paginate_comments_links();
        
        这两者都不起作用(它显示前2条注释,但没有分页)。还有,我对get_comments 正在将所有注释加载到内存中。

        问题:我如何才能为所有评论分页?

        <小时>P.S. 我正在使用WordPress 3.4.1;PHP 5.3.2。

1 个回复
SO网友:Matthew Boynes

最有可能的是,您遗漏的主要内容是您必须在Settings Discussion Subpanel. 分页函数要求设置这一点,URL重写也是如此。

下面是一个工作完整的页面模板,可以满足您的要求:

<?php
/*
Template Name: All Comments
See http://wordpress.stackexchange.com/questions/63770/aggregate-comments-with-pagination
*/
get_header(); ?>

<div id="content" role="main">

    <?php
    # The comment functions use the query var \'cpage\', so we\'ll ensure that\'s set
    $page = intval( get_query_var( \'cpage\' ) );
    if ( 0 == $page ) {
        $page = 1;
        set_query_var( \'cpage\', $page );
    }

    # We\'ll do 10 comments per page...
    # Note that the \'page_comments\' option in /wp-admin/options-discussion.php must be checked
    $comments_per_page = 10;
    $comments = get_comments( array( \'status\' => \'approve\' ) );
    ?>
    <ol start="<?php echo $comments_per_page * $page - $comments_per_page + 1 ?>">
        <?php wp_list_comments( array (
            \'style\' => \'ol\',
            \'per_page\' => $comments_per_page,
            \'page\' => $page,
            \'reverse_top_level\' => false
        ), $comments ); ?>
    </ol>

    <?php # Now you can either use paginate_comments_links ... ?>
    <?php paginate_comments_links() ?>

    <?php # Or you can next/prev yourself... ?>
    <?php if ( get_comment_pages_count( $comments, $comments_per_page ) > 1 ) : // are there comments to navigate through ?>
    <nav id="comment-nav">
        <div class="nav-previous"><?php previous_comments_link( __( \'&larr; Newer Comments\' ) ); ?></div>
        <div class="nav-next"><?php next_comments_link( __( \'Older Comments &rarr;\' ) ); ?></div>
    </nav>
    <?php endif; ?>

</div><!-- #content -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>
如果您不想全局启用注释分页,这仍然是可能的,但这是一个小问题,因为您必须手动添加重写规则。一旦你这么做了,你就可以骗WordPress认为注释分页是通过一个简单的过滤器启用的,

add_filter( \'pre_option_page_comments\', \'__return_true\' );

相关推荐

Geoip shortcodes in comments

我想知道如何从geoip插件添加国家/地区短代码(https://pl.wordpress.org/plugins/geoip-detect/) 输入注释字段。[geoip\\u detect2 property=“country”]据我所知,注释字段必须是所见即所得字段(默认情况下不是文本)。还有其他方法吗?通过自定义php函数或其他方式?你好,Michal