<?php
if( have_comments() ){
if( get_comments_number() ){ ?>
Количество комментариев: <?=get_comments_number()?> <br>
<ol>
<?php
wp_list_comments(
array(
'style' => 'ol', // формировать список элементов для тега <ol>
'per_page' => 10, // количество комментариев на странице
'avatar_size' => 74, // размер аватара пользователя
)
);
?>
</ol>
<?php }else{?>
Нет комментариев к этой публикации
<?php }?>
<?php }?>
В этом коде можно отметить использование трёх функций, которые связаны с выводом комментариев: wp_list_comments, get_comments_number, have_comments. Рассмотрим их по порядку появления в коде.
Возможность комментирования "have_comments"
С помощью функции "have_comments" можно проверить возможность оставлять комментарии у текущей записи (страницы). Функция работает на основе глобальной переменной "$wp_query" и не имеет аргументов.Функция возвращает логическое "true" или "false" в зависимости наличия или отсутствия возможности оставлять комментарии на текущей странице.
Количество комментариев "get_comments_number"
Количество комментариев на странице можно получить с помощью функции "get_comments_number". У функции есть только один параметр - ID публикации. Если его не указать, то будет использованы данные по количеству комментариев из текущей страницы (из глобальной переменной "$post->comment_count").$comments_count = get_comments_number( $post_id );
Функция возвращает число (количество комментариев).
Вывод списка комментариев "wp_list_comments"
Функция "wp_list_comments" выводит список комментариев для записей, постов или страниц. У функции есть два параметра:wp_list_comments( $args, $comments );
Первый параметр - это массив аргументов, определяющий выборку комментариев. Второй параметр "$comments" - это массив, которые возвращается функцией "get_comments". В нашем примере мы не использовали второй параметр, потому что выводили комментарии в файле "comments.php", до вызова которого WordPress получает массив комментариев из базы. В будущей части статьи мы рассмотрим функцию "get_comments" подробнее, а сейчас мы продолжим с нашим упрощённым примером.
Перед использованием функции "wp_list_comments" вне файла "comments.php" необходимо вызвать функцию "comments_template", чтобы получить выборку комментариев из базы. Если её не вызвать, то функция "wp_list_comments" ничего не распечатает.
Первый аргумент функции "wp_list_comments" является массивом. Рассмотрим все его возможные ключи и значения, которые влияют на выборку комментариев:
Название | Тип данных | Описание |
---|---|---|
walker | объект | Объект класса, через который формируется список комментариев. По умолчанию: new Walker_Comment |
max_depth | число | Глубина вложенности комментариев (работает если если включены древовидные комментарии в панели администрирования). По умолчанию: 5 |
style | строка | Какой тег используется для оборачивания комментариев (обрамляет функцию). Возможные значения: 'div', 'ul' или 'ol' (по умолчанию). К примеру, если указать списки 'ol' или 'ul', то необходимо ставить их вокруг функции: <ol> <?php wp_list_comments( array('style' => 'ol') ); ?> </ol> |
callback | строка | Название функции для формирования вывода каждого комментария. Функция должна содержать только открывающий тег (к примеру, <ol>), а закрывающий тег (</ol>) WordPRess пишет автоматически. По умолчанию: нет функции. |
end-callback | строка | Название функции для закрытия обрамляющего тега каждого комментария. Функция должна выводить закрывающий тег (к примеру, </ol>) WordPRess пишет автоматически. По умолчанию: нет функции. |
type | строка | Тип комментариев для отображения: 'all', 'comment', 'trackback', 'pingback' или 'pings'. Последняя 'pings' включает в себя 'trackback' и 'pingback'. По умолчанию: all |
per_page | число | Количество комментариев на странице. По умолчанию: 50 |
page | число | Номер страницы для постраничной навигации, комментарии с которой необходимо вывести. |
avatar_size | число | Размер аватара в пикселях. По умолчанию: 32 |
reverse_top_level | логический | Включить ли обратную сортировку по дате (только для родительских комментариев, не влияет на дочерние). По умолчанию: false |
reverse_children | логический | Включить ли обратную сортировку по дате для дочерних комментариев. По умолчанию: false |
reply_text | строка | Текст на кнопке "ответить". Текст используется в функции: get_comment_reply_link(). По умолчанию: 'reply' |
login_text | строка | Текст предупреждения, если комментарии в этом блоке могут оставлять только зарегистрированные пользователи. По умолчанию: 'Log in to Reply' |
echo | логический | Распечатывать ли HTML код или возвращать для обработки в переменную. По умолчанию: 'true' (выводить) |
Если нужно вывести все комментарии (без разбивки на страницы), то необходимо указать: page=1 и per_page=0.
Если в ключе "page" указать пустую строку '' и опция get_option( 'page_comments' ) включена, то количество комментариев будет взято из опции get_query_var( 'comments_per_page' ).
Если значение параметров page или per_page не равны тем что указаны в переменной $wp_query: get_query_var('cpage') и get_query_var('comments_per_page'), то будет сделан дополнительный запрос к базе на получение всех комментариев текущей записи.
Ключи "callback" и "end-callback" разделены, чтобы правильно выводить древовидные комментарии (чтобы не ставить закрывающий тег, если дерево ещё не закончилось).