Как отделить трекбеки от комментариев в WordPress

Отделение трекбеков (обратных ссылок) от комментариев — не новый хак, однако когда 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; ?> 

Вот, собственно, и все. Пробуйте и пользуйтесь.

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top