当前浏览:首页 / WordPress函数 / wp_list_comments()

wp_list_comments( string|array $args = array(), WP_Comment[] $comments = null )

显示评论列表

comment 评论more...

listmore...


描述

在comment.php模板中使用,用于列出某篇文章的评论。

另见

  • WP_Query->comments

参数

$args

(string|array) (可选) 格式化选项。

  • 'walker'
    (object) Walker类的实例,用于列出评论。默认为 null
  • 'max_depth'
    (int) 最大的评论深度。
  • 'style'
    (string) 列表排序的样式,接受'ul'、'ol'、或'div'。'div'将导致没有额外的列表标记。默认为'ul'
  • 'callback'
    (callable) 要使用的回调函数,默认为 null
  • 'end-callback'
    (callable) 结束时使用的回调函数,默认为 null
  • 'type'
    (string) 要列出的评论类型,接受 'all'、'comment'、'pingback'、'trackback'、'pings',默认为 'all'
  • 'page'
    (int) 列出评论的页面 ID
  • 'per_page'
    (int) 每页要列出的评论数量
  • 'avatar_size'
    (int) 头像尺寸的高度和宽度,默认为 32
  • 'reverse_top_level'
    (bool) 列出评论的顺序,如果true,将首先显示最新的评论,默认为 null
  • 'reverse_children'
    (bool) 是否在列表中反转子评论,默认为 null
  • 'format'
    (string) 如何格式化评论列表,接受 'html5'、'xhtml',默认 'html5' (如果主题支持)
  • 'short_ping'
    (bool) 是否输出短ping,默认为 false
  • 'echo'
    (bool) 直接输出还是返回结果,默认 true

默认值: array()

$comments

(WP_Comment[]) (可选) WP_Comment对象的数组。

默认值: null


返回

(void|string) 如果'echo'参数为true,或者没有要列出的评论,则无返回。否则,返回HTML评论列表。


说明

$args的默认选项

$args = array(
	'walker'            => null,
	'max_depth'         => '',
	'style'             => 'ul',
	'callback'          => null,
	'end-callback'      => null,
	'type'              => 'all',
	'page'              => '',
	'per_page'          => '',
	'avatar_size'       => 32,
	'reverse_top_level' => null,
	'reverse_children'  => '',
	'format'            => 'html5', // or 'xhtml' if no 'HTML5' theme support
	'short_ping'        => false,   // @since 3.6
	'echo'              => true     // boolean, default is true
);

max_depth”、“per_page”和“reverse_top_level”参数可以通过管理面板(设置>讨论)更容易地控制,但主题可以覆盖这些设置。



源码

查看源码 官方文档


更新日志

版本描述
2.7.0开始引入

