Функция get_comment_class(): описание, использование, пример

## Функция 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() — Возвращает количество комментариев к посту.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *