Наглядный пример использования этой функции вы можете найти в моём видеоуроке.
Обычно эту функцию можно встретить внутри файла comments.php
, где она находится для вывода комментариев к определённой записи / странице / CPT.
wp_list_comments( $args = array(), $comments = null )
В случае использования этой функции где-либо кроме вышеупомянутого случая, вам понадобится указать второй параметр.
<ul>
(это я имею ввиду дочерние комменты), но мы можем указать значение ol
, или даже div
– тогда всё будет на дивах.comment
, существуют также пинги pings
, которые в свою очередь ещё подразделяются на pingback
и trackback
. По умолчанию этот параметр имеет значение all
– то есть выводит все типы, но вы можете указать только какой-либо определённый тип. 32
.true
. По умолчанию – значение из настроек.true
, если вы хотите, чтобы дочерние комментарии выводились в обратном порядке.false
, по умолчанию) или выводить (true
) результат.functions.php
, которая будет содержать HTML комментарияWalker_Comment
, например new Misha_Comment()
.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
– глубина текущего комментария.id="comment-XXX"
обязательно (!), потому что при публикации комментария пользователя редиректит к нему при помощи ссылки-якоря.Вопрос – а почему мы не закрыли тег <li>
? А потому что это нужно для корректного вывода дочерних комментариев + мы можем закрыть тег в нашей другой кастом функции – misha_end_comment()
.
function misha_end_comment( $comment, $args, $depth ){ echo '</li>'; }
В данном случае показан вывод по умолчанию, но вы теперь уже сами знаете, как его изменить, если захотите.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Thanks!