Описание
Выводит все комментарии для постов или страниц. Функция может принимать ряд параметров и используется в шаблоне для вывода списка комментариев к посту/странице. Некоторые из параметров можно настроить в админ-панели.
Использование
<?php wp_list_comments( $args ); ?>
Параметры по умолчанию
<?php $args = array(
'walker' => null,
'max_depth' => ,
'style' => 'ul',
'callback' => null,
'end-callback' => null,
'type' => 'all',
'page' => '',
'per_page' => '',
'avatar_size' => 32,
'reverse_top_level' => null,
'reverse_children' => ); ?>
Параметры
По умолчанию: параметры по умолчанию
Аргументы параметра $args
По умолчанию: null
По умолчанию: 5
div, ol или ul. Имейте ввиду, что сам список нужно оборачивать вручную:
<div class="commentlist">
<?php wp_list_comments(array('style' => 'div')); ?>
</div>
или
<ol class="commentlist">
<?php wp_list_comments(array('style' => 'ol')); ?>
</ol>
По умолчанию: ol
По умолчанию: нет
all, comment, trackback, pingback или pings. pings включает в себя 'trackback' и 'pingback'.По умолчанию: all
По умолчанию: 50
По умолчанию: 32
true (1), то самые последние комментарии будут наверху (обратная сортировка по дате). Влияет только на комментарии верхнего уровня (родительские, те у которых есть или могут быть дочерние комменты).По умолчанию: false/0
true, то самые последние комментарии будут наверху (обратная сортировка по дате). Влияет только на дочерние комментарии.По умолчанию: false
get_comment_reply_link()По умолчанию: 'reply'
По умолчанию: 'Log in to Reply'
Примеры
1. Использование по умолчанию. Выводит список комментариев. Используется в файле шаблона comments.php. Наличие древовидности и пагинации у комментариев контролируется через админ-панель Опции->Обсуждение.
<ol class="commentlist"> <?php wp_list_comments(); ?> </ol>
2. Вывод комментариев с использованием пользовательской функции, для настройки внешнего вида каждого комментария.
<ul class="commentlist">
<?php wp_list_comments('type=comment&callback=mytheme_comment'); ?>
</ul>
Мы выводим список комментариев (type=comment), т.е. это не пинги, а так же используем свою функцию формирующую внешний вид комментария (callback=mytheme_comment). Функцию mytheme_comment нужно описывать отдельно (см. ниже), можно в файл functions.php или прям в том же файле, где находится этот код (обычно это comments.php).
function mytheme_comment($comment, $args, $depth){
$GLOBALS['comment'] = $comment; ?>
<li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">
<div id="comment-<?php comment_ID(); ?>">
<div class="comment-author vcard">
<?php echo get_avatar($comment,$size='48',$default='<path_to_url>' ); ?>
<?php printf(__('<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link()) ?>
</div>
<?php if ($comment->comment_approved == '0') : ?>
<em><?php _e('Your comment is awaiting moderation.') ?></em>
<br />
<?php endif; ?>
<div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></a><?php edit_comment_link(__('(Edit)'),' ','') ?></div>
<?php comment_text() ?>
<div class="reply">
<?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
</div>
</div>
<?php
}
wp_list_comments()
из файла: /wp-includes/comment-template.php WP 3.3.2function wp_list_comments($args = array(), $comments = null ) {
global $wp_query, $comment_alt, $comment_depth, $comment_thread_alt, $overridden_cpage, $in_comment_loop;
$in_comment_loop = true;
$comment_alt = $comment_thread_alt = 0;
$comment_depth = 1;
$defaults = array('walker' => null, 'max_depth' => '', 'style' => 'ul', 'callback' => null, 'end-callback' => null, 'type' => 'all',
'page' => '', 'per_page' => '', 'avatar_size' => 32, 'reverse_top_level' => null, 'reverse_children' => '');
$r = wp_parse_args( $args, $defaults );
// Figure out what comments we'll be looping through ($_comments)
if ( null !== $comments ) {
$comments = (array) $comments;
if ( empty($comments) )
return;
if ( 'all' != $r['type'] ) {
$comments_by_type = &separate_comments($comments);
if ( empty($comments_by_type[$r['type']]) )
return;
$_comments = $comments_by_type[$r['type']];
} else {
$_comments = $comments;
}
} else {
if ( empty($wp_query->comments) )
return;
if ( 'all' != $r['type'] ) {
if ( empty($wp_query->comments_by_type) )
$wp_query->comments_by_type = &separate_comments($wp_query->comments);
if ( empty($wp_query->comments_by_type[$r['type']]) )
return;
$_comments = $wp_query->comments_by_type[$r['type']];
} else {
$_comments = $wp_query->comments;
}
}
if ( '' === $r['per_page'] && get_option('page_comments') )
$r['per_page'] = get_query_var('comments_per_page');
if ( empty($r['per_page']) ) {
$r['per_page'] = 0;
$r['page'] = 0;
}
if ( '' === $r['max_depth'] ) {
if ( get_option('thread_comments') )
$r['max_depth'] = get_option('thread_comments_depth');
else
$r['max_depth'] = -1;
}
if ( '' === $r['page'] ) {
if ( empty($overridden_cpage) ) {
$r['page'] = get_query_var('cpage');
} else {
$threaded = ( -1 != $r['max_depth'] );
$r['page'] = ( 'newest' == get_option('default_comments_page') ) ? get_comment_pages_count($_comments, $r['per_page'], $threaded) : 1;
set_query_var( 'cpage', $r['page'] );
}
}
// Validation check
$r['page'] = intval($r['page']);
if ( 0 == $r['page'] && 0 != $r['per_page'] )
$r['page'] = 1;
if ( null === $r['reverse_top_level'] )
$r['reverse_top_level'] = ( 'desc' == get_option('comment_order') );
extract( $r, EXTR_SKIP );
if ( empty($walker) )
$walker = new Walker_Comment;
$walker->paged_walk($_comments, $max_depth, $page, $per_page, $r);
$wp_query->max_num_comment_pages = $walker->max_pages;
$in_comment_loop = false;
}Связанные Функции
Ещё из раздела
- cancel_comment_reply_link() view
- comment_author_link() view
- comment_author_url_link() view
- comment_form_title() view
- comment_id_fields() view
- comments_link() view
- post_comments_feed_link() view
- paginate_comments_links() view
Смотрите также: Функции WordPress и Теги Шаблона.
Немного странные и уж точно не профессиональные стихи иногда обладают своим шармом и настроением, которое не передать подходя к поэзии с точки зрения профессионализма. Ведь поэзия многогранна!
Кама, спасибо за четкую инструкцию
Подскажи пожалуйста
если под админом то у коммента на сайте появляется (edit)
А как сделать чтобы было как в админке -
Отклонить | Ответить | Свойства | Изменить | Спам | Удалить
Вот функция, но почему то не работает "ответить"
там каой то другой ID, не ID коммента
function delete_comment_link($id) { if (current_user_can('edit_post')) { echo ' | <a href="'.admin_url("post.php?post=$id&action=edit#").'">ответить</a> '; echo ' | <a href="'.admin_url("comment.php?action=cdc&c=$id").'">удалить</a> '; echo ' | <a href="'.admin_url("comment.php?action=cdc&dt=spam&c=$id").'">спам</a>'; } }Функцию нужно сунуть в файл functions.php и вызвать в файле comments.php, там где нужно получить ссылки, таким образом:
А вы как её вызываете?
Подскажите, а как вывести ссылку на закрытие комментариев?
К примеру пост старый и комменты сотни постят, надо закрыть, вот и приходится в админку бегать и закрывать
В WordPress есть автозакрытие комментов по истечении определенного количества дней (устанавливается), на странице "Настройки -> Обсуждение". Но это думаю будет лишний раз нагружать сервер, потому что придется проверять периодически дату и открытость комментов. А чтобы сделать такую кнопку, нужно будет подумать на досуге, не сталкивался, ответить затрудняюсь.
Использую mytheme_comment.
Но теперь у меня комменты не разбиваются на страницы.
Не подскажите как исправить?
Точно не подскажу, к сожалению
Обратите внимание на параметр per_page: он НЕ должен быть установлен и в админ-панели в настройках (Настройки обсуждения) нужно включить разбиение комментов на страницы.
mytheme_comment — это функция отвечающая за внешний вид каждого комментария и она никак не связана с разбиением комментов на страницы. Проблема в чем-то другом.
Подскажите, а как можно одновременно использовать mytheme_comment и установить max_depth? Я поставил
wp_list_comments('callback=Oversky_comments&type=comment');и уже в wp_list_comments массив $args не примкнешДобрый день.
У вас, я смотрю, вот это "06.Мар.2011 в 21:08 #" не является ссылкой. Как мне тоже убрать ссылку? Вообще, где можно отредактировать вывод имени (ника) и даты.
Спасибо.
В шаблоне - файл comments.php обычно
Подскажите, а можно ли в аватар и ник комментатора сделать ссылкой, которая бы вела на его профиль (информация, которая заполняется в админке "Пользователи") ?