WordPress 获取评论所有主题都是使用`wp_list_comments()`函数，获取每篇文章的评论是相当的方便实用，唯一的不足是不能通过自定义值来获取评论，不过我们可以通过评论查询类`WP_Comment_Query()`来单独获取有自定义值的评论。

WP\_Comment\_Query()的用法：

```
wp_list_comments( array( 'callback' => 'salong_comment','type'=>'comment' ) );
```

其中`salong_comment`为评论的模版函数，自己可以写个。

本文最重要的还是介绍`wp_list_comments()`函数的使用与实例。

### 一、描述

WP\_Comment\_Query是一个类，定义在 wp-includes/class-wp-comment-query.php 文件中，允许查询WordPress数据库表“wp\_comments”和“wp\_commentmeta”，这个类是在WordPress3.1版本中引入的。

### 二、使用

```
$args = array(
   // args here
);

// The Query
$comments_query = new WP_Comment_Query;
$comments = $comments_query->query( $args );

// Comment Loop
if ( $comments ) {
	foreach ( $comments as $comment ) {
		echo $comment->comment_content;
	}
} else {
	echo 'No comments found.';
}
```

### 三、默认参数

```
$args = array(
    'author_email'              => '',    
    'author_url'                => '',
    'author__in'                => '',
    'author__not_in'            => '',
    'include_unapproved'        => '',
    'fields'                    => '',
    'ID'                        => '',
    'comment__in'               => '',
    'comment__not_in'           => '',
    'karma'                     => '',
    'number'                    => '',
    'offset'                    => '',
    'no_found_rows'             => true,
    'orderby'                   => '',
    'order'                     => 'DESC',
    'parent'                    => '',
    'parent__in'                => '',
    'parent__not_in'            => '',
    'post_author__in'           => '',
    'post_author__not_in'       => '',
    'post_id'                   => 0,
    'post__in'                  => '',
    'post__not_in'              => '',
    'post_author'               => '',
    'post_name'                 => '',
    'post_parent'               => '',
    'post_status'               => '',
    'post_type'                 => '',
    'status'                    => 'all',
    'type'                      => '',
    'type__in'                  => '',
    'type__not_in'              => '',
    'user_id'                   => '',
    'search'                    => '',
    'hierarchical'              => false,
    'count'                     => false,
    'cache_domain'              => 'core',
    'meta_key'                  => '',
    'meta_value'                => '',
    'meta_query'                => '',
    'date_query'                => null, // See WP_Date_Query
    'update_comment_meta_cache' => true,
    'update_comment_post_cache' => false,
);
```

### 四、参数说明

1、属性

**$status**
(字符串) (可选) 值返回指定状态的评论
‘hold’ – 未通过审核的评论
‘approve’ – 已审核的评论
‘spam’ – 被标记未垃圾的评论
‘trash’ – 回收站中的评论
默认： None

**$orderby**
(字符串) (可选) 设置排列评论数据使用的字段
默认: comment\_date\_gmt

**$order**
(字符串) (可选) 排列 $orderby 的方法，可用值：
‘ASC’ – 升序 (从低到高)
‘DESC’ – 降序 (从高到低)
默认: DESC

**$number**
(整数) (可选) 返回的评论数量，留空返回所有评论。
默认: unlimited

**$offset**
(整数) (可选) 偏移的评论数量，必须和 $number 参数一起使用
默认: 0

**$post\_id**
(整数) (可选) 只返回指定 ID 文章的评论。
默认: None

**$user\_id**
(整数) (可选) 只返回指定 ID 用户的评论。
默认: None

**$count**
(整数) (可选) 只返回评论的总数量。
默认: None

**$type\_\_in**
(数组) (可选) 允许指定评论类型
默认: None

**$type\_\_not\_in**
(数组) (可选) 允许指定排除的评论类型
默认: None

**$meta\_key**
(字符串) (可选) 自定义评论元数据 key。
默认: None

**$meta\_value**
(字符串) (可选) 自定义评论元数据值。
默认: None

