0

ループ外でユーザーの合計コメント数を表示するにはどうすればよいですか?

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

    <?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」など

ループ外のユーザーのコメント数を表示するためにどのコードを使用できますか?

4

5 に答える 5

4

いくつかのものをよりグローバルにし、ユーザーデータを別の方法で取得してみてください。

<?php

global $wpdb, $post, $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 'Comments: <strong>' . $comment_count . '</strong>';
?>

またはfunctions.phpで

<?
function commentCount() {
    global $wpdb, $current_user;
    get_currentuserinfo();
    $userId = $current_user->ID;

    $count = $wpdb->get_var('
             SELECT COUNT(comment_ID) 
             FROM ' . $wpdb->comments. ' 
             WHERE user_id = "' . $userId . '"');
    echo $count . ' comments';
}
?>

それを呼ぶには

  <?php commentCount(); ?>
于 2012-09-14T14:34:24.773 に答える
1

私はこのトピックが古いことを知っていますが、スニペットをドロップしたいだけです。これははるかに適しています:

<?php
$args = array(
    'post_id' => 1, // use post_id, not post_ID
        'count' => true //return only the count
);
$comments = get_comments($args);
echo $comments

?>

ここで、「post_id」は「user_id」になります。

于 2016-09-23T15:27:50.107 に答える
0

ユーザーのプロファイルを監視している場合は、ユーザーごとのコメントを取得するために使用する必要WHERE comment_author_email = "' . get_comment_author_email() . '"があります... @SMacFadyenのコードは、ログインしているユーザーのコメント数のみを示します。

また、2番目の機能は動作しません。

于 2013-05-13T13:24:26.130 に答える
0

これを試してみてください

$post= get_post($id=5);
$comment_count = $post->comment_count;
于 2013-08-16T23:21:42.447 に答える
-1

関数として、$ user_idを渡すと、$ wpdb-> prepare()メソッドも使用してクエリをフォーマットします。

function get_comment_count( $user_id = null ) {

    if ( is_null( $user_id ) ) { return 0; }

    global $wpdb;

    return $wpdb->get_var( $wpdb->prepare(
        "
            SELECT COUNT( * ) AS total 
            FROM {$wpdb->comments}
            WHERE comment_approved = 1 AND user_id = '%d'
        ",
        (int) $user_id
    ));

}
于 2020-10-14T16:19:18.083 に答える