Отделить трекбеки от комментов. Как?

Помогите, плиз, отделить трекбеки от комментариев.
Вся проблема в том, что комменты древовидные.

Мне удалось разделить комментарии по типу и убрать вывод трекбеков

<?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' => 'Ответить &raquo;', '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:

<?php
   //свой формат комментариев. Its 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' => 'Ответить &raquo;', 'depth' => $depth, 'max_depth' => $args['max_depth'] ));  ?>  
    </div> 
<!-- End comments -->
<?php } else { $trackback = true; } /* End of is_comment statement */ ?>
<?php } ?>

часть кода, выводящего комментарии из файла comments.php:

// show the comments
if ( have_comments() ) : ?>
    <h4><?php comments_number('Ваш отзыв будет первым!', 'Oдин отзыв', 'Отзывов %' );?></h4>
    
    
    <ol class="commentlist" id="singlecomments">
    <?php wp_list_comments('callback=custom_comment'); ?>
    </ol>
    
<!-- trackbacks -->
<?php { ?>
<h6>Трекбеки и пингбеки: </h6>
<ul id="trackbacks">
<?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; ?>
</ul>
<?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) : 
?>

Как правильно вставить эти функции?

Для первого я написал выше.
Для второго вставьте 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;
?>
– все заработало.

Ю.Б., спасибо за помощь.

Теперь бы всё это в полезный урок вылить 😉

Anonymous
Отправить
Ответ на: