抱歉各位,我换一种方式显示博友的链接,之前是单独一个页面显示,现在改为首页隐藏显示,点击★下划显示来留言过的所有访问者,并有相关链接,右上角是留言次数,自动记录,按留言时间顺序排列,原有页面的链接全部移至浏览器收藏夹并多端同步,会不定期浏览访问,嗯,如果您对我的这个操作介意的话,可以单方面删除我,愿博客和折腾继续,愿生活愉快,一切顺利。


2024年11月28日更新:

为了实现 仅显示最近6个月内有新留言的访客,我们需要对代码进行一些修改,基于评论时间过滤出符合条件的评论者,并只显示最近6个月内有新留言的访客。这个逻辑是通过获取每个评论的时间,并与当前时间进行比较来实现的。

主要修改点:

  1. 计算6个月前的时间戳
  2. 过滤掉6个月前没有新留言的访客
  3. 显示符合条件的访客信息

完整代码修改:

php
<?php
// 获取所有评论并按照评论ID排序
$comments = get_comments(array(
    'number' => 99999, // 获取评论数量
    'status' => 'approve', // 只获取已经被批准的留言
    'order' => 'DESC', // 倒序排列
    'author__not_in' => array(1), // 排除博主的ID,这里假设博主ID是1
));

// 用来存储不重复的评论者信息及留言次数
$unique_comments = array();

// 获取当前时间戳(秒级)
$current_time = current_time('timestamp');

// 定义6个月的时间戳(6个月 = 180天)
$six_months_ago = strtotime('-6 months', $current_time);

// 遍历评论
foreach ($comments as $comment) {
    $email = $comment->comment_author_email;
    $comment_date = strtotime($comment->comment_date); // 获取评论的时间戳

    // 如果评论日期在6个月前,则跳过
    if ($comment_date < $six_months_ago) {
        continue;
    }

    // 如果没有记录该评论者的信息,则添加到数组中
    if (!isset($unique_comments[$email])) {
        $unique_comments[$email] = array(
            'count' => 0,
            'url' => $comment->comment_author_url,
            'comment' => $comment,
            'latest_comment_date' => $comment_date // 记录最新留言的时间
        );
    }

    // 更新该评论者的最新留言时间
    if ($comment_date > $unique_comments[$email]['latest_comment_date']) {
        $unique_comments[$email]['latest_comment_date'] = $comment_date;
    }

    // 增加该邮箱的留言次数
    $unique_comments[$email]['count']++;
}

// 显示每个评论者的名称和留言次数
foreach ($unique_comments as $email => $data) {
    $count = $data['count'];
    $comment = $data['comment'];
    $comment_author_url = $data['url'];
    $comment_author_name = esc_html($comment->comment_author); // 获取评论者名称并进行转义
    $latest_comment_date = $data['latest_comment_date'];

    // 判断该评论者是否超过6个月没有新留言
    if ($latest_comment_date < $six_months_ago) {
        // 如果该评论者的最新留言时间超过6个月,则不显示名字和链接
        continue;
    }

    // 生成评论者名称和链接的代码
    echo '<div style="position: relative; display: inline-block; margin-right: 20px; padding: 0;">';
    if (!empty($comment_author_url)) {
        echo '<a rel="nofollow" target="_blank" href="' . home_url() . "/goto?url=" . base64_encode($comment_author_url) . '">';
    }

    // 显示评论者的名称
    echo '<span style="font-size: 1em; padding: 0 3px;">' . $comment_author_name . '</span>';

    if (!empty($comment_author_url)) {
        echo '</a>';
    }

    // 根据留言次数设置背景颜色和字体颜色
    if ($count >= 50) {
        // 背景为红色,字体为白色
        echo '<span style="font-size: 0.7em; color: #fff; background: #f7828a; border-radius: 2px;">'
            . esc_html($count) . '</span>';
    } elseif ($count > 30) {
        // 背景为绿色,字体为白色
        echo '<span style="font-size: 0.7em; color: #fff; background: #90b47f; border-radius: 2px;">'
            . esc_html($count) . '</span>';
    } else {
        // 默认样式
        echo '<span style="font-size: 0.7em; color: #29d;">'
            . esc_html($count) . '</span>';
    }

    echo '</div>';
}
?>

代码分析:

  1. 计算6个月前的时间戳
    • 使用 strtotime('-6 months', $current_time) 获取当前时间戳的6个月前的时间戳,用于后续判断。
  2. 遍历评论并过滤
    • 在遍历所有评论时,通过 strtotime($comment->comment_date) 获取每条评论的时间戳,并与 $six_months_ago 进行比较。
    • 如果评论的时间戳早于6个月前,则跳过该评论(即不显示该评论者的名字和链接)。
  3. 记录每个评论者的最新留言时间
    • 对于每个评论者,保留其最新的评论时间,并与后续的评论进行比较,确保只显示最近6个月内有留言的评论者。
  4. 判断评论者是否符合条件
    • 在显示评论者信息之前,检查评论者的最新留言时间,如果该时间早于6个月前,则跳过显示。
  5. 生成评论者的显示内容
    • 如果评论者符合条件,会显示评论者的名字、链接以及留言次数。留言次数的不同背景颜色根据条件设置:
      • 50条及以上:红色背景
      • 30条至50条:绿色背景
      • 小于30条:默认字体蓝色