想让网站更有趣?试试这个随机评论弹窗!

想让网站更有趣?试试这个随机评论弹窗!

温馨提示: 本文最后更新于 2025-04-13 20:36:46,某些文章具有时效性,若有错误或已失效,请在下方留言!

前言

前天发布了一个网易云热评弹窗小卡片,应大家的要求,做成网站里的随机评论消息,参考了一下洪哥那边的设计,那么话不多说,先来看看效果吧!

更新日志

2024-12-14

  • 修复了评论消息不显示表情包问题
  • 优化代码逻辑,避免了大量的API请求
  • 新增自定义的 WordPress REST API 端点用于返回热评

2024-02-23

  • 新增用户名链接至个人主页
  • 右上角新增按钮跳转至评论位置

演示效果

图片[1]-想让网站更有趣?试试这个随机评论弹窗!-星雨博客

部署教程

将下方代码放置在主题目录下的function.php或者新建一个func.php文件

其它主题的小伙伴可以使用以下代码自定义REST API接口,使用的是WordPress内置的函数

<?php
// 注册自定义 REST API 接口
function register_hot_comments_endpoint() {
register_rest_route('myapi/v1', '/hot-comments', array(
'methods' => 'GET',
'callback' => 'get_hot_comments',
));
}
add_action('rest_api_init', 'register_hot_comments_endpoint');
function get_hot_comments() {
$comments = get_comments(array(
'number' => 50, // 获取50条最新评论
'status' => 'approve',
'orderby' => 'comment_date',
'order' => 'DESC',
));
$data = [];
if (empty($comments)) {
return new WP_REST_Response([], 200);
}
foreach ($comments as $comment) {
$avatar_url = get_avatar_url($comment->comment_author_email, array('size' => 96));
if (!$avatar_url) {
$avatar_url = get_template_directory_uri() . '/img/avatar-default.png';
}
$comment_url = get_comment_link($comment->comment_ID);
$user_url = get_author_posts_url($comment->user_id);
$data[] = [
'post_id' => $comment->comment_post_ID,
'author' => $comment->comment_author,
'content' => $comment->comment_content,
'avatar' => $avatar_url,
'url' => get_permalink($comment->comment_post_ID),
'comment_url' => $comment_url,
'user_url' => $user_url,
];
}
return new WP_REST_Response($data, 200);
}
<?php
// 注册自定义 REST API 接口
function register_hot_comments_endpoint() {
    register_rest_route('myapi/v1', '/hot-comments', array(
        'methods' => 'GET',
        'callback' => 'get_hot_comments',
    ));
}

add_action('rest_api_init', 'register_hot_comments_endpoint');

function get_hot_comments() {
    $comments = get_comments(array(
        'number'  => 50,            // 获取50条最新评论
        'status'  => 'approve',
        'orderby' => 'comment_date',
        'order'   => 'DESC',
    ));

    $data = [];

    if (empty($comments)) {
        return new WP_REST_Response([], 200);
    }

    foreach ($comments as $comment) {
        $avatar_url = get_avatar_url($comment->comment_author_email, array('size' => 96));
        if (!$avatar_url) {
            $avatar_url = get_template_directory_uri() . '/img/avatar-default.png';
        }

        $comment_url = get_comment_link($comment->comment_ID);
        $user_url = get_author_posts_url($comment->user_id);

        $data[] = [
            'post_id'   => $comment->comment_post_ID,
            'author'    => $comment->comment_author,
            'content'   => $comment->comment_content,
            'avatar'    => $avatar_url,
            'url'       => get_permalink($comment->comment_post_ID),
            'comment_url' => $comment_url,
            'user_url'  => $user_url,
        ];
    }

    return new WP_REST_Response($data, 200);
}
<?php // 注册自定义 REST API 接口 function register_hot_comments_endpoint() { register_rest_route('myapi/v1', '/hot-comments', array( 'methods' => 'GET', 'callback' => 'get_hot_comments', )); } add_action('rest_api_init', 'register_hot_comments_endpoint'); function get_hot_comments() { $comments = get_comments(array( 'number' => 50, // 获取50条最新评论 'status' => 'approve', 'orderby' => 'comment_date', 'order' => 'DESC', )); $data = []; if (empty($comments)) { return new WP_REST_Response([], 200); } foreach ($comments as $comment) { $avatar_url = get_avatar_url($comment->comment_author_email, array('size' => 96)); if (!$avatar_url) { $avatar_url = get_template_directory_uri() . '/img/avatar-default.png'; } $comment_url = get_comment_link($comment->comment_ID); $user_url = get_author_posts_url($comment->user_id); $data[] = [ 'post_id' => $comment->comment_post_ID, 'author' => $comment->comment_author, 'content' => $comment->comment_content, 'avatar' => $avatar_url, 'url' => get_permalink($comment->comment_post_ID), 'comment_url' => $comment_url, 'user_url' => $user_url, ]; } return new WP_REST_Response($data, 200); }

不过因为 WordPress 默认的头像服务是 Gravatar,而 Gravatar 在国内加载速度普遍较慢,甚至有时候会加载失败,所以这里我们需要通过以下代码替换 Gravatar 源为国内镜像

function replace_gravatar_url($url) {
$url = str_replace(
['www.gravatar.com', '0.gravatar.com', '1.gravatar.com', '2.gravatar.com', 'secure.gravatar.com'],
'cn.gravatar.com', // 或者用 v2ex 的 cdn.v2ex.com/gravatar
$url
);
return $url;
}
add_filter('get_avatar_url', 'replace_gravatar_url');
function replace_gravatar_url($url) {
    $url = str_replace(
        ['www.gravatar.com', '0.gravatar.com', '1.gravatar.com', '2.gravatar.com', 'secure.gravatar.com'],
        'cn.gravatar.com', // 或者用 v2ex 的 cdn.v2ex.com/gravatar
        $url
    );
    return $url;
}
add_filter('get_avatar_url', 'replace_gravatar_url');
function replace_gravatar_url($url) { $url = str_replace( ['www.gravatar.com', '0.gravatar.com', '1.gravatar.com', '2.gravatar.com', 'secure.gravatar.com'], 'cn.gravatar.com', // 或者用 v2ex 的 cdn.v2ex.com/gravatar $url ); return $url; } add_filter('get_avatar_url', 'replace_gravatar_url');

果只希望在首页显示,可以通过后台小工具 → 自定义 HTML,将代码放在首页的任何位置。

如果希望全站显示,则可以将代码放在主题设置中的自定义 HTML 。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 共26条

请登录后发表评论

      • sunny的头像-星雨博客sunny等级-LV2-星雨博客作者0
      • sunny的头像-星雨博客sunny等级-LV2-星雨博客作者0
      • sunny的头像-星雨博客sunny等级-LV2-星雨博客作者0
      • sunny的头像-星雨博客sunny等级-LV2-星雨博客作者0
      • sunny的头像-星雨博客sunny等级-LV2-星雨博客作者0