**$meta\_query**
(数组) (可选) 高级元数据查询参数 (从 3.5 版开始可用)。
默认: None

**$fields**
(字符串) (可选) 指定返回的字段 ( 从4.0版本开始可用 )。
‘ids’ – 评论 ID
‘\*’ – 所有评论字段
默认: \*

2、自定义字段参数

显示包含某个自定义字段的评论

meta\_key (字符串) – 自定义字段key
meta\_value ( 字符串) – 自定义字段值
meta\_query (数组) – 自定义字段参数 (从 3.5 版开始可用)
key (字符串) -自定义字段key
value (字符|数组) – 自定义字段值 (注意: 数组支持只限在以下对比方法中使用： ‘IN’, ‘NOT IN’, ‘BETWEEN’, ‘NOT BETWEEN’, ‘EXISTS’ 或 ‘NOT EXISTS’)
compare (字符) – 数据对比方法 ‘=’, ‘!=’, ‘&gt;’, ‘&gt;=’, ‘&lt;‘, ‘&lt;=’, ‘LIKE’, ‘NOT LIKE’, ‘IN’, ‘NOT IN’, ‘BETWEEN’, ‘NOT BETWEEN’, ‘EXISTS’, 和 ‘NOT EXISTS’。 默认为 ‘=’。
type (字符) – 自定义字段类型，可用的值有 ‘NUMERIC’, ‘BINARY’, ‘CHAR’, ‘DATE’, ‘DATETIME’, ‘DECIMAL’, ‘SIGNED’, ‘TIME’, ‘UNSIGNED’。 默认值为 ‘CHAR’。

**3、获取特色评论**

```
$comment_query = new WP_Comment_Query( array( 'meta_key' => 'featured', 'meta_value' => '1' ) );
```

**4、多个元数据查询处理方法**

```
$args = array(
    'meta_query'      => array(
        'relation'    => 'AND',
        array(
            'key'     => 'featured',
            'value'   => '1'
        ),
        array(
            'key'     => 'buried',
            'value'   => '1',
            'type'    => 'numeric',
            'compare' => '!='
        )
    )
 );
$comment_query = new WP_Comment_Query( $args );
```

### 五、返回值

(数组)
包含以下索引键的评论字段（如果没有评论，返回空数组）：

**comment\_ID**
(整数) 评论 ID

**comment\_post\_ID**
(整数) 评论所在的文章/页面

**comment\_author**
(字符串) 评论者的名称

**comment\_author\_email**
(字符串) 评论者的电子邮件

**comment\_author\_url**
(字符串) 评论者的链接

**comment\_author\_IP**
(字符串) 评论者的 IP

**comment\_date**
(字符串) 评论日期时间 (YYYY-MM-DD HH:MM:SS)

**comment\_date\_gmt**
(字符串) 评论的 GMT 日期时间 (YYYY-MM-DD HH:MM:SS)

comment\_content
(字符串) 评论内容

**comment\_karma**
(整数) 评论来源

**comment\_approved**
(字符串) 评论审核状态 (0, 1 或 “spam”)

**comment\_agent**
(字符串) 评论者的客户端信息 (浏览器, 操作系统,等)

**comment\_type**
(字符串) 评论类型 (pingback|trackback)， 普通评论为空

**comment\_parent**
(字符串) 评论的父级评论 ID，顶级评论为 0

**user\_id**
(整数) 如果评论者已注册，返回评论者的 用户ID

### 六、实例

获取当前文章下被点赞的评论，并按点赞数量反向排序

```
$args = array(
    'post_id'         => $post->ID,
    'meta_query'      => array(
        array(
            //获取有 like 自定义值的且值不为0的评论
            'key'     => 'like',
            'value'   => '0',
            'compare' => '!='
        )
    ),
    // 按钮自定义值排序
    'orderby'         => 'meta_value_num',
);
$comments_query  = new WP_Comment_Query;
$popularcomments = $comments_query->query( $args );
foreach ( $popularcomments as $comment ) {
    echo $comment->comment_content;
}
```