给Wordpress添加评分功能到评论表单

今天要 给你的 Wordpress 添加评分功能到评论表单 吗?

评分功能效果图

什么类型的网站需要评分?

  • 资源站
  • 教程站
  • 其他,我也没想到。。。

但我这个网站,因为是电影类的网站,好像还是有点需要的,所以,我就给它加上。

修改后台代码(functions.php )添加评分代码

首先,你需要将下面代码复制到 functions.php 中:

// 添加打分脚本到评论表单 
// code by yangjiyong VX:uu0216
function add_rating_to_comments($comment_field) {
?>
<div id="comment_rating_wrap">             <div class="rating"><input type="hidden" name="comment_rating" value="0" id="ratingValue" ><label for="comment_rating" class="rating_title">来给本篇内容打个分吧:</label>	    <ul><li><a href="#" data-value="1">★</a></li><li><a href="#" data-value="2">★</a></li><li><a href="#" data-value="3">★</a></li><li><a href="#" data-value="4">★</a></li><li><a href="#" data-value="5">★</a></li><li><a href="#" data-value="6">★</a></li><li><a href="#" data-value="7">★</a></li><li><a href="#" data-value="8">★</a></li><li><a href="#" data-value="9">★</a></li><li><a href="#" data-value="10">★</a></li></ul></div>
<div >
<?php display_average_rating() ?></div><!-- 显示当前平均分 -->
</div>
<?php
return $comment_field;
}
add_action('comment_form_top', 'add_rating_to_comments'); // 在评论表单字段之前添加评分表单// 保存评分到评论元数据
function save_rating_to_comment($comment_id) {if (isset($_POST['comment_rating'])) {$rating = intval($_POST['comment_rating']);if ($rating > 0 && $rating <= 10) {add_comment_meta($comment_id, 'rating', $rating);}}
}
add_action('comment_post', 'save_rating_to_comment');// 在评论列表中显示评分
add_filter( 'comment_text', function( $comment_text, $comment ) {$rating = get_comment_meta( $comment->comment_ID, 'rating', true );if ( $rating ) {$comment_text= '<div class="star-rating" data-star="' . $rating . '"></div><p class="commnet_show">'.$comment_text.' </p>';}return $comment_text;
}, 10, 2 );// 计算和显示所有评论的平均分
function display_average_rating() {global $post;$comments = get_comments('post_id=' . $post->ID);$ratings = array_map(function($comment) {return get_comment_meta($comment->comment_ID, 'rating', true);}, $comments);$ratings = array_filter($ratings); // 移除空值$average = count($ratings) ? array_sum($ratings) / count($ratings) : 0;echo '目前站内评价: <span class="average_rate">' . number_format($average, 1).'</span>';
}
/// 在评论列表页 comment页 增加了一段js ,用于处理获取数据。

这句话是调用平均分的方法,加到你觉得合适的地方吧。

<?php display_average_rating() ?>

在评论页(comment.php)增加评分处理程序

