web-dev-qa-db-ja.com

自分の投稿に対するコメントを除くユーザーの総コメント数

私は現在 ここで示唆したプラグインに取り組んでいます そしてこれまでのところ私はパズルの1つの部分だけが足りずにすべてをコーディングすることに成功しました。

これが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;

他のユーザーの投稿current_userの総コメント数をechoにしたいので、著者自身の投稿のコメントは数えたくありません。そのようなことは可能ですか?そして、もしそうなら、どうですか?

1

私はこれを行うWordPressの機能を知らないので、あなたはこの種のクエリを試してみることができます(未テスト)。

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;
}

そしてこれを次のように使います。

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

これは、ユーザーがログインしたときにコメントが書き込まれることを前提としているため、wp_commentsテーブルのuser_id列にデータが入力されます。

更新:

もう1つの方法は、ユーザーメタ内のユーザーごとのコメント数を収集することです。例えばcomment_postアクションにフックすることを試みることができます。このアプローチは、ユーザーがサイトにコメントを書く前に実装することができます。

1
birgire