Помогите, плиз, отделить трекбеки от комментариев.
Вся проблема в том, что комменты древовидные.
Мне удалось разделить комментарии по типу и убрать вывод трекбеков
<?php
//ts own format comments
function custom_comment($comment, $args, $depth) {
$GLOBALS['comment'] = $comment; ?>
<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type == 'comment') { ?>
<li <?php comment_class(); ?> id="li-comment-<?php comment_ID( ); ?>">
<div id="comment-<?php comment_ID( ); ?>" class="single_comment">
<?php echo get_avatar( $comment, 40 ); ?>
<div class="commentmetadata">
<noindex><?php comment_author_link() ?></noindex> |
<a href="#comment-<?php comment_ID() ?>" title=""><?php comment_date('d.m.Y') ?> г. в <?php comment_time() ?></a>
<?php if (function_exists('comment_subscription_status')) { if (comment_subscription_status()) { echo '(подписан на отзывы)'; } } ?> <?php edit_comment_link('Редактировать','| ',''); ?>
</div>
<?php if ($comment->comment_approved == '0') : ?>
<span class="moderation">Ваш отзыв на модерации.</span>
<?php endif; ?>
<span class="comment_text">
<?php comment_text() ?>
</span>
<?php echo comment_reply_link(array('before' => '<div class="reply">', 'after' => '</div>', 'reply_text' => 'Ответить »', 'depth' => $depth, 'max_depth' => $args['max_depth'] )); ?>
</div>
<!-- End comments -->
<?php } else { $trackback = true; } /* End of is_comment statement */ ?>
<?php } ?>
А вывести трекбеки отдельно никак не получается.
Может я не там вставляю код вывода?
<ol class="commentlist" id="singlecomments">
<?php wp_list_comments('callback=custom_comment'); ?>
</ol>
<!-- trackbacks -->
<?php if ($trackback == true) { ?>
<h4>Трекбеки и пингбеки</h4>
<ol>
<?php foreach ($comments as $comment) : ?>
<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type != 'comment') { ?>
<li><?php comment_author_link() ?></li>
<?php } ?>
<?php endforeach; ?>
</ol>
<?php } ?>
<!-- End trackbacks -->
<?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.
else :
// comments are closed
endif;
endif;
if ('open' == $post-> comment_status) :
// show the form
?>
Помогите, пожалуйста, разобраться.
Ребята, помогите пожалуйста – очень нужно.
Help Desk, Ю.Б., вы всегда меня выручали.
Подскажите, плиз, как вывести эти чертовы трекбеки.
Не знаю, чесслово, не знаю. Я на этом не заморачиваюсь, ибо большинство трекбеков – чистой воды спам 🙂
То, что это, в основном, спам вы правы.
Но иногда там, все таки, проскальзывают нормальные ссылки – не хотелось бы их терять.
Ура! Получилось.
Удалила условие <?php if ($trackback == true) { ?> и все заработало.
Почему так – логически не объяснить.
Условие то вполне правомерно: Если есть трекбек, то он выводится. (Если я правильно это понимаю).
Это php иногда не подчиняется никаким разумным правилам.
Ну, это при условии, что переменная $trackback где-то и как-то, желательно правильно, определена. Иначе она == false со всем вытекающими.
А как ее правильно определить?
Ладно, попробую почитать код 🙂
Я так понимаю, что в первой части все комменты проверяются на тип if ($comment_type == ‘comment’), и если какой-то из них не попдпадает под условие, выставляется флаг $trackback = true; Во второй части флаг проверяется, и если он выставлен, то выводятся комменты, которые if($comment_type != ‘comment’). Вроде всё логично. Единственное, чего я не вижу, это находятся ли эти два куска в пределах одной функции или разных. Если разных, то обязательно надо поставить global $trackback;, иначе переменная будет у каждой функции своя собственная со своим собственным значением.
Ага, начинаю понимать логику этого кода – вы хорошо объясняете.
По логике, это ( global $trackback;) нужно вставить в comments.php перед выводом трекбеков.
А как это нужно оформить?
Так – <?php global $trackback; ?> или что то еще добавить?
Если оба куска вызываются как функции, то в оба.
<?php
//ts own format comments
function custom_comment($comment, $args, $depth) {
global $trackback;
….
Второй – сами придумаете 🙂
comments.php может подключаться инклюдом, а может инклюдом из функции. Вот тут западло и кроется 🙂
Чет, чем дальше в лес, тем толще партизаны.
Вставила в начало comments.php и в начало кода, отвечающего за вызов формата комментариев в functions.php. В итоге, у меня прекрасно отображаются трекбеки, зато исчезли все комментарии.
Может не туда надо было?
Ю.Б., пожалуйста, ткните носом.
Вот код.
functions.php:
часть кода, выводящего комментарии из файла comments.php:
Как правильно вставить эти функции?
Для первого я написал выше.
Для второго вставьте global $trackback; в начале файла, сразу после <?php.
Я так и делала. При этом исчезали все комментарии.
Но все-таки до меня дошло:
<?php
//ts own format comments
function custom_comment($comment, $args, $depth) {
global $trackback;
?>
В этом коде потерялся вывод комментариев – $GLOBALS[‘comment’] = $comment;
Как только я его вернула на место
<?php
//свой формат комментариев. Its own format comments
function custom_comment($comment, $args, $depth) {
$GLOBALS[‘comment’] = $comment;
global $trackback;
?>
– все заработало.
Ю.Б., спасибо за помощь.
Теперь бы всё это в полезный урок вылить 😉