我们即将结束本系列的“精通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上有很多有用的项目 。