Обычно эту функцию можно встретить внутри файла comments.php, где она находится для вывода комментариев к определённой записи / странице / CPT.
wp_list_comments( $args = array(), $comments = null )
В случае использования этой функции где-либо кроме вышеупомянутого случая, вам понадобится указать второй параметр.
- $args
- (массив) Массив параметров функции.
- style
- (строка) При выводе комментарии по умолчанию выводятся при помощи тега маркированного списка
<ul>(это я имею ввиду дочерние комменты), но мы можем указать значениеol, или дажеdiv– тогда всё будет на дивах. - max_depth
- (целое) В случае включения в админке древовидных комментариев, этот параметр функции позволяет установить максимальный параметр вложенности комментариев вне зависимости от значения в админке.
- type
- (строка) Как вы возможно знаете, в WordPress, помимо стандартного типа комментариев
comment, существуют также пингиpings, которые в свою очередь ещё подразделяются наpingbackиtrackback. По умолчанию этот параметр имеет значениеall– то есть выводит все типы, но вы можете указать только какой-либо определённый тип. - per_page
- (целое) Сколько комментариев отображать на одной странице при разбивке на постраничную навигацию. По умолчанию будет использоваться параметр из Настройки > Обсуждение, однако вы можете передать здесь собственное значение. Если вы укажете 0, то вообще не будет добавлено постраничной навигации.
- page
- (целое) При разбивке на постраничную навигацию можно указать страницу, которую вы хотите сейчас отображать.
- avatar_size
- (целое) Высота и ширина аватара пользователей в комментах, по умолчанию
32. - reverse_top_level
- (логическое) Нужно ли отображать сначала более поздние комментарии сверху? Да, если установить значение
true. По умолчанию – значение из настроек. - reverse_children
- (логическое) Установите
true, если вы хотите, чтобы дочерние комментарии выводились в обратном порядке. - echo
- (логическое) Возвращать (
false, по умолчанию) или выводить (true) результат. - callback
- (строка) Вы можете указать здесь название функции и потом создать её где-нибудь в
functions.php, которая будет содержать HTML комментария - end-callback
- (строка) Примерно то же самое, что и предыдущий параметр, но позволяет перезаписать функцию, закрывающую тег комментария (подробнее в примерах).
- walker
- (объект) Указываем объект класса, который будет перезаписывать методы класса по умолчанию
Walker_Comment, напримерnew Misha_Comment().
- $comments
- (массив) Если вдруг так получится, что вы будете использовать
wp_list_comments()не там, где нужно, а именно за пределами подключенного функцией comments_template() файла, то сюда надо будет передать массив объектовWP_Comment, потому что он не будет существовать вероятно в виде глобального. Этот массив можно передать при помощи например функции get_comments().
Примеры
Самый изишный способ использования функции:
echo '<ul class="commentlist">' . wp_list_comments( array( 'echo' => false ) ) . '</ul>';
И ещё один пример, чтобы наверняка:
echo '<ol class="commentlist">'; wp_list_comments( array( 'style' => 'ol' ) ); echo '</ol>';
Как создать произвольную функцию вывода комментария?
Давайте здесь рассмотрим параметры callback и end-callback, потому что в реальной жизни с ними приходится сталкиваться ну очень часто.
Сначала мы указываем эти параметры в функции:
wp_list_comments( array( 'callback' => 'misha_comment', 'end-callback' => 'misha_end_comment' ) );
Затем нам нужно создать эти функции внутри нашего файла functions.php:
function misha_comment( $comment, $args, $depth ){ ?><li <?php comment_class() ?> id="comment-<?php comment_ID() ?>"> <div class="comment-body"> <?php echo get_avatar( $comment, 70, '', '', array( 'class' => 'comment-avatar' ) ) ?> <div class="comment-content"> <span class="comment-author"><?php comment_author() ?></span> <span class="comment-date"><?php comment_date( 'j F Y в H:i' ) ?></span> <?php comment_text() ?> </div> </div> <?php // без закрывающего </li> (!) }
Прежде всего важное уточнение – это оооочень упрощённый код. Он рабочий безусловно, но для определённых параметров функции и для определённых настроек обсуждения. Например тут нет кода, который выводит уведомление, что коммент отправлен на модерацию, а также если вы вдруг захотите выводить комментарии при помощи тегов <div>, то эта функция вам не подойдэт, так как использует тег <li>.
В паре слов про этот код:
- Функция получает в качестве аргументов три параметра:
$comment– объект выводимого комментария,$args– тупо все параметрыwp_list_comments(),$depth– глубина текущего комментария. - comment_class() аналогична функции post_class(), за тем исключением, что она нужна для комментариев.
- comment_ID() – выводит не много не мало – ID комментария, а вообще создание атрибута
id="comment-XXX"обязательно (!), потому что при публикации комментария пользователя редиректит к нему при помощи ссылки-якоря. - get_avatar() – позволяет получить и вывести фото пользователя в сервисе Gravatar.
- comment_author() – выводит имя автора комментария.
- comment_date() – очень похожа на the_time() для постов.
- Ну и comment_text() выводит текст комментария.
Вопрос – а почему мы не закрыли тег <li> ? А потому что это нужно для корректного вывода дочерних комментариев + мы можем закрыть тег в нашей другой кастом функции – misha_end_comment().
function misha_end_comment( $comment, $args, $depth ){ echo '</li>'; }
В данном случае показан вывод по умолчанию, но вы теперь уже сами знаете, как его изменить, если захотите.
Источник: misha.blog


