## Функция get_comment_class()
### Описание
Функция get_comment_class() возвращает массив классов для блока комментария. Это может быть полезно при стилизации комментариев на вашем сайте WordPress.
### Использование
Чтобы использовать эту функцию, нужно передать параметры, указывающие, какие классы хотите добавить.
```php
get_comment_class( $css_class, $comment_id, $post );
- $css_class (string|string[]) — Один или несколько классов, которые вы хотите добавить к списку классов. По умолчанию: '' (пустая строка).
- $comment_id (int|WP_Comment) — ID комментария или объект WP_Comment. По умолчанию: текущий комментарий.
- $post (int|WP_Post) — ID поста или объект WP_Post. По умолчанию: текущий пост.
Возвращаемое значение
Функция возвращает массив строк (string[]). Это массив классов, которые вы можете использовать в HTML.
Пример
Вот пример того, как можно получить классы комментария в виде массива:
$arr = get_comment_class( 'myclass', 123, 2 );
print_r( $arr );
Результат будет выглядеть так:
Array
(
[0] => comment
[1] => byuser
[2] => comment-author-kama
[3] => even
[4] => thread-even
[5] => depth-1
[6] => myclass
)
Если вы хотите вывести массив в виде строки, можете использовать функцию implode():
echo implode( ' ', $arr );
Результат будет: comment byuser comment-author-kama even thread-even depth-1 myclass
Примечания
- Глобальные переменные:
$comment_alt— используется для чередования стиля комментариев.$comment_depth— глубина текущего комментария.$comment_thread_alt— переменная для чередования стилей в потоке комментариев.
История изменений
- С версии 2.7.0 — функция была введена.
- С версии 4.4.0 — добавлена возможность передавать объект WP_Comment в качестве идентификатора комментария.
Код функции
Вот как выглядит код функции get_comment_class():
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;
}
// Получаем тип комментария (комментарий, трекбэк).
$classes[] = ( empty( $comment->comment_type ) ) ? 'comment' : $comment->comment_type;
// Добавляем классы для авторов комментариев, которые зарегистрированы как пользователи.
$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 );
// Проверяем, является ли автор комментария автором поста.
$_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;
// Чередование для верхних комментариев.
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 );
/**
* Фильтрует возвращаемые CSS классы для текущего комментария.
*
* @param string[] $classes Массив классов комментария.
* @param string[] $css_class Массив дополнительных классов, добавленных к списку.
* @param string $comment_id ID комментария в виде числовой строки.
* @param WP_Comment $comment Объект комментария.
* @param int|WP_Post $post ID поста или объект WP_Post.
*/
return apply_filters( 'comment_class', $classes, $css_class, $comment->comment_ID, $comment, $post );
}
Связанные функции
- get_post_class() — Возвращает массив классов для поста.
- wc_body_class() — Получает классы для тела страницы в WooCommerce.
Цикл комментариев
Вот несколько связанных функций для работы с комментариями:
- comment_author() — Получает имя автора комментария.
- comment_date() — Возвращает дату комментария.
- comments_number() — Возвращает количество комментариев к посту.