get_comment_class()
云策文档标注
概述
get_comment_class() 函数用于返回评论 div 的 CSS 类数组,支持通过参数添加自定义类,并基于评论属性(如类型、作者、深度)自动生成语义化类名。
关键要点
- 函数返回一个字符串数组,包含评论的 CSS 类,如 'comment'、'byuser'、'odd'、'depth-1' 等。
- 参数 $css_class 可选,用于添加一个或多个自定义类,可以是字符串或数组。
- 参数 $comment_id 和 $post 可选,分别指定评论和文章,默认为当前上下文。
- 函数内部使用全局变量 $comment_alt、$comment_depth、$comment_thread_alt 来生成交替类(如 odd/even)和深度类。
- 通过 apply_filters('comment_class', ...) 钩子允许开发者过滤返回的类数组。
代码示例
// 基本用法:获取当前评论的类数组
$classes = get_comment_class();
// 添加自定义类
$classes = get_comment_class('custom-class', $comment_id);
// 在评论模板中输出类
<div class="<?php echo implode(' ', get_comment_class()); ?>">
<?php comment_text(); ?>
</div>注意事项
- 函数依赖于全局评论变量,确保在评论循环内或提供有效 $comment_id 调用。
- 返回的类已通过 esc_attr() 转义,可直接用于 HTML 输出。
- 从 WordPress 4.4.0 开始,$comment_id 参数支持 WP_Comment 对象。
原文内容
Returns the classes for the comment div as an array.
Parameters
$css_classstring|string[]optional-
One or more classes to add to the class list.
Default empty. $comment_idint|WP_Commentoptional-
Comment ID or WP_Comment object. Default current comment.
Default:
null $postint|WP_Postoptional-
Post ID or WP_Post object. Default current post.
Default:
null
Source
function get_comment_class( $css_class = '', $comment_id = null, $post = null ) {
global $comment_alt, $comment_depth, $comment_thread_alt;
$classes = array();
$comment = get_comment( $comment_id );
if ( ! $comment ) {
return $classes;
}
// Get the comment type (comment, trackback).
$classes[] = ( empty( $comment->comment_type ) ) ? 'comment' : $comment->comment_type;
// Add classes for comment authors that are registered users.
$user = $comment->user_id ? get_userdata( $comment->user_id ) : false;
if ( $user ) {
$classes[] = 'byuser';
$classes[] = 'comment-author-' . sanitize_html_class( $user->user_nicename, $comment->user_id );
// For comment authors who are the author of the post.
$_post = get_post( $post );
if ( $_post ) {
if ( $comment->user_id === $_post->post_author ) {
$classes[] = 'bypostauthor';
}
}
}
if ( empty( $comment_alt ) ) {
$comment_alt = 0;
}
if ( empty( $comment_depth ) ) {
$comment_depth = 1;
}
if ( empty( $comment_thread_alt ) ) {
$comment_thread_alt = 0;
}
if ( $comment_alt % 2 ) {
$classes[] = 'odd';
$classes[] = 'alt';
} else {
$classes[] = 'even';
}
++$comment_alt;
// Alt for top-level comments.
if ( 1 === $comment_depth ) {
if ( $comment_thread_alt % 2 ) {
$classes[] = 'thread-odd';
$classes[] = 'thread-alt';
} else {
$classes[] = 'thread-even';
}
++$comment_thread_alt;
}
$classes[] = "depth-$comment_depth";
if ( ! empty( $css_class ) ) {
if ( ! is_array( $css_class ) ) {
$css_class = preg_split( '#s+#', $css_class );
}
$classes = array_merge( $classes, $css_class );
}
$classes = array_map( 'esc_attr', $classes );
/**
* Filters the returned CSS classes for the current comment.
*
* @since 2.7.0
*
* @param string[] $classes An array of comment classes.
* @param string[] $css_class An array of additional classes added to the list.
* @param string $comment_id The comment ID as a numeric string.
* @param WP_Comment $comment The comment object.
* @param int|WP_Post $post The post ID or WP_Post object.
*/
return apply_filters( 'comment_class', $classes, $css_class, $comment->comment_ID, $comment, $post );
}
Hooks
- apply_filters( ‘comment_class’, string[] $classes, string[] $css_class, string $comment_id, WP_Comment $comment, int|WP_Post $post )
-
Filters the returned CSS classes for the current comment.
Changelog
| Version | Description |
|---|---|
| 4.4.0 | Added the ability for $comment_id to also accept a WP_Comment object. |
| 2.7.0 | Introduced. |