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