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

news2024/9/22 0:56:59

今天要 给你的 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 rest
	    document.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.coloradmin.cn/o/1933061.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

完美的用户体验:如何设计一个直观和有效的网站导航?

APP的顶部导航栏对我们来说很熟悉。导航栏是UI设计中不可或缺的一部分&#xff0c;几乎每个页面都使用导航栏。虽然导航栏看起来很简单&#xff0c;不需要太多精力&#xff0c;但是设计一个与产品需求和客户目标高度匹配的导航栏并不是那么容易的。导航栏的设计标准有很多细节需…

SpringBoot集成MQTT实现交互服务通信

引言 本文是springboot集成mqtt的一个实战案例。 gitee代码库地址&#xff1a;源码地址 一、什么是MQTT MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布/订阅&#xff08;publish/subscribe&…

C++ : 移除链表元素/合并两个有序链表题解

目录 1.移除链表元素 分析 代码 2.合并两个有序链表 分析 代码 1.移除链表元素 分析 像这种移除元素的&#xff0c;加个哨兵位头节点会比较方便&#xff0c;因为旧的头会有被移除的情况&#xff0c;不好控制。这里只需要用cur指向待遍历的节点&#xff0c;prev指向cur的…

AI大牛Karpathy创办Eureka Labs专注AI+教育

&#x1f989; AI新闻 &#x1f680; AI大牛Karpathy创办Eureka Labs专注AI教育 摘要&#xff1a;前OpenAI大牛Karpathy离职半年后宣布创办专注AI与教育的公司Eureka Labs&#xff0c;旨在通过生成式AI优化教育体验。公司首个项目LLM101n课程已在GitHub获得高赞&#xff0c;目…

C++ 继承详解:从基础到深入

继承是面向对象编程中最强大的功能之一&#xff0c;它不仅促进了代码的重用&#xff0c;还帮助我们构建复杂的系统。在C中&#xff0c;通过继承&#xff0c;我们可以创建一个新的类&#xff08;称为派生类&#xff09;来扩展现有类&#xff08;基类&#xff09;的功能。本文将全…

基于python的百度资讯爬虫的设计与实现

研究背景 随着互联网和信息技术的飞速发展&#xff0c;网络已经成为人们获取信息的主要来源之一。特别是搜索引擎&#xff0c;作为信息检索的核心工具&#xff0c;极大地改变了人们获取信息的方式。其中&#xff0c;百度作为中国最受欢迎的搜索引擎之一&#xff0c;其新闻搜索…

[GXYCTF2019]Ping Ping Ping1

打开靶机 结合题目名称&#xff0c;考虑是命令注入&#xff0c;试试ls 结果应该就在flag.php。尝试构造命令注入载荷。 cat flag.php 可以看到过滤了空格,用 $IFS$1替换空格 还过滤了flag&#xff0c;我们用字符拼接的方式看能否绕过,ag;cat$IFS$1fla$a.php。注意这里用分号间隔…

【总结】逻辑运算在Z3中运用+CTF习题

国际赛IrisCTF在前几天举办&#xff0c;遇到了一道有意思的题目&#xff0c;特来总结。 题目 附件如下&#xff1a;&#x1f4ce;babyrevjohnson.tar 解题过程 关键main函数分析如下&#xff1a; int __fastcall main(int argc, const char **argv, const char**envp){int v4…

Golang | Leetcode Golang题解之第236题二叉树的最近公共祖先

题目&#xff1a; 题解&#xff1a; func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {parent : map[int]*TreeNode{}visited : map[int]bool{}var dfs func(*TreeNode)dfs func(r *TreeNode) {if r nil {return}if r.Left ! nil {parent[r.Left.Val] rdfs(r.L…

用 WireShark 抓住 TCP

Wireshark 是帮助我们分析网络请求的利器&#xff0c;建议每个同学都装一个。我们先用 Wireshark 抓取一个完整的连接建立、发送数据、断开连接的过程。 简单的介绍一下操作流程。 1、首先打开 Wireshark&#xff0c;在欢迎界面会列出当前机器上的所有网口、虚机网口等可以抓取…

气膜体育馆进校园:政策支持与市场前景—轻空间

过去20多年&#xff0c;气膜建筑、场馆相关项目在国内落地众多&#xff0c;展现出强大的市场潜力。2022年8月&#xff0c;《北京晚报》粗略统计&#xff0c;北京全市已建有气膜馆百余座&#xff0c;且数量还在不断增加。这一发展趋势不仅仅体现在北京&#xff0c;全国范围内也都…

微软GraphRAG +本地模型+Gradio 简单测试笔记

安装 pip install graphragmkdir -p ./ragtest/input#将文档拷贝至 ./ragtest/input/ 下python -m graphrag.index --init --root ./ragtest修改settings.yaml encoding_model: cl100k_base skip_workflows: [] llm:api_key: ${GRAPHRAG_API_KEY}type: openai_chat # or azu…

如何通过企业微信会话存档保护企业利益?

赵总: 张经理&#xff0c;最近行业内频发数据泄露事件&#xff0c;我们的客户资料和内部沟通记录安全吗&#xff1f; 张经理: 赵总&#xff0c;我们已经采取了一系列措施来加强数据安全。特别是针对企业微信的沟通记录&#xff0c;我们最近引入了安企神软件&#xff0c;它能很…

【BUG】已解决:AttributeError: ‘NoneType‘ object has no attribute ‘split‘

已解决&#xff1a;AttributeError: ‘NoneType‘ object has no attribute ‘split‘ 英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;…

通用图形处理器设计GPGPU基础与架构(四)

一、前言 本文将介绍GPGPU中线程束的调度方案、记分牌方案和线程块的分配与调度方案。 二、线程束调度 在计算机中有很多资源&#xff0c;既可以是虚拟的计算资源&#xff0c;如线程、进程或数据流&#xff0c;也可以是硬件资源&#xff0c;如处理器、网络连接或 ALU 单元。调…

大数据平台之Kafka

Apache Kafka 是一个分布式流处理平台&#xff0c;最初由 LinkedIn 开发&#xff0c;并在 2011 年开源成为 Apache 项目。Kafka 主要用于构建实时数据管道和流应用&#xff0c;具有高吞吐量、低延迟、容错性强等特点。以下是对 Kafka 的详细介绍&#xff1a; 核心概念 1. Prod…

爬虫瑞数5案例:某大学总医院

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关 一、瑞数简介 瑞数动态安全 Botgate(机器人防火墙)以“动态安全”技术为核心,通过动态封装、动态验证、动态混淆、动态令牌等技术对服务器网页底层代码持续动态变换,…

【 LCD1602显示屏】使用STC89C51控制1602显示、读写操作时序

文章目录 LCD1602显示概述&#xff1a;引脚说明控制指令接线 控制思路步骤 代码示例总结对databuffer dataShow;的理解 LCD1602显示 概述&#xff1a; LCD1602&#xff08;Liquid Crystal Display&#xff09;是一种工业字符型液晶&#xff0c;能够同时显示 1602 即 32 字符…

深入理解Android中的缓存与文件存储目录

&#x1f31f; 引言 在Android应用开发中&#xff0c;合理管理应用的数据存储至关重要。应用可能需要保存各种类型的数据&#xff0c;从简单的配置信息到多媒体文件&#xff0c;甚至是缓存数据以提高性能和用户体验。Android提供了多个内置目录来满足这些需求&#xff0c;但它…

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

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