使用示例

  • 示例1

    从Codex迁移的示例:

    仅显示自定义评论

    只显示评论(没有pingback或trackback),同时使用自定义回调函数控制评论的外观。如果没有出现回复链接,您可能需要添加一个max_depth=X参数。

    <ul class="commentlist">
    <?php wp_list_comments( 'type=comment&callback=mytheme_comment' ); ?>
    </ul>
    

    您需要在主题的functions.php文件中定义自定义回调函数。下面是一个示例:

    function mytheme_comment($comment, $args, $depth) {
        if ( 'div' === $args['style'] ) {
            $tag       = 'div';
            $add_below = 'comment';
        } else {
            $tag       = 'li';
            $add_below = 'div-comment';
        }?>
        <<?php echo $tag; ?> <?php comment_class( empty( $args['has_children'] ) ? '' : 'parent' ); ?> id="comment-<?php comment_ID() ?>"><?php 
        if ( 'div' != $args['style'] ) { ?>
            <div id="div-comment-<?php comment_ID() ?>" class="comment-body"><?php
        } ?>
            <div class="comment-author vcard"><?php 
                if ( $args['avatar_size'] != 0 ) {
                    echo get_avatar( $comment, $args['avatar_size'] ); 
                } 
                printf( __( '<cite class="fn">%s</cite> <span class="says">says:</span>' ), get_comment_author_link() ); ?>
            </div><?php 
            if ( $comment->comment_approved == '0' ) { ?>
                <em class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.' ); ?></em><br/><?php 
            } ?>
            <div class="comment-meta commentmetadata">
                <a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ); ?>"><?php
                    /* translators: 1: date, 2: time */
                    printf( 
                        __('%1$s at %2$s'), 
                        get_comment_date(),  
                        get_comment_time() 
                    ); ?>
                </a><?php 
                edit_comment_link( __( '(Edit)' ), '  ', '' ); ?>
            </div>
    
            <?php comment_text(); ?>
    
            <div class="reply"><?php 
                    comment_reply_link( 
                        array_merge( 
                            $args, 
                            array( 
                                'add_below' => $add_below, 
                                'depth'     => $depth, 
                                'max_depth' => $args['max_depth'] 
                            ) 
                        ) 
                    ); ?>
            </div><?php 
        if ( 'div' != $args['style'] ) : ?>
            </div><?php 
        endif;
    }
    

    注意缺少尾随</li>。为了容纳嵌套的回复,WordPress将在列出子元素后添加适当的结束标记。

  • 示例2

    如果您正在使用WordPress 4.9.6或更高版本,并且没有显示“评论正在等待审核”警报。

    您可以按照以下步骤操作。

    –)设置->讨论-> 启用“显示评论cookie复选框”
    –)激活后,复选框将显示在评论表单上,如下所示。“在此浏览器中保存我的姓名、电子邮件和网站,以便下次发表评论。”

    就是这样。

    如果要自定义此复选框字段,可以使用此代码。

    $comment_form = array(
        'fields' => array(
            'cookies' => '<p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes"' . $consent . ' />' .
            '<label for="wp-comment-cookies-consent">' . __( 'Save my name, email, and website in this browser for the next time I comment.' ) . '</label></p>',
        ),
    );
    
    comment_form( $comment_form );
    
  • 示例3

    wp_list_comments()本身不会做任何事情。它必须从评论模板文件内部调用。

    例如:

    要在其中插入评论的页面/文章文件:

    <?php comments_template('/comments.php'); ?>
    <?php /* Calling just comments_template() is also fine */ ?>
    

    然后,在comments.php中:

    <div>
    	<?php /* Add conditional checks, styling and arguments here... */ ?>
    	<?php wp_list_comments(); ?>
    </div>
    
  • 示例4

    从Codex迁移的示例:

    输出特定页面或文章的有序评论列表。诸如嵌套或分页的启用或禁用是通过(设置>讨论)控制的。

    <ol class="commentlist">
    	<?php
    		//Gather comments for a specific page/post 
    		$comments = get_comments(array(
    			'post_id' => XXX,
    			'status' => 'approve' //Change this to the type of comments to be displayed
    		));
    
    		//Display the list of comments
    		wp_list_comments(array(
    			'per_page' => 10, //Allow comment pagination
    			'reverse_top_level' => false //Show the oldest comments at the top of the list
    		), $comments);
    	?>
    </ol>
    
  • 示例5

    自定义默认的wp_list_comments()

    <ol class="comment-list">
    	<?php
    		wp_list_comments( array(
    			'avatar_size' => 60,
    			'max_depth'   => 5,
    			'style'       => 'ol',
    			'short_ping'  => true,
    			'type'        => 'comment',
    		) );
    	?>
    </ol><!-- .comment-list -->
    
  • 示例6
    $cpage = get_query_var( 'cpage' ) ? get_query_var( 'cpage' ) : 1;
    wp_list_comments(
        array(
            'avatar_size'       => 60,
            'short_ping'        => true,
            'type'              => 'comment',
            'callback'          => 'ic_comment_list',
            'per_page'          => get_option( 'comments_per_page' ),
            'page'              => $cpage,
            'reverse_top_level' => get_option( 'default_comments_page' ) === 'oldest' ? false : true,
        )
    );