web-dev-qa-db-ja.com

The Loopの外側にあるユーザーの総コメント数を表示する

The Loopの外にユーザーの総コメント数を表示するにはどうすればよいですか。

このコードを使用して、ループ内のコメント数を表示します

    <?php
    global $wpdb;
    $user_id = $post->post_author;
    $where = 'WHERE comment_approved = 1 AND user_id = ' . $user_id ;
    $comment_count = $wpdb->get_var(
        "SELECT COUNT( * ) AS total
    FROM {$wpdb->comments}
    {$where}
");
    echo 'Comments: <strong>' . $comment_count . '</strong>';
    ?>

それはループの内側で完全に機能します。そのコードをループ外で機能させるために、$user_id = $post->post_author;$user_id = get_the_author_meta( 'ID' );に変更しましたが、機能しませんでした。

私が行ったことが最も近いのはこのコードです。

                            <?php
                            global $wpdb;
                            $where = 'WHERE comment_approved = 1 AND user_id <> 0';
                            $comment_counts = (array) $wpdb->get_results("
                                SELECT user_id, COUNT( * ) AS total
                                FROM {$wpdb->comments}
                                {$where}
                                GROUP BY user_id
                                ", object);
                            foreach ( $comment_counts as $count ) {
                                $user = get_userdata($count->user_id);
                                echo 'Comments: ' . $count->total . '
                                ';
                            }
                            ?>

しかし、このエコーコメントは、すべてのユーザーに対してこのようにカウントされます。 "コメント:28コメント:11コメント:55" etc

ループの外側のユーザーのコメント数を表示するために/ ** /に使用できるコード

4
Amanda Bynes

あなたはすでに多かれ少なかれコードを持っています、あなたはただコードをわずかに変える必要があります。

how とは言っていませんが、ユーザーIDを取得していますが、確認したいユーザーIDがある場合は、ループの外で行うのは非常に簡単です。

これは簡単な例です:

$userid=1;
$comment_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) AS total FROM $wpdb->comments WHERE comment_approved = 1 AND user_id = %s", $userid ) );
echo "Number of comments for user $userid is $comment_count";

注:承認されていないコメントを含める場合は、 "comment_approved = 1"と表示されている部分で承認されているコメントのみをカウントします。

4
Lars Koudal