Как использовать функцию wp_list_comments()? │ WP 2.7.0

# WP_LIST_COMMENTS() │ WP 2.7.0

Функция wp_list_comments() используется для вывода комментариев на конкретном посте. Она часто применяется в шаблоне comments.php.

## Рабочие хуки функции

- wp_list_comments_args

## Возвращаемое значение

- null или String. Если аргумент echo установлен в true, результат не выводится. 
- Если комментариев нет, также возвращается null.
- В противном случае возвращается HTML-список комментариев.

## Использование

### Параметры функции

```php
wp_list_comments( $args, $comments );
  • $args (строка|массив) — параметры форматирования. По умолчанию: пустой массив.

Подробности параметров:

  • walker (object) — экземпляр класса Walker для вывода комментариев. По умолчанию: null.

  • max_depth (int) — максимальная глубина комментариев. По умолчанию: ''.

  • style (string) — стиль вывода списка. Можно использовать 'ul', 'ol' или 'div'. При установке 'div' разметка списка не добавляется. По умолчанию: 'ul'.

  • callback (callable) — функция обратного вызова для вывода комментария. По умолчанию: null.

  • end-callback (callable) — функция обратного вызова, вызываемая в конце. По умолчанию: null.

  • type (string) — тип комментариев для вывода. Можно использовать 'all', 'comment', 'pingback', 'trackback', 'pings'. По умолчанию: 'all'.

  • page (int) — ID страницы для вывода комментариев. По умолчанию: ''.

  • per_page (int) — количество комментариев для вывода на странице. По умолчанию: ''.

  • avatar_size (int) — высота и ширина изображения аватара. По умолчанию: 32.

  • reverse_top_level (true|false) — порядок вывода комментариев. Если true, выводятся новейшие комментарии первыми. По умолчанию: null.

  • reverse_children (true|false) — выводить ли дочерние комментарии в обратном порядке. По умолчанию: null.

  • format (string) — формат вывода списка комментариев. Принимает 'html5', 'xhtml'. Если тема поддерживает это. По умолчанию: 'html5'.

  • short_ping (true|false) — выводить ли короткие пинги. По умолчанию: false.

  • echo (true|false) — выводить результат или возвращать его. По умолчанию: true.

  • $comments (WP_Comment[]) — массив объектов WP_Comment. По умолчанию: null.

Примеры

Пример 1: Использование параметра Walker и создание собственного класса

Пример файла comments.php:


    
new TwentyTwenty_Walker_Comment(), 'avatar_size' => 120, 'style' => 'div', ] ); ?>

Определение класса Walker:


        < id="comment-" has_children ? 'parent' : '', $comment ); ?>>
            
', $comment_author_url ); echo wp_kses_post( $avatar ); } } printf( '%1$s%2$s', esc_html( $comment_author ), __( 'сказал:', 'twentytwenty' ) ); if ( ! empty( $comment_author_url ) ) { echo ''; } ?>
comment_approved ) { ?>

'div-comment', 'depth' => $depth, 'max_depth' => $args['max_depth'], 'before' => '', 'after' => '', ) ) ); $by_post_author = twentytwenty_is_comment_by_post_author( $comment ); if ( $comment_reply_link || $by_post_author ) { ?>
' . __( 'Автор поста', 'twentytwenty' ) . ''; } ?>

Пример 2: Вывод комментариев с использованием функции обратного вызова

При настройке внешнего вида каждого комментария вы можете использовать параметр callback, где указываете название функции, создающую нужный вывод:

    'comment', 'callback' => 'mytheme_comment', ] ); ?>

Создайте функцию mytheme_comment(), которая будет описывать, как выглядят комментарии. Эту функцию можно добавить в файл functions.php или в тот же файл, где находится данный код (обычно это comments.php):


    < id="comment-">
    
        
%s сказал:' ), get_comment_author_link() ); ?>
comment_approved == '0' ) { ?>
$add_below, 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>

Важно: Функция обратного вызова должна содержать только открывающий тег <li>, она не должна его закрывать. См. описание параметров для подробностей.

Пример 3: Стандартное использование

Функция для отображения списка комментариев используется в файле шаблона comments.php. Деревообразное представление и пагинация комментариев управляются через панель администратора в разделе Настройки > Обсуждение.

Или можно настроить параметры:

$cpage = get_query_var( 'cpage' ) ? get_query_var( 'cpage' ) : 1;

wp_list_comments(
    [
        'avatar_size'       => 60,
        'short_ping'        => true,
        'type'              => 'comment',
        'callback'          => 'ic_comment_list',
        'per_page'          => get_option( 'comments_per_page' ),
        'page'              => $cpage,
        'reverse_top_level' => get_option( 'default_comments_page' ) === 'oldest' ? false : true,
    ]
);

Пример 4: Вывод комментариев для конкретного поста

Если вы хотите вывести список комментариев только для конкретного поста, то вам нужно сначала получить эти комментарии и передать их как второй параметр функции wp_list_comments().

    XXX, 'status' => 'approve' // только одобренные комментарии ] ); // Генерируем список полученных комментариев wp_list_comments( [ 'per_page' => 10, // Пагинация комментариев - 10 комментариев на странице 'reverse_top_level' => false // Последние комментарии в начале ], $comments ); ?>

Пример 5: Уведомление "Комментарий ожидает модерации"

Если вы используете WordPress 4.9.6 или выше и уведомление "Комментарий ожидает модерации" не отображается, выполните следующие действия:

  1. Перейдите в Настройки > Обсуждение и включите "Показать флажок согласия на использование cookies для комментариев".
  2. После активации флажка он отобразится в форме комментариев с текстом: "Сохраните мое имя, электронную почту и сайт в этом браузере при следующем комментировании."

Если вы хотите настроить это поле флажка, используйте следующий код:

$comment_form = array(
    'fields' => array(
        'cookies' => '',
    ),
);

comment_form( $comment_form );

Примечания

  • Смотрите: WP_Query::$comments
  • Глобальные переменные:
    • WP_Query. $wp_query — объект WordPress Query.
    • Int. $comment_alt
    • Int. $comment_depth
    • Int. $comment_thread_alt
    • true|false. $overridden_cpage
    • true|false. $in_comment_loop

Изменения

  • Начиная с версии 2.7.0.

Leave a Reply

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