Comments offset

I need to display comments starting from the second, omitting the first.
With posts I did it using “offset” but I can’t find anything similar for comments.
Since I’m using threaded comments, must start from the second comment that is not a child (only parent comments).
I’m using wp_list_comments with a callback.

EDIT2: this is actual comments.php code, after replies:

Read More
      <?php 
$i = 2;
if ( have_comments() ) : 
if ( $i > 1 ) :
?>
    <div id="comments">
    <h3 id="comments-title" class="color-<?php $category = get_the_category(); echo $category[0]->cat_name;?>">
</h3>


    <?php 

     global $wp_query; 
     $comments_arr = $wp_query->comments; 
     $comments_arr = sort( $comments_arr); 
     $comments_arr = array_pop( $comments_arr );
     $comments_arr = usort($comment_arr, 'comment_comparator');                 
     wp_list_comments('callback=gtcn_basic_callback', $comments_arr); 

    ?>


    <?php
    $i++; // count up
    endif; // If $i > 1
    else : if ( ! comments_open() ) : ?>
            <p><?php _e( 'Comments are closed.' ); ?></p>

    <?php 
      endif; // end ! comments_open() 
endif; // end have_comments()  ?>
</div>
<?php comment_form(); ?>

Result: comments are not anymore ordered by karma (comment_comparator function) and the first comment (comment with top karma that I want to hide) is still displayed.

Related posts

Leave a Reply

1 comment

  1. <?php 
    global $wp_query, $post; 
    $comments_arr = $wp_query->comments; 
    $comments_arr = sort( $comments_arr); 
    $comments_arr = array_pop( $comments_arr );
    $comments_arr = usort($comment_arr, 'comment_comparator');
    
    $comment_count = get_comment_count($post->ID);
    
     ?>
    <h3 id="comments-title"><?php
        printf(
        _n( 'One Response to %2$s', '%1$s Responses to %2$s', get_comments_number(), 'YOUR_THEMES_TEXTDOMAIN' ),
        number_format_i18n( get_comments_number() ),
        '<em>' . get_the_title() . '</em>' 
    );
    ?></h3>
    if ( have_comments() ) : 
    ?><ul class="commentlist"><?php
    for ( $i = 0; $i < $comment_count; $i++ )
    {
        // do stuff: 
            // This shows you everything you got inside the comments array
            // Call it like this: echo $comments_arr[$i]['comment_author'];
            var_dump( $comments_arr[$i] ); 
        // end do stuff
    } // endforeach;
    ?></ul><?php
    
    elseif ('open' == $post->comment_status) :
        // If there are no comments, but status = open
        ?><p class="nocomments"><?php _e( 'No Comments.', 'YOUR_THEMES_TEXTDOMAIN' ); ?></p><?php
    endif; // If $i > 1
    
    else : // or, if comments are not allowed:
        if ( ! comments_open() ) : 
        ?>
            <p class="nocomments"><?php _e( 'Comments are closed.', 'YOUR_THEMES_TEXTDOMAIN' ); ?></p>
        <?php 
        endif; // end ! comments_open() 
    endif; // end have_comments() 
    ?>
    

    Ad your current loop:

    No need for $counter = 2; (called nowhere).

    If you already got your $comments_arr, why not simply:

    $comments_arr = sort( $comments_arr); 
    $comments_arr = array_pop( $comments_arr ); 
    $comments_arr = usort( $comments_arr );
    

    OR

    $comments_arr = unset( $comments_arr[0] ); 
    $comments_arr = usort( $comments_arr );