Отделение трекбеков (обратных ссылок) от комментариев — не новый хак, однако когда WordPress выпустил новую версию 2.7, они представили новую улучшенную систему комментариев, которая включала в себя древовидные комментарии, возможность разбиения их на страницы и прочее. И, наряди с этими изменениями, они также изменили множество параметров в ядре движка. В этой статье мы покажем вам как отделить трекбеки от комментариев в WordPress. Этот хак работает только в версиях 2.7 и выше, и если вы до сих пор работаете на старых версиях, крайне рекомендуем вам обновиться!
Вот пример нового цикла, на который мы будем ссылаться в статье:
<?php if ( have_comments() ) : ?>
<h3 id="comments"><?php comments_number('No Responses', 'One Response', '% Responses' );?> to %u201C<?php the_title(); ?>%u201D</h3>
<ol class="commentlist">
<?php wp_list_comments(); ?>
</ol>
<div class="navigation">
<div class="alignleft"><?php previous_comments_link() ?></div>
<div class="alignright"><?php next_comments_link() ?></div>
</div>
<?php else : // this is displayed if there are no comments so far ?>
<?php if ('open' == $post->comment_status) : ?>
<!– If comments are open, but there are no comments. –>
<?php else : // comments are closed ?>
<!– If comments are closed. –>
<p class="nocomments">Comments are closed.
<?php endif; ?>
<?php endif; ?>
Ищем этот код в вашем файле comments.php:
<?php if ( have_comments() ) : ?>
Сразу под этим кодом добавьте еще один:
<?php if ( ! empty($comments_by_type['comment']) ) : ?>
Добавили. Идем далее. Найдите такой код:
<?php wp_list_comments(); ?>
Замените его на следующий:
<?php wp_list_comments('type=comment'); ?>
Теперь, как видно в примере нашего цикла, есть код для упорядоченного списка, который выглядит так:
</ol>
Сразу под ним добавьте:
<?php endif; ?>
Что это значит: после добавления тега endif в случае если у вас нет ни одного комментария, упорядоченный список не будет отображаться. Давайте перейдем к добавлению пингов в комментарии.
Добавьте следующий код ниже или в любое место, на ваше усмотрение. Он отобразит пинги.
<?php if ( ! empty($comments_by_type['pings']) ) : ?>
<h3 id="pings">Trackbacks/Pingbacks</h3>
<ol class="commentlist">
<?php wp_list_comments('type=pings'); ?>
</ol>
<?php endif; ?>
Код выше выведет трекбеки, но выведет ровно так же, как и комментарии. Вероятно вам захочется вывести их списком, иначе мы просто теряем тут с вами время. Вот как это можно сделать:
Просто открываем файл functions.php, расположеный в папке вашей темы и добавляем туда следующую функцию:
<?php
function list_pings($comment, $args, $depth) {
$GLOBALS['comment'] = $comment;
?>
<li id="comment-<?php comment_ID(); ?>"><?php comment_author_link(); ?>
<?php } ?>
Эта функция отобразит пинги в виде списка, нежели как комментарии. Но нужно сделать еще кое-что.
Откройте ваш comments.php и найдите этот код:
<ol>
<?php wp_list_comments('type=pings'); ?>
Замените его на:
<ol>
<?php wp_list_comments('type=pings&callback=list_pings'); ?>
В итоге, финальная копия цикла нашего примера должна выглядеть так:
<?php if ( have_comments() ) : ?>
<?php if ( ! empty($comments_by_type['comment']) ) : ?>
<h3 id="comments"><?php comments_number('No Responses', 'One Response', '% Responses' );?> to %u201C<?php the_title(); ?>%u201D</h3>
<ol class="commentlist">
<?php wp_list_comments('type=comment'); ?>
</ol>
<?php endif; ?>
<?php if ( ! empty($comments_by_type['pings']) ) : ?>
<h3 id="pings">Trackbacks/Pingbacks</h3>
<ol class="pinglist">
<?php wp_list_comments('type=pings&callback=list_pings'); ?>
</ol>
<?php endif; ?>
<div class="navigation">
<div class="alignleft"><?php previous_comments_link() ?></div>
<div class="alignright"><?php next_comments_link() ?></div>
</div>
<?php else : // this is displayed if there are no comments so far ?>
<?php if ('open' == $post->comment_status) : ?>
<!– If comments are open, but there are no comments. –>
<?php else : // comments are closed ?>
<!– If comments are closed. –>
<p class="nocomments">Comments are closed.
<?php endif; ?>
<?php endif; ?>
Вот, собственно, и все. Пробуйте и пользуйтесь.
