掌握WP_Comment_Query类

我们即将结束本系列的“精通WP_Query ”,现在该介绍WP_Query类的兄弟姐妹了。 在上一部分中,我们介绍了WP_User_Query ,在本文中,我们将学习WP_Comment_Query类。

让我们开始!

什么是WP_Comment_Query?

在WordPress 3.1版中引入的WP_Comment_Query类几乎完成了所有关于WordPress查询注释的繁重工作。 本质上,它允许查询两个数据库表wp_comments和wp_commentmeta 。

下面是一个使用注释查询循环的骨架 WP_Comment_Query类:

<?php
 
$args = array(
    // Arguments for your query.
);
 
$comments_query = new WP_Comment_Query;
$comments = $comments_query->query( $args );
 
if ( $comments ) {
    
    foreach ( $comments as $comment ) {
        
        // Do what you do for each comment here.
        
    }
    
} else {
    
    // Display message because there are no comments.
    
}
 
?>

很简单,对不对? 几步后,我们将做一个示例,但让我们先了解一下。

WP_Comment_Query类的属性和方法

由于没有太多的属性(类的公共变量)和方法(类的公共函数),因此我将在两个迷你部分中对它们进行快速遍历。 开始了!

WP_Comment_Query的属性
与WP_Query具有30多个属性(其中25个是条件标记的等效属性)不同, WP_Comment_Query类只有五个属性:

$request :包含SQL查询的字符串。
$meta_query :借助WP_Meta_Query类进行“元查询”的WP_Meta_Query 。
$date_query :借助WP_Date_Query类进行“日期查询”的WP_Date_Query 。
$query_vars :查询变量的数组。
$comments :查询中获取的注释数组。

WP_Comment_Query的唯一方法
是的,只有一种方法可以与WP_Comment_Query类一起使用,并且该方法的名称为query()

query()方法基本上使用下一节将要介绍的参数执行查询。 但是让我们看看使用此方法时在数组中得到什么(返回的对象属性)

返回值

(数组)
包含以下索引键的评论字段(如果没有评论,返回空数组):

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

现在让我们看一下WP_Comment_Query类的参数。

WP_Comment_Query类的query()方法的参数

WP_Comment_Query对象的query()方法使用34个参数,但不要让它们吓到您:您已经可以从它们的名称中识别出它们,其他参数同样易于解释和使用。

$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、属性

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

<strong>$orderby</strong>
(字符串) (可选) 设置排列评论数据使用的字段
默认: comment_date_gmt

<strong>$order</strong>
(字符串) (可选) 排列 $orderby 的方法,可用值:
'ASC' – 升序 (从低到高)
'DESC' – 降序 (从高到低)
默认: DESC

<strong>$number</strong>
(整数) (可选) 返回的评论数量,留空返回所有评论。
默认: unlimited

<strong>$offset</strong>
(整数) (可选) 偏移的评论数量,必须和 $number 参数一起使用
默认: 0

<strong>$post_id</strong>
(整数) (可选) 只返回指定 ID 文章的评论。
默认: None

<strong>$user_id</strong>
(整数) (可选) 只返回指定 ID 用户的评论。
默认: None

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

<strong>$type__in</strong>
(数组) (可选) 允许指定评论类型
默认: None

<strong>$type__not_in</strong>
(数组) (可选) 允许指定排除的评论类型
默认: None

<strong>$meta_key</strong>
(字符串) (可选) 自定义评论元数据 key。
默认: None

<strong>$meta_value</strong>
(字符串) (可选) 自定义评论元数据值。
默认: None

<strong>$meta_query</strong>
(数组) (可选) 高级元数据查询参数 (从 3.5 版开始可用)。
默认: None

<strong>$fields</strong>
(字符串) (可选) 指定返回的字段 ( 从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 (字符) – 数据对比方法 '=', '!=', '>', '>=', '<', '<=', '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 );

了解WP_Comment_Query如何工作的快速示例

如果我们不了解它的工作原理,那将不会像是完整的教程,是吗? 让我们考虑一个简单的场景,然后做一个简单的例子。

假设您要列出帖子作者的评论,并按评论ID(而不是评论日期)对列表进行排序。 这是您的工作:

<?php
 
// Get the global `$wp_query` object...
global $wp_query;
 
// ...and use it to get post author's id.
$post_author_id = $wp_query->post->post_author;
 
// Setup arguments.
$args = array (
    'user_id' => $post_author_id,
    'orderby' => 'comment_ID'
);
 
// Custom comment query.
$my_comment_query = new WP_Comment_Query;
$comments = $my_comment_query->query( $args );
 
// Check for comments.
if ( $comments ) {
 
    // Start listing comments.
    echo '<ul class="author-comments">';
 
        // Loop over comments.
        foreach( $comments as $comment ) {
    
            echo '<li>' . $comment->comment_content . '</li>';
    
        }
 
    // Stop listing comments.
    echo '</ul>';
 
} else {
 
    // Display message if no comments are found.
    echo '<p class="no-author-comments">' . __( 'The post author didn\'t post any comments.', 'tutsplus' ) . '</p>';
 
}
 
?>

快速提示:如果要构建注释查询,但要使用GUI而不是键入代码,则可以使用GenerateWP的WP_Comment_Query Generator 。

实例

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

$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;
}

包装一切

就像我说的,我们即将结束本系列。 在下一部分中,我们将一起学习WP_Meta_Query和WP_Date_Query类。

您对本文有什么要补充的吗? 在下面的评论部分与我们分享您的想法。 而且,如果您喜欢这篇文章,请不要忘记与您的朋友分享。

如果您对一些脚本和插件感兴趣,这些脚本和插件可以为您的注释系统提供更高级的功能,那么Envato Market上有很多有用的项目 。