web-dev-qa-db-fra.com

Comment obtenir les derniers commentaires mais pas de la part de l’administrateur (ou de tout autre rôle/capacité d’utilisateur spécifique)?

J'utilise get_comments pour afficher les derniers commentaires, à savoir:

<?php
    global $comments, $comment;
    $comments = get_comments( array( 'number' => '5', 'status' => 'approve', 'post_status' => 'publish' ) );

    foreach ( (array) $comments as $comment) {
     echo '<li>'.$comment->comment_author.' said '.$comment->comment_content .'</li>'
    }
;?>

Est-il possible de remplacer les commentaires de l'administrateur?! Je sais cette astuce en utilisant SQL mais peut-être que je veux quelque chose dans cette fonction?

Merci pour l'aide.

Code mis à jour Placez ce code à chaque fois que le fichier de modèle tel que sidebar.php, footer.php et répertorie les derniers commentaires (en affichant les commentaires de l'administrateur difficiles).

2
Diana

Remarque -

Il utilise les valeurs stockées dans la variable globale - wp_query. Habituellement, la variable wp_query contient les commentaires de la publication en cours lors de la navigation.

Utilisation -

$comments = wpse61072_hide_admin_comment(5); // 5=max comments
foreach  ( $comments as $comment ) {
    echo '<li>'.$comment->comment_author.' - said : '.$comment->comment_content.'</li>';

}

Functions.php -

/*
 * Usage : $comments = wpse61072_hide_admin_comment($post->ID, 5);      
 * Show Count : echo count(wpse61072_hide_admin_comment($post->ID, 5));     

 * This goes into functions.php 
*/
function wpse61072_hide_admin_comment ( $post_id, $no ) {
    global $wp_query; // uses global variable
    $woa_comments = $wp_query->comments;

    //thanks @kaiser for loop
    foreach ( $woa_comments as $woa_comment => $woac ) {    
        $author = get_userdata( $woac->user_id );
        if (user_can( $author, 'manage_options' )) {    
            unset( $woa_comments[ $woa_comment ] );
        }
    }

    //make sure we're returing only specified elements
    return (array_slice($woa_comments,0,$no));          
}

- Testé sur wordpress 3.4.1 avec le thème TwentyTen .

1
amit

Totalement non testé, mais vous devriez pouvoir utiliser le filtre pre_get_comments:

 function exclude_admin_comments($query) {
    $query->query_vars['user_id'] != 1;
  }

  add_action('pre_get_comments', 'exclude_admin_comments');
1
FlashingCursor

Yay! Nous avons des filtres!

Enveloppant le résultat de la requête de commentaires $wpdb directement dans un rappel de filtre (et un plugin), c'est le moyen agréable de gérer les commentaires.

/* Plugin Name: »Kaisers« Comments without admin comments */
! defined( 'ABSPATH' ) AND exit;

add_filter( 'comments_array', 'wpse_61072_comments_without_admin', 20, 2 );
function wpse_61072_comments_without_admin( $comments, $post_id )
{
    foreach ( (array) $comments as $index => $c )
    {
        // Add a limit
        if ( 5 <= absint( $index + 1 ) )
            return (object) $comments;

        // Get the authors user data
        $author = get_userdata( $c->user_id );
        // Unset based on the standard/default capability
        if ( user_can( $author->ID, 'manage_options' ) )
            unset( $comments[ $index ] );
    }

    return (object) $comments;
}

Celui-ci devrait fonctionner (non testé).

1
kaiser