web-dev-qa-db-fra.com

Nombre total de commentaires de l'utilisateur à l'exclusion des commentaires sur leurs propres messages

Je travaille actuellement sur un plugin auquel j'ai fait allusion ici et, jusqu'à présent, j'ai réussi à tout coder, il ne manque qu'un morceau du puzzle.

Voici comment obtenir le nombre total de commentaires pour le current_user:

global $wpdb, $current_user;
get_currentuserinfo();
$userID = $current_user->ID;

$where = 'WHERE comment_approved = 1 AND user_id = ' . $userID ;
$comment_count = $wpdb->get_var("SELECT COUNT( * ) AS total 
     FROM {$wpdb->comments}
     {$where}");

echo 'Total Comments: ' . $comment_count;

Je souhaite echo le total des commentaires de current_user sur les publications des autres utilisateurs , je ne souhaite donc pas compter les commentaires sur les propres publications de l'auteur. Une telle chose est-elle possible? Et si oui, comment?

1
Christine Cooper

Je ne suis au courant d'aucune fonction WordPress qui effectue cela. Vous pouvez donc essayer de jouer avec ce type de requête (non testée):

function get_custom_user_comments_count( $uid ){
    global $wpdb;

    $sql = "SELECT COUNT(*) as total 
            FROM {$wpdb->comments} as c  
            JOIN {$wpdb->posts} as p ON p.ID = c.comment_post_ID 
            WHERE c.comment_approved = '1' 
            AND p.post_status ='publish'  
            AND p.post_type ='post'  
            AND p.post_author != c.user_id            
            AND c.user_id = %d";

    $comment_count = $wpdb->get_var( $wpdb->prepare( $sql, $uid ) );
    return $comment_count;
}

et l'utiliser comme ça:

global $current_user;
get_currentuserinfo();
echo 'Total Comments: ' . get_custom_user_comments_count( $current_user->ID );

Cela suppose que les commentaires sont écrits lorsque les utilisateurs sont connectés. La colonne user_id de la table wp_comments est donc remplie.

Mettre à jour:

Une autre approche serait de collecter le nombre de commentaires par utilisateur dans la méta utilisateur. Vous pouvez par exemple essayer de vous accrocher à l'action comment_post. Cette approche pourrait être mise en œuvre avant que les utilisateurs écrivent des commentaires sur le site.

1
birgire