添加完了后台功能,你还需要处理前端页面的评分,下面这段程序实现前端页面的评分功能。将下面代码复制到 comment.php 中。

    <!-- 获取评分值,并修改点击颜色 ---><script>document.querySelectorAll('.rating a').forEach(function(link) {link.onclick = function() {var val = link.getAttribute('data-value');document.getElementById('ratingValue').value = val;// Highlight the clicked item and remove highlight from the restdocument.querySelectorAll('.rating a').forEach(function(a) {a.style.color = '#cccccc';});for(var i = 1; i <= val; i++) {document.querySelector('.rating a[data-value="' + i + '"]').style.color = '#ffb300';}return false;};});</script>

增加评分样式(style.css)

本例亮点:用CSS实现读取数据并转换成对应的星星数量

在前端页面展示分值时,从后台获取的是一个数值。但并不是小星星。通常做法是使用js获取用户的评分数值,然后使用js+CSS实现输出与分值相等的五角星数量。但是:能用CSS解决的问题就不要用JS。所以,在这里我使用了 css 的自定义属性 data-* 直接获取了每个评价的评分。然后利用CSS的伪类,对应输出不同数量的五角星。完美躲过了js。

把下面的样式表内容添加到你网站的样式表中:

/*************************************** 评论打分 */
.rating {unicode-bidi: bidi-override;  
}.rating_title{float: left;font-size: 0.8rem;
}.rating ul {list-style: none;display: inline-block;margin: 0;padding: 0;margin-left: 5px;
}.rating li {float: left;display: inline-block;font-family: "黑体";font-size:1.2rem;font-weight: bold;margin-right: 2px;
}.rating a {color: #cccccc;text-decoration: none;cursor: pointer;
}.rating a:hover{color: #FFB300 !important;text-decoration: none;
}.star-rating {display: inline-block;  
}
.star-rating:before {content: attr(data-star);color: #FFD700;display: inline-block;font-size: 16px;height: 20px;line-height: 20px;width: 100%;overflow: hidden;font-family: "黑体";
}.star-rating[data-star="1"]:before { content: '★';}
.star-rating[data-star="2"]:before { content: '★★';}
.star-rating[data-star="3"]:before { content: '★★★';}
.star-rating[data-star="4"]:before { content: '★★★★';}
.star-rating[data-star="5"]:before { content: '★★★★★';}
.star-rating[data-star="6"]:before { content: '★★★★★★';}
.star-rating[data-star="7"]:before { content: '★★★★★★★';}
.star-rating[data-star="8"]:before { content: '★★★★★★★★';}
.star-rating[data-star="9"]:before { content: '★★★★★★★★★';}
.star-rating[data-star="10"]:before { content: '★★★★★★★★★★';}.commnet_show{margin-left: 5px;height: 20px;line-height: 20px;
}
.average_rate{font-size: 16px;font-weight: bold;color: gold;
}

这样,漂亮的评分功能就这样实现了。当然,样式表你可以根据使用自己调整。

完成

这下是真的做完了。由于我个人的PHP水平也很有限,代码仅供参考。如果您有更好的建议或者有任何的问题,欢迎在下面评论区留言。我会认真的在下面等你的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/378835.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防洪墙的安全内容检测+http请求头

1、华为的IAE引擎&#xff1a;内部工作过程 IAE引擎主要是针对2-7层进行一个数据内容的检测 --1、深度检测技术 (DPI和DPF是所有内容检测都必须要用到的技术) ---1、DPI--深度包检测&#xff0c;针对完整的数据包&#xff0c;进行内容的识别和检测 1、基于特征子的检…

【字幕】字幕特效入门

前言 最近两周调研了一下字幕特效的底层程序逻辑&#xff0c;因为工作内容的原因&#xff0c;就分享几个自己找的链接具体细节就不分享了&#xff0c;CSDN也是我的个人笔记&#xff0c;只记录一些简单的内容用于后续自己方便查询&#xff0c;顺便帮助一下正在苦苦查阅资料入门…

详细的等保测评攻略

信息安全等级保护是中国特有的信息安全保障体系&#xff0c;旨在根据信息系统的重要性对其进行分级保护。随着技术的进步和威胁的变化&#xff0c;等保标准也在不断更新。等保2.0自2019年12月1日起施行&#xff0c;相较于之前的版本&#xff0c;它不仅涵盖了传统信息系统&#…

Spring Data Jpa 原生SQL联表查询返回自定义DTO

Spring Data Jpa 原生SQL联表查询返回自定义DTO 方案一&#xff1a;返回Map 这个就不说了 方案二&#xff1a;实体定义成接口的形式 该方式最直观&#xff01;&#xff01;推荐&#xff01;&#xff01;&#xff01; 注意&#xff1a;XxxDto是interface接口&#xff0c;而…

LabVIEW 与 PLC 通讯方式

在工业自动化中&#xff0c;LabVIEW 与 PLC&#xff08;可编程逻辑控制器&#xff09;的通信至关重要&#xff0c;常见的通信方式包括 OPC、Modbus、EtherNet/IP、Profibus/Profinet 和 Serial&#xff08;RS232/RS485&#xff09;。这些通信协议各有特点和应用场景&#xff0c…

【开发指南】HTML和JS编写多用户VR应用程序的框架

1.概述 Networked-Aframe 的工作原理是将实体及其组件同步到连接的用户。要连接到房间&#xff0c;您需要将networked-scene组件添加到a-scene元素。对于要同步的实体&#xff0c;请向其添加networked组件。默认情况下&#xff0c;position和rotation组件是同步的&#xff0c;…

LabVIEW电路产品功能自动检测系统

开发基于LabVIEW的电路产品功能自动检测系统。该系统通过整合先进的硬件和软件技术&#xff0c;实现了电路产品的自动化测试&#xff0c;显著提高了测试效率和准确性&#xff0c;对于提升电子产品的可靠性和工作效率具有重要意义。 项目背景 在电子制造业中&#xff0c;电路产…

2.javaWeb_请求和响应的处理(Request,Response)

2.请求和响应的处理 文章目录 2.请求和响应的处理一、动态资源和静态资源javax.servlet(包) 二、Servlet体系1.简介2.HttpServlet3.Servlet生命周期 三、Request对象1.ServletRequest1)ServletRequest主要功能有&#xff1a;2)ServletRequest类的常用方法: 2.HttpServletReques…

请你谈谈:spring bean的生命周期 - 阶段2:Bean实例化阶段

在Spring框架中&#xff0c;Bean的实例化是Bean生命周期中的一个重要阶段。这个过程包括两个关键的子阶段&#xff1a;Bean实例化前阶段和Bean实例化阶段本身。 BeanFactoryPostProcessor&#xff1a;BeanFactoryPostProcessor是容器启动阶段Spring提供的一个扩展点&#xff0…

LG 选择 Flutter 来增强其智能电视操作系统 webOS

可以这个话题会让大多数人困惑&#xff0c;2024 年了为什么还会冒出 webOS 这种老古董&#xff1f;然后 LG 为什么选择 webOS &#xff1f;现在为什么又选择 Flutter &#xff1f; 其实早在 Google I/O 发布 Flutter 3.22 版本的时候&#xff0c;就提到了 LG 选择 Flutter 来增…

智慧园区整体解决方案3PPT(41页)

智慧园区整体解决方案概述智慧园区整体解决方案旨在通过先进的科技手段打造一个智能化、网络化的园区环境。该方案涵盖了私有云部署、智能会议系统、智慧物管、视频监控中心、消防监控中心、绿色健康大数据平台、智慧一卡通系统、智慧停车系统、智能餐厅、安全监控系统等多个方…

Flutter 状态管理新境界:多Provider并行驱动UI

前言 在上一篇文章中&#xff0c;我们讨论了如何使用 Provider 在 Flutter 中进行状态管理。 本篇文章我们来讨论如何使用多个 Provider。 在 Flutter 中&#xff0c;使用 Provider 管理多个不同的状态时&#xff0c;你可以为每个状态创建一个单独的 ChangeNotifierProvider…

Android中OkHttp3中超时时间概述

目录 前言connectTimeoutreadTimeoutwriteTimeoutcallTimeoutpingInterval拓展 前言 可以看到&#xff0c;使用还是很简单的。主要相关的有这五个参数&#xff0c;其中我们常用到是就是connectTimeout、readTimeout和writeTimeout。 再看上图&#xff0c;可以看到默认下connec…

电脑压缩视频文件 电脑压缩视频大小的方法

在数字化时代&#xff0c;视频已成为我们记录生活、分享快乐的重要工具。然而&#xff0c;大尺寸的视频文件常常让分享和存储变得棘手。如何在保持视频画质的前提下&#xff0c;轻松减小视频文件大小&#xff1f;今天&#xff0c;就让我们一起探索苹果电脑上的几种高效视频压缩…

探索Facebook的最新更新:社交体验的新高度

Facebook作为全球领先的社交媒体平台&#xff0c;一直致力于不断创新和改进&#xff0c;以提供更优质的用户体验。近期&#xff0c;Facebook推出了一系列新的更新&#xff0c;旨在提升用户的社交互动体验和平台功能。本文将详细探讨这些最新更新&#xff0c;分析其对用户和社交…

nginx全局块的user指令

文章目录 1、user指令1.1、进入nginx解压的目录1.2、./configure --help1.3、工作进程默认是nobody 2、user指令的使用步骤:2.1、设置一个用户信息"www"2.2、 创建一个用户2.3、./nginx -s reload2.4、创建/root/html/index.html页面&#xff0c;添加如下内容2.5、修…

数电基础 - 模数转换

目录 一. 简介 二. A/D转换器 三. 取样-保持电路 四. 并联比较型A/D转换器 五. 反馈比较型A/D转换器 六. 双积分型A/D转换器 七. V-F变换型A/D转换器 八. 总结 一. 简介 模数转换&#xff08;Analog-to-Digital Conversion&#xff0c;简称 ADC&#xff09;是将模拟信号…

AV1技术学习: Compound Prediction

一、双向 Compound Prediction AV1支持两个参考帧的预测通过多种复合模式线性组合。复合预测公式为 其中&#xff0c;权重m(x, y) is scaled by 64 以进行整数计算&#xff0c;R1(x, y)和R2(x, y)表示两个参考块中位于(x, y)的像素。P(x, y)将按比例缩小 1/64 以形成最终的预测…

taocms 3.0.1 本地文件泄露漏洞(CVE-2021-44983)

前言 CVE-2021-44983 是一个影响 taoCMS 3.0.1 的远程代码执行&#xff08;RCE&#xff09;漏洞。该漏洞允许攻击者通过上传恶意文件并在服务器上执行任意代码来利用这一安全缺陷。 漏洞描述 taoCMS 是一个内容管理系统&#xff08;CMS&#xff09;&#xff0c;用于创建和管…

使用 ABBYY FineReader PDF 15 在创建或转换 PDF 时自动生成书签

使用 ABBYY 为 PDF 文件添加书签&#xff0c;可以帮助快速定位文档中的主要内容&#xff0c;也能更方便的梳理出一份文档大纲。 有很多 PDF 文件在创建时并没有编辑书签&#xff0c;这里介绍使用 ABBYY FineReader PDF 15&#xff08;Win 系统&#xff09;在 PDF 中自动添加书…