温馨提示: 本文最后更新于
2025-04-13 20:36:46
,某些文章具有时效性,若有错误或已失效,请在下方留言! 前言
前天发布了一个网易云热评弹窗小卡片,应大家的要求,做成网站里的随机评论消息,参考了一下洪哥那边的设计,那么话不多说,先来看看效果吧!
更新日志
2024-12-14
- 修复了评论消息不显示表情包问题
- 优化代码逻辑,避免了大量的API请求
- 新增自定义的 WordPress REST API 端点用于返回热评
2024-02-23
- 新增用户名链接至个人主页
- 右上角新增按钮跳转至评论位置
演示效果
![图片[1]-想让网站更有趣?试试这个随机评论弹窗!-星雨博客](https://www.wniui.com/wp-content/uploads/d2b5ca33bd20250223142355.webp)
部署教程
将下方代码放置在主题目录下的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 。
© 版权声明
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自星雨の博客
THE END
- 最新
- 最热
只看作者