web-dev-qa-db-fra.com

Commentaires compensés

Je dois afficher les commentaires à partir de la seconde, en omettant le premier. Avec les messages, je l'ai fait en utilisant "offset" mais je ne trouve rien de similaire pour les commentaires. Depuis que j'utilise des commentaires filetés, il faut partir du deuxième commentaire qui n'est pas un enfant (seulement des commentaires de parents). J'utilise wp_list_comments avec un rappel.

EDIT2: c'est le code comments.php, après les réponses:

      <?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(); ?>

Résultat: les commentaires ne sont plus classés par karma (fonction comment_comparator) et le premier commentaire (le commentaire avec le karma supérieur que je souhaite masquer) est toujours affiché.

1
Andycap
<?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 votre boucle actuelle:

Pas besoin de $counter = 2; (appelé nulle part).

Si vous avez déjà reçu votre $comments_arr, pourquoi ne pas simplement:

$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 );
0
kaiser