代码如下,加入到合适位置。直接显示所有来访者相应博客地址,并把地址用base64显示,不重复显示头像。(如果有网址,头像将被包裹在一个链接中;如果没有网址,头像则直接通过get_avatar()函数显示,没有链接。

  • 在遍历评论时,根据邮箱判断用户是否已存在
  • 如果不存在,添加新记录
  • 如果存在,增加评论次数,并确保名字和网址使用最新的记录(由于评论按 ID 降序排列,第一条记录即为最新)
<?php

    // 获取所有评论并按照评论ID排序

    $comments = get_comments(array(

        'status' => 'approve', // 只获取已经被批准的留言

        'order' => 'DESC', // 倒序排列

        'author__not_in' => array(1), // 排除博主的ID,这里假设博主ID是1

    ));

    // 用来存储邮箱对应的最新用户名和评论次数

    $user_data = array();

    // 遍历评论,按邮箱合并用户

    foreach ($comments as $comment) {

        $email = $comment->comment_author_email;

        $name = $comment->comment_author;

        $url = $comment->comment_author_url;

        // 如果邮箱还没有记录,则添加记录

        if (!isset($user_data[$email])) {

            $user_data[$email] = array(

                'name' => $name,

                'count' => 1,

                'url' => $url

            );

        } else {

            // 如果邮箱已存在,更新评论次数

            $user_data[$email]['count']++;

            // 如果当前评论比之前记录的更新,则更新名字和网址

            // 由于评论已经按ID降序排列,所以第一次遇到的评论就是最新的

            if ($user_data[$email]['name'] === '') {

                $user_data[$email]['name'] = $name;

            }

            if ($user_data[$email]['url'] === '') {

                $user_data[$email]['url'] = $url;

            }

        }

    }

    // 显示合并后的用户数据

    foreach ($user_data as $email => $data) {

        $name = $data['name'];

        $count = $data['count'];

        $url = $data['url'];

        echo '<div class="comment-author-container" style="position: relative; display: inline-block;line-height: 2em;margin-right: 1.7em;">';

        // 检查留言者是否填写了网址

        if (!empty($url)) {

            // 显示名字并显示评论次数,带跳转链接

            echo '<a rel="nofollow" target="_blank" href="' . home_url() . "/goto?url=" . base64_encode($url) . '">';

            echo '<span class="comment-author-name">' . esc_html($name) . '</span>';

            echo '</a>';

        } else {

            // 显示名字及评论次数,不带链接

            echo '<span class="comment-author-name">' . esc_html($name) . '</span>';

        }

        // 在名字右上角显示留言次数

        echo '<span class="comment-count" style="position: absolute; top: -10px; right: -15px; color: #007bff; padding: 2px 5px;font-size: 12px;">' . $count . '</span>';

        echo '</div>'; // 结束评论容器

    }

    